Работа с Access и Excel

nikitos_EKB
Дата: 14.05.2011 22:08:30
У меня такой вопрос.
Моя программа должна создавать определенную отчетность в Excel. К программе подключенны 2 базы данных Access с названиями: BD1, BD2.
BD1-состоит из 5 таблиц( Table1, Table2...)
BD2-состоит из 1 таблицы (newTable).
Программно выбираются некоторые данные из таблиц BD1 и передаются в BD2 в newTable.Список всех таблиц BD1 отображен в комбобоксе, так же я сохраняю в newTable в столбец numtb и название таблицы, которую выбрал из комбобокса. Так как данные из BD1 выбираются из разных таблиц, то соответственно в newTable (BD2) они могут быть сохраненными не по порядку ( т.е. newTable будет состоять из : строка из Table1, строка из Table3, строка из Table5 ну и т.д.), так вот как сделать передачу данных из newTable в Excel, но что бы строки переданные из Table1 были записаны в диапазоне А1:А10,строки переланные из Table2 в дипозоне ячеек А11:А20 ,и так все 5 таблиц????
Я немного написал код, пожалуйста подправте и добавте что сможите. Вот так я вывожу данные в Excel:
procedure TForm1.Excel1Click(Sender: TObject);
var
i: integer;
Sheet: variant;
begin
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text:= ' select * from '+ sEdit1.Text +' where numtb="Общеобразовательные_дисциплины"';
ADOQuery2.Open;
if ADOQuery2.RecordCount > 0 then
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Visible:=True;
Workbook:=Excel.Workbooks.Open('C:\Лист.xlsx');
Sheet:= WorkBook.Sheets[1];
i:=6;
ADOQuery2.First;
while not ADOQuery2.Eof do
begin
Sheet.Range['B1', EmptyParam].EntireRow.AutoFit;
Sheet.Range'B'+IntToStri)]:=ADOQuery2.FieldByName'Предмет').AsString;
Sheet.Range['C' + IntToStr(i)]:= ADOQuery2.FieldByName('Экзамены').AsString;
Sheet.Range['D' + IntToStr(i)]:= ADOQuery2.FieldByName('Зачеты').AsString;
Sheet.Range['E' + IntToStr(i)]:= ADOQuery2.FieldByName('Курсовые').AsString;
Sheet.Range['G' + IntToStr(i)]:= ADOQuery2.FieldByName('Всего').AsString;
Sheet.Range['H' + IntToStr(i)]:= ADOQuery2.FieldByName('Теоритические').AsString;
Sheet.Range['I' + IntToStr(i)]:= ADOQuery2.FieldByName('Лабораторные').AsString;
Sheet.Range['J' + IntToStr(i)]:= ADOQuery2.FieldByName('Курсовое проектиров').AsString;
ADOQuery2.Next;
i:=i+1
end;
ADOQuery2.Close;
end;
end;
///////
ADOQuery2.SQL.Text:= ' select * from '+ sEdit1.Text +' where numtb="Общеобразовательные_дисциплины"';//Общеобразовательные_дисциплины- это запись с комбобокса, получается что в Excel выводятся данные где есть эта запись.
соответственно мне так же нужно добавить и остальные записи с комбобокса, но только я незнаю куда их вписать в код, и как указать диапазон для каждой записи, подскажите.
Johnmen
Дата: 14.05.2011 22:25:13
Вопрос то в чем? (с)
nikitos_EKB
Дата: 14.05.2011 22:33:05
Johnmen
Вопрос то в чем? (с)

как передать данные каждой таблицы в определенный диапозоне ячеек в excel, что бы в диапозоне A1:A10 записывалась 1 таблица, а в А11:А20 2 таблица и т.д.
andreymx
Дата: 14.05.2011 22:45:22
а для чего при экспорте акцесса в эксель нужен промежуточный костыль а-ля делфи?
Johnmen
Дата: 14.05.2011 22:50:33
Простите, вопрос не пОнял.
nikitos_EKB
Дата: 14.05.2011 23:39:41
andreymx
а для чего при экспорте акцесса в эксель нужен промежуточный костыль а-ля делфи?


ну наверно потому что у меня такое задание по курсовому)))))
Anatoly Podgoretsky
Дата: 15.05.2011 00:03:12
Ну это твои тараканы, мы то тут причем.
nikitos_EKB
Дата: 15.05.2011 00:15:36
Anatoly Podgoretsky
Ну это твои тараканы, мы то тут причем.

мда миленько.... долго наверно думал над ответом, и это походу самая умная мысль которая только нашлась у тебя в голове! Спасибо тебе, и извени что отнял у тебя твое драгоценное время!!!!!
Johnmen
Дата: 15.05.2011 00:34:49
Не тебе давать оценки, смерд.
Будь смеренен.
nikitos_EKB
Дата: 15.05.2011 01:37:03
Johnmen,

вообще то я просто обратился за советом, и если не чем человек не в состоянии помочь, то совсем не обязательно писать сообщения про "тараканов", можно просто ни чего не отвечать, то что это мои тараканы я и без него вкурсе.