Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2015, 16:22   #1
sdr1
Пользователь
 
Регистрация: 06.10.2014
Сообщений: 46
По умолчанию вывод данных из 2-х adoquery в excel поочередно

Добрый день форумчане, возникла такая необходимость вывести данные из 2-х Adoquery поочередно в один лист excel, сначала данные которые отображаются в dbgrid1, далее в этих же столбцах строки отображаемые в dbgrid2. Если выводить из одного ado, то все красиво, а вот чтоб дальша информация в этом же листе шла из другого ado неполучается, может подтолкнете на мысль.
Вот код для 1-го adoquery:
Код:
var
    XL, Cell1, Cell2, ArrayData: Variant;
    RowCount: integer;
    BeginCol, BeginRow,i,ColCount:byte;
begin
    BeginCol := 1;
    BeginRow := 3;
    RowCount := ADOQuery1.RecordCount; 
ColCount := 10; //
    XL := CreateOleObject('Excel.Application');  
    XL.Application.EnableEvents := false;  
    XL.WorkBooks.Add;   
    XL.Rows.Rows[2].Font.Bold:=true; 
    XL.Rows.Rows[2].Font.Size:=12; 
    XL.Columns.Columns[8].Font.Bold:=true;
    XL.Rows.Rows[2].WrapText := True; 
    XL.Rows.Rows[2].HorizontalAlignment := 3;
    XL.Rows.Rows[2].VerticalAlignment := 2;
    XL.Cells[2,1]:='ÔÈÎ Âëàäåëüöà ÊÑÊÏ';//Ôîðìèðóåì øàïêó òàáëèöû
    XL.Cells[2,2]:='Óíèêàëüíûé íîìåð ÊÑÊÏ';
    XL.Cells[2,3]:='Ïåðèîä äåéñòâèÿ ÊÑÊÏ';
    XL.Cells[2,4]:='ÑÍÈËÑ, ðåêâèçèòû îñíîâíîãî äîêóìåíòà, óäîñòîâåðÿþùåãî ëè÷íîñòü Âëàäåëüöà ÊÑÊÏ (íîìåð, ñåðèÿ, äàòà âûäà÷è)';
    XL.Cells[2,5]:='Ñâåäåíèÿ î äîêóìåíòàõ, ïîäòâåðæäàþùèõ ïîëíîìî÷èÿ Âëàäåëüöà ÊÑÊÏ äåéñòâîâàòü ïî ïîðó÷åíèþ Îðãàíèçàöèè-çàÿâèòåëÿ(íàèìåíîâàíèå, íîìåð è äàòà âûäà÷è)';
    XL.Cells[2,6]:='Ïîäðàçäåëåíèå è äîëæíîñòü Âëàäåëüöà ÊÑÊÏ';
    XL.Cells[2,7]:='Êëþ÷åâàÿ ôðàçà (êîäîâîå ñëîâî) Âëàäåëüöà ÊÑÊÏ';
    XL.Cells[2,8]:='Câåäåíèÿ îá Îðãàíèçàöèè-çàÿâèòåëå (äàòà è ðåãèñòðàöèîííûé íîìåð Çàÿâëåíèÿ íà ðåãèñòðàöèþ, ïîëíîå íàèìåíîâàíèå è àäðåñ ìåñòîíàõîæäåíèÿ Îðãàíèçàöèè-çàÿâèòåëå, ÎÃÐÍ, ÈÍÍ, ÊÏÏ, Êîä ÑÏÇ, ó÷åòíûé íîìåð ÃÌÓ)';
    XL.Cells[2,9]:='Äàòà ïðèîñòàíîâëåíèÿ äåéñòâèÿ ÊÑÊÏ, îñíîâàíèå ïðèîñòàíîâëåíèÿ äåéñòâèÿ ÊÑÊÏ';
    XL.Cells[2,10]:='Äàòà àííóëèðîâàíèÿ (îòçûâà) ÊÑÊÏ, îñíîâàíèå àííóëèðîâàíèÿ (îòçûâà) ÊÑÊÏ';

    XL.Columns.Columns[1].ColumnWidth:=25;//óñòàíàâëèâàåì øèðèíó ñòîëáöîâ
    XL.Columns.Columns[2].ColumnWidth:=13;
    XL.Columns.Columns[3].ColumnWidth:=20;
    XL.Columns.Columns[4].ColumnWidth:=20;
    XL.Columns.Columns[5].ColumnWidth:=20;
    XL.Columns.Columns[6].ColumnWidth:=18;
    XL.Columns.Columns[7].ColumnWidth:=18;
    XL.Columns.Columns[8].ColumnWidth:=25;
    XL.Columns.Columns[9].ColumnWidth:=15;
    XL.Columns.Columns[10].ColumnWidth:=14;

    ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant); // çàäàåì âàðèàíòíûé ìàññèâ, êîòîðûé áóäåì çàïîëíÿòü äàííûìè èç ADOTable1

    ADOQuery1.First;//çàïîëíÿåì ìàññèâ çíà÷åíèÿìè èç ADOTable1
    for i := 1 to RowCount do
    begin
        ArrayData[i,1] := #$A +ADOQuery1['fio_name'];
        ArrayData[i,2] := ADOQuery1['un_nomer'];
        ArrayData[i,3] := datetostr(ADOQuery1['date_ot'])+' - '+datetostr(ADOQuery1['date_do']);
        ArrayData[i,4] := ADOQuery1['snils']+ #$A +ADOQuery1['pasport1'];
        ArrayData[i,5] := #$A +ADOQuery1['sved_doc1'];
        ArrayData[i,6] := ADOQuery1['podrazdelenie']+ #$A +ADOQuery1['dolgnost'];
        ArrayData[i,7] := #$A +ADOQuery1['kluch_fraza1'];
        ArrayData[i,8] := #$A +ADOQuery1['zayavl_na_reg']+ ' ' +ADOQuery1['organization_name']+ ' ' +ADOQuery1['adress']+ ' ' +ADOQuery1['ogrn']+ ' ' +ADOQuery1['inn']+ ' ' +ADOQuery1['kpp']+ ' ' +ADOQuery1['spz']+ ' ' +ADOQuery1['gmu'];
        ArrayData[i,9] := ADOQuery1['data_priost1'];
        ArrayData[i,10] := ADOQuery1['data_anul1'];
        ADOQuery1.Next;
        end;
       
    end;
    Cell1 := XL.Cells[BeginRow-1, BeginCol];       // ëåâàÿ âåðõíÿÿ ÿ÷åéêà îáëàñòè â êîòîðóþ áóäåì âûâîäèòü äàííûå
    Cell2 := XL.Cells[BeginRow+RowCount-1, BeginCol + ColCount-1];//ïðàâàÿ íèæíÿÿ ÿ÷åéêà îáëàñòè êóäà áóäåì âûâîäèòü äàííûå
    XL.Range[XL.Cells[BeginRow, BeginCol], Cell2].Value := ArrayData; //çàïîëíÿåì êíèãó íàøèìè äàííûìè
    XL.Range[Cell1, Cell2].Borders.LineStyle := 1;
    XL.Columns.AutoFit;
    XL.Columns.Columns[6].WrapText:=True;
    XL.WorkBooks[1].WorkSheets[1].Range['A2:L2'].Font.Color := clBlue;
    XL.Visible := true;//äåëàåì Excel âèäèìûì
end;
sdr1 вне форума Ответить с цитированием
Старый 26.01.2015, 16:26   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В один кверик выдернуть всю нужную информацию
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.01.2015, 16:30   #3
sdr1
Пользователь
 
Регистрация: 06.10.2014
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В один кверик выдернуть всю нужную информацию
так не получится, есть старая форма, и таблица 10 полей (2014год), где в одном поле много всего записано, а есть новая форма и таблица 20 полей (2015год) где все разделено, но печатная форма одна, а нужно все объединить.
sdr1 вне форума Ответить с цитированием
Старый 26.01.2015, 16:40   #4
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

не вижу проблемы, сделать 2 цикла по очереди, сначала выгрузить из старой 10 колонок, потом из новой выгрузить 20 колонок, и будет несколько строк заполнена на 10 колонок
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 26.01.2015, 16:42   #5
sdr1
Пользователь
 
Регистрация: 06.10.2014
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
не вижу проблемы, сделать 2 цикла по очереди, сначала выгрузить из старой 10 колонок, потом из новой выгрузить 20 колонок, и будет несколько строк заполнена на 10 колонок
вот в этом то и проблема как запустить второй цикл чтоб он продолжал а не затирал первый цикл.
sdr1 вне форума Ответить с цитированием
Старый 27.01.2015, 08:27   #6
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

Код:
var
i,k:integer;
begin
...
j := rowcount;
for i := 1 to RowCount do
begin
...
end;

for i := k+1 to RowCount+k do
begin
...
end;
или

Код:
var
i,j:integer;
begin
...
j := rowcount;
for i := 1 to RowCount do
begin
...
end;

for i := 1 to RowCount do
begin
ArrayData[i+k,1] := #$A +ADOQuery1['fio_name'];
ArrayData[i+k,2] := ADOQuery1['un_nomer'];
...
end;
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 27.01.2015, 14:13   #7
sdr1
Пользователь
 
Регистрация: 06.10.2014
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
Код:
var
i,k:integer;
begin
...
j := rowcount;
for i := 1 to RowCount do
begin
...
end;

for i := k+1 to RowCount+k do
begin
...
end;
или

Код:
var
i,j:integer;
begin
...
j := rowcount;
for i := 1 to RowCount do
begin
...
end;

for i := 1 to RowCount do
begin
ArrayData[i+k,1] := #$A +ADOQuery1['fio_name'];
ArrayData[i+k,2] := ADOQuery1['un_nomer'];
...
end;
Ничего не выходит какой вариант цикла не делай всеравно выходит только информация из 2-го цикла. Если есть 2-ой цикл то информация из первого цикла не выводится, ничего не могу понять.
sdr1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод данных из Excel? ivt22 PHP 2 26.07.2014 12:00
Вывод данных в Excel Kamenuk C# (си шарп) 0 23.10.2013 16:21
Вывод данных в Excel Ericnex БД в Delphi 3 12.01.2013 14:16
Вывод данных в excel - массивом данных sergey113 Помощь студентам 4 22.08.2011 17:16
Вывод данных в Excel Novi4ek Помощь студентам 3 22.05.2008 11:32