|
Вопрос # 4 455/ вопрос открыт / |
|
[COLOR="Red"][B][U]СРОЧНО[/U][/B][/COLOR] нужна помощь!!! Для начало вкратце объясню суть задачи. Есть огромная dbf-таблица. Из нее необходимо выбрать данные по определенным критериям и сформировать отчет в Excel. Я делаю с помощью технологии ADO, вывожу в DBGrid саму таблицу. А вот отчет сделать не могу. Таблица должна состоять из нескольких строк, в каждой из которых содержится сумма всех элементов, обладающих сходными свойствами. Проблема состоит в том, что я не могу сформировать правильный SQL-запрос. Как в него добавить строки или что-то вроде того?
Или...
Есть еще идея. Можно выгружать в Excel по строке. Но есть одно "но". В процедуре выгрузки файл перезаписывается. Можно ли сделать так, чтобы сначала выгрузились все данные, а потом только он сохранился?
ПОМОГИТЕ плиз, а то на работе прибьют
Вот процедура выгрузки:
Приложение: Переключить в обычный режим- [code]
-
- procedure SendtoExcel(ShFile: string; Querys: TADOQuery; m,n:Integer);
- var
- ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData: variant;
- BeginCol, BeginRow, j: integer;
- RowCount, ColCount: integer;
- begin
-
-
- BeginCol:=2;
- BeginRow:=4;
-
-
- RowCount:=Querys.RecordCount+1;
- ColCount:=Querys.FieldDefs.Count;
-
-
- ExcelApp:=CreateOleObject('Excel.Application');
-
-
- ExcelApp.Application.EnableEvents:=False;
-
-
-
- Workbook:=ExcelApp.Workbooks.Add(ShFile);
- Workbook.SaveAs(ShFile);
- ArrayData:=VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
-
-
- Querys.DisableControls;
- Querys.First;
- while not Querys.Eof do
- begin
- for j:=1 to Querys.FieldDefs.Count do
- begin
- ArrayData[Querys.RecNo, j]:=
- Querys.FieldbyName(Querys.FieldDefs.Items[j-1].DisplayName).Value;
- end;
- Querys.Next;
- end;
- Querys.EnableControls;
-
-
- Cell1:=Workbook.Worksheets[1].Cells[BeginRow, BeginCol];
-
-
- Cell2:=Workbook.Worksheets[1].Cells[m, n];
-
-
- Range:=Workbook.Worksheets[1].Range[Cell1,Cell2];
-
-
- Range.Value:=ArrayData;
-
-
- ExcelApp.Visible:=True;
- end;
- [/code]
 |
Вопрос задал: antonio (статус: Посетитель)
Вопрос отправлен: 22 июля 2010, 14:31
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 22 июля 2010, 15:15; участников в обсуждении: 2.
|
Vic (статус: 1-ый класс), 22 июля 2010, 14:46 [#1]:
А текст запроса где?
|
|
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;
Это запрос на выборку необходимой информации.. А как в отчет его занести я хз.
|
|
Vic (статус: 1-ый класс), 22 июля 2010, 15:15 [#4]:
Попробуйте изменить текст запроса
Допустим
'Select SUM(Zena),SUM(Summa) from GODSRU.dbf
GROUPBY Summa'
этот запрос должен выдать несколько строк взависимости
от количества разных сумм
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|