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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2011, 14:40   #1
Ира08
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 17
По умолчанию Delphi+Access+Excel

Здравствуйте!
Помогите пожалуйста.

Такая задача: есть база на Access. теперь надо сделать, чтобы отчёт выводился в Excel. подключение к Excel работает, а вот как вывести необходимую информацию из базы?

знаю, что надо написать запрос в ADOQuery, но не получается. как его лучше оформить, а потом занести эту информацию в базу?

помогите пожалуйста)))
Ира08 вне форума Ответить с цитированием
Старый 14.07.2011, 15:04   #2
Ира08
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 17
По умолчанию

есть вот что:

Код:
var
   ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData : Variant;
   StartCol, StartRow, j : integer;
   RowCount, ColCount : Integer;
   n:OleVariant;
begin
   StartCol := 1;
   StartRow := 1;

 // Ðàçìåðû âûâîäèìîãî ìàññèâà äàííûõ
   RowCount := AQ_sel_in.RecordCount;
   ColCount := AQ_sel_in.FieldDefs.Count;

 // Ñîçäàíèå Excel
   ExcelApp := CreateOleObject( 'Excel.Application' );

 // Îòêëþ÷àåì ðåàêöèþ Excel íà ñîáûòèÿ, ÷òîáû óñêîðèòü âûâîä èíôîðìàöèè
   ExcelApp.Application.EnableEvents := false;

    n := true;
 //  Ñîçäàåì êíèãó (Workbook)
   Workbook := ExcelApp.WorkBooks.Add( n );
   ArrayData := VarArrayCreate( [ 0, RowCount, 1, ColCount ], varVariant );

     for j := 1 To AQ_sel_in.FieldDefs.Count do
       begin
        ArrayData[ 0, j ] := AQ_sel_in.FieldDefs.Items[ j - 1 ].DisplayName;
       end;

 // Çàïîëíÿåì ìàññèâ
   AQ_sel_in.DisableControls;
   AQ_sel_in.First;
   while not AQ_sel_in.Eof do
     begin
       for j := 1 To AQ_sel_in.FieldDefs.Count Do begin
         ArrayData[ AQ_sel_in.RecNo, j ] := AQ_sel_in.FieldbyName( AQ_sel_in.FieldDefs.Items[ j - 1 ].DisplayName ).value;
       end;
       AQ_sel_in.Next;
   end;

AQ_sel_in.EnableControls;

//  Ëåâàÿ âåðõíÿÿ ÿ÷åéêà îáëàñòè, â êîòîðóþ áóäåì âûâîäèòü äàííûå
  Cell1 := WorkBook.WorkSheets[ 1 ].Cells[ StartRow, StartCol ];
 // Ïðàâàÿ íèæíÿÿ ÿ÷åéêà îáëàñòè, â êîòîðóþ áóäåì âûâîäèòü äàííûå
   Cell2 := WorkBook.WorkSheets[ 1 ].Cells[ StartRow + RowCount, StartCol + ColCount - 1 ];

 // Îáëàñòü, â êîòîðóþ áóäåì âûâîäèòü äàííûå
   Range := WorkBook.WorkSheets[ 1 ].Range[ Cell1, Cell2 ];

 //  Âûâîä äàííûõ
   ExcelApp.Application.Cells[ 1, 1 ] := form1.Caption;
   Range.Value := ArrayData;
   ExcelApp.Visible := True;
  end;
запрос такой: select * from table
where
name=:name
and
date=ate



выводится только последняя строчка. а как мне вывести только имена? и чтобы все строчки
Ира08 вне форума Ответить с цитированием
Старый 14.07.2011, 15:13   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

достаточно просто изменить запрос на
Код:
select * from table
и всё, выведутся все строчки из таблицы

а чтобы были ТОЛЬКО имена, тогда замените код на такой:
Код:
   RowCount := AQ_sel_in.RecordCount;
   ColCount := 1;

   ExcelApp := CreateOleObject( 'Excel.Application' );

   ExcelApp.Application.EnableEvents := false;

    n := true;
   Workbook := ExcelApp.WorkBooks.Add( n );
   ArrayData := VarArrayCreate( [ 0, RowCount, 1, ColCount ], varVariant );

   ArrayData[ 0, 1 ] := 'Наименование';

   AQ_sel_in.DisableControls;
   AQ_sel_in.First;
   while not AQ_sel_in.Eof do
       ArrayData[ AQ_sel_in.RecNo, 1 ] := AQ_sel_in.FieldbyName('NAME').value;
       AQ_sel_in.Next;
   end;

AQ_sel_in.EnableControls;
......
далее по тексту...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.07.2011, 15:21   #4
Ира08
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 17
По умолчанию

не совсем работает что-то...выдаёт вот такую ошибку:
"Cannot perform this operation on a closed dataset'. Process stopped. Use Step or Run to continue."
Ира08 вне форума Ответить с цитированием
Старый 14.07.2011, 15:59   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, дык датасет же открыть надо!!!
надо сделать:
Код:
AQ_sel_in.Open;
или ищите, по какому событию датасет открывается, или банально открывайте его в начале процедуры...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.07.2011, 13:06   #6
Ира08
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 17
По умолчанию

спасибо большое. действительно заработало)))
Ира08 вне форума Ответить с цитированием
Старый 15.07.2011, 13:29   #7
Ира08
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 17
По умолчанию

ещё вопрос появился...
а если я хочу выдать имена в диапазоне определённых дат.
в запросе пишу:
select * from table
where
date between 1 and 2

при нажатии на кнопку:
var d1,d2:TDateTime;

//перед определением Excel
d1 := datetimepicker1.Date;
d2 := datetimepicker2.Date;

а потом весь остальной код.

но что-то ничего не выводится...сразу присваивается d1=0, d2=0.


когда я заношу в базу, но пишу вот это:
Код:
 AQ_ins_out.Parameters.ParamByName('date').Value :=  strtodate(SR.Name[1] + SR.Name[2] + '.' + SR.Name[4] + SR.Name[5] + '.' + SR.Name[7] + SR.Name[8]);

как вот мне теперь связать эту информацию из базы с выбранным диапазоном дат в datetimepicker1 и datetimepicker2 ? Подскажите пожалуйста)))

Последний раз редактировалось Ира08; 15.07.2011 в 13:47.
Ира08 вне форума Ответить с цитированием
Старый 15.07.2011, 14:43   #8
Ира08
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 17
По умолчанию

спасибо, уже не надо. разобралась сама)))
Ира08 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт-экспорт данных Excel-Access, и из Access-Excel Людвиг Microsoft Office Access 3 27.10.2011 14:38
access -> excel Chubbakka Microsoft Office Excel 2 28.12.2010 22:41
Delphi 7 + access + excel = out of memory Тимониссимо БД в Delphi 5 06.07.2008 07:16
Экспорт из Access в Excel, Экспорт из отчётов в таблицу Excel Kissedbythegod Microsoft Office Access 1 31.05.2008 22:15