Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 455

/ вопрос открыт /

[COLOR="Red"][B][U]СРОЧНО[/U][/B][/COLOR] нужна помощь!!! Для начало вкратце объясню суть задачи. Есть огромная dbf-таблица. Из нее необходимо выбрать данные по определенным критериям и сформировать отчет в Excel. Я делаю с помощью технологии ADO, вывожу в DBGrid саму таблицу. А вот отчет сделать не могу. Таблица должна состоять из нескольких строк, в каждой из которых содержится сумма всех элементов, обладающих сходными свойствами. Проблема состоит в том, что я не могу сформировать правильный SQL-запрос. Как в него добавить строки или что-то вроде того?

Или...

Есть еще идея. Можно выгружать в Excel по строке. Но есть одно "но". В процедуре выгрузки файл перезаписывается. Можно ли сделать так, чтобы сначала выгрузились все данные, а потом только он сохранился?

ПОМОГИТЕ плиз, а то на работе прибьют

Вот процедура выгрузки:

Приложение:
  1. [code]
  2.  
  3. procedure SendtoExcel(ShFile: string; Querys: TADOQuery; m,n:Integer);
  4. var
  5. ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData: variant;
  6. BeginCol, BeginRow, j: integer;
  7. RowCount, ColCount: integer;
  8. begin
  9.  
  10.  
  11. BeginCol:=2;
  12. BeginRow:=4;
  13.  
  14.  
  15. RowCount:=Querys.RecordCount+1;
  16. ColCount:=Querys.FieldDefs.Count;
  17.  
  18.  
  19. ExcelApp:=CreateOleObject('Excel.Application');
  20.  
  21.  
  22. ExcelApp.Application.EnableEvents:=False;
  23.  
  24.  
  25.  
  26. Workbook:=ExcelApp.Workbooks.Add(ShFile);
  27. Workbook.SaveAs(ShFile);
  28. ArrayData:=VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
  29.  
  30.  
  31. Querys.DisableControls;
  32. Querys.First;
  33. while not Querys.Eof do
  34. begin
  35. for j:=1 to Querys.FieldDefs.Count do
  36. begin
  37. ArrayData[Querys.RecNo, j]:=
  38. Querys.FieldbyName(Querys.FieldDefs.Items[j-1].DisplayName).Value;
  39. end;
  40. Querys.Next;
  41. end;
  42. Querys.EnableControls;
  43.  
  44.  
  45. Cell1:=Workbook.Worksheets[1].Cells[BeginRow, BeginCol];
  46.  
  47.  
  48. Cell2:=Workbook.Worksheets[1].Cells[m, n];
  49.  
  50.  
  51. Range:=Workbook.Worksheets[1].Range[Cell1,Cell2];
  52.  
  53.  
  54. Range.Value:=ArrayData;
  55.  
  56.  
  57. ExcelApp.Visible:=True;
  58. end;
  59. [/code]


antonio Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: antonio (статус: Посетитель)
Вопрос отправлен: 22 июля 2010, 14:31
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 22 июля 2010, 15:15; участников в обсуждении: 2.
Vic

Vic (статус: 1-ый класс), 22 июля 2010, 14:46 [#1]:

А текст запроса где?
antonio

antonio (статус: Посетитель), 22 июля 2010, 15:01 [#2]:

Ну я толком даже не знаю, что писать... У меня паника начинается, сегодня нужно показать, а у меня мало что есть.

const
QQQ='Select Sex,Ysh,Data,Nzak,N_par,Fo,Zvet,Df,Sht,Mas,Zena,Summa from GODSRU.dbf ';

ADOConnection1.Connected:=True;
with ADOQuery2 do
begin
SQL.Clear;
SQL.Add(Unit1.QQQ+'WHERE Summa<7 and Mas<=0.02 and Mas>=0.01');
SQL.Add('or');
SQL.Add('Summa<8 and Mas<=0.05 and Mas>=0.03');
SQL.Add('or');
SQL.Add('Summa<9 and Mas<=0.07 and Mas>=0.06');
SQL.Add('or');
SQL.Add('Summa<10 and Mas<=0.10 and Mas>=0.08');
SQL.Add('or');
SQL.Add('Summa<11 and Mas<=0.12 and Mas>=0.11');
SQL.Add('or');
SQL.Add('Summa<12 and Mas<=0.14 and Mas>=0.13');
SQL.Add('or');
SQL.Add('Summa<15 and Mas<=0.19 and Mas>=0.15');
SQL.Add('or');
SQL.Add('Summa<17 and Mas<=0.24 and Mas>=0.20');
SQL.Add('or');
SQL.Add('Summa<18 and Mas<=0.29 and Mas>=0.25');
SQL.Add('or');
SQL.Add('Summa<21 and Mas<=0.39 and Mas>=0.39');
SQL.Add('or');
SQL.Add('Summa<23 and Mas<=0.49 and Mas>=0.40');
SQL.Add('or');
SQL.Add('Summa<25 and Mas<=0.59 and Mas>=0.50');
SQL.Add('or');
SQL.Add('Summa<28 and Mas<=0.69 and Mas>=0.60');
SQL.Add('or');
SQL.Add('Summa<30 and Mas<=0.79 and Mas>=0.70');
SQL.Add('or');
SQL.Add('Summa<33 and Mas<=0.89 and Mas>=0.80');
SQL.Add('or');
SQL.Add('Summa<36 and Mas<=0.99 and Mas>=0.90');
SQL.Add('or');
SQL.Add('Summa<44 and Mas<=1.24 and Mas>=1.00');
SQL.Add('or');
SQL.Add('Summa<49 and Mas<=1.49 and Mas>=1.25');
SQL.Add('or');
SQL.Add('Summa<55 and Mas<=1.74 and Mas>=1.50');
SQL.Add('or');
SQL.Add('Summa<58 and Mas<=1.99 and Mas>=1.75');
SQL.Add('or');
SQL.Add('Summa<64 and Mas<=2.24 and Mas>=2.00');
Open;
end;
end;

Это запрос на выборку необходимой информации.. А как в отчет его занести я хз.
antonio

antonio (статус: Посетитель), 22 июля 2010, 15:06 [#3]:

http://www.delphisources.ru/forum/attachment.php?attachmentid=1515&d=1279784395 -Результат запроса

Запрос необходимо сформировать таким образом, чтобы по каждой массе из Excel'евской таблицы суммировалось то, что выделено красным, с условием того, что выделено синим цветом (Table.jpg). Необходимо, чтобы была такая таблица в итоге. Желтый и розовый - строка и столбец с формулами.

http://www.delphisources.ru/forum/attachment.php?attachmentid=1516&d=1279784715 Отчет
Vic

Vic (статус: 1-ый класс), 22 июля 2010, 15:15 [#4]:

Попробуйте изменить текст запроса
Допустим
'Select SUM(Zena),SUM(Summa) from GODSRU.dbf
GROUPBY Summa'
этот запрос должен выдать несколько строк взависимости
от количества разных сумм

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:38
Выполнено за 0.04 сек.