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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2009, 08:30   #1
kuzmich
Форумчанин
 
Аватар для kuzmich
 
Регистрация: 05.05.2007
Сообщений: 236
Вопрос Экспорт в Excel в БД

привет всем! я создаю экспорт в Excel. Когда жму кнопку Экспорт - у меня выводится только одна запись и то не в ту колонку.

Код:
var
XLApp,Sheet,Colum:Variant;
index,i:Integer;
begin
XLApp:= CreateOleObject('Excel.Application');
XLApp.Visible:=true;
XLApp.Workbooks.Add(-4167);
XLApp.Workbooks[1].WorkSheets[1].Name:='Îò÷¸ò';
Colum:=XLApp.Workbooks[1].WorkSheets['Îò÷¸ò'].Columns;
Colum.Columns[1].ColumnWidth:=20;
Colum.Columns[2].ColumnWidth:=20;
Colum.Columns[3].ColumnWidth:=20;
Colum.Columns[4].ColumnWidth:=20;
Colum:=XLApp.Workbooks[1].WorkSheets['Îò÷¸ò'].Rows;
Colum.Rows[2].Font.Bold:=true;
Colum.Rows[1].Font.Bold:=true;
Colum.Rows[1].Font.Color:=clBlue;
Colum.Rows[1].Font.Size:=14;
Sheet:=XLApp.Workbooks[1].WorkSheets['Îò÷¸ò'];
Sheet.Cells[1,2]:='Ñïèñîê ñòóäåíòîâ';
Sheet.Cells[2,1]:='Ô.È.Î';
Sheet.Cells[2,2]:='Äàòà ðîæäåíèÿ';
Sheet.Cells[2,3]:='Àäðåñ';
Sheet.Cells[2,4]:='Ãðóïïà';
index:=3;
Form2.Table1.First;
for i:=0 to Form2.Table1.FieldCount-1 do
begin
Form2.Table1.Open;
Sheet.Cells[index,1]:=Form2.DBGrid1.Fields[1].AsString;
Sheet.cells[index,2]:=FormatDateTime('dddddd',
Form2.DBGrid1.Fields[2].AsDateTime);
Sheet.cells[index,3]:=Form2.DBGrid1.Fields[3].AsString;
Sheet.cells[index,4]:=Form2.DBGrid1.Fields[4].AsString;
Inc(index);
Form2.Table1.Next;
подскажите что сделать!

Последний раз редактировалось mihali4; 04.11.2009 в 12:47.
kuzmich вне форума Ответить с цитированием
Старый 04.11.2009, 12:50   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Form2.Table1.First;
for i:=0 to Form2.Table1.FieldCount-1 do
begin
Form2.Table1.Open;
Убийственный ход мысли...
Тем не менее - по шагам пробовали?
mihali4 вне форума Ответить с цитированием
Старый 04.11.2009, 13:39   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

насчёт того в какую колонку надо - тут телепатов нет!
в то, что одна запись идёт, (причём первая) то всё так и есть!
Вы код сами писали? или где-то взяли?
что ж Вы таблицу в цикле открываете?!?!
и нужно цикл добавить.
попробуйте так:
Код:
Form2.Table1.Open;
Form2.Table1.First;
while not Form2.Table1.EOF do begin
    Sheet.Cells[index,1]:=Form2.DBGrid1.Fields[1].AsString;
    Sheet.cells[index,2]:=FormatDateTime('dddddd',
                                       Form2.DBGrid1.Fields[2].AsDateTime);
    Sheet.cells[index,3]:=Form2.DBGrid1.Fields[3].AsString;
    Sheet.cells[index,4]:=Form2.DBGrid1.Fields[4].AsString;
    Inc(index);
    Form2.Table1.Next;
end;

Последний раз редактировалось Serge_Bliznykov; 04.11.2009 в 23:01. Причина: совершенно согласен с замечанием soleil@mmc и mihali4. проглядел, когда код копировал :(....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.11.2009, 14:20   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

есть мнение, что этот цикл
Код:
 for i:=0 to Form2.Table1.FieldCount-1 do
здесь точно лишний

либо цикл оставляем, но внутри этого цикла пишем по-другому
soleil@mmc вне форума Ответить с цитированием
Старый 04.11.2009, 22:38   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
есть мнение...
Неужто в ЦК КПСС довелось поработать? Любимая фраза "дорогого" Леонида Ильича...
Но... согласен. Переменная цикла нигде не используется.
К полям идет прямая адресация по их номеру.
Так что эту строку можно смело убрать.

Последний раз редактировалось mihali4; 04.11.2009 в 22:43.
mihali4 вне форума Ответить с цитированием
Старый 05.11.2009, 16:38   #6
kuzmich
Форумчанин
 
Аватар для kuzmich
 
Регистрация: 05.05.2007
Сообщений: 236
По умолчанию

я справил ошибку, но у меня как добовлялось дату в первый столбец, а в столбец где должно быть дата рождение у меня пытаеться засунуть адрес и выдоет ошибку. что делать?
kuzmich вне форума Ответить с цитированием
Старый 05.11.2009, 16:43   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Нумерация Fields происходит с нуля, а не с единицы! Это - раз.
Второе. Кто вас научил такому - брать данные из ячеек DBGrid!?
Данные следует брать из того датасета, данные из которого отображаются в DBGrid...
Можно и так:
Код:
Sheet.Cells[index,1]:=Form2.DBGrid1.DataSource.DataSet.Fields[0].AsString

Последний раз редактировалось mihali4; 05.11.2009 в 16:53.
mihali4 вне форума Ответить с цитированием
Старый 11.11.2009, 08:41   #8
kuzmich
Форумчанин
 
Аватар для kuzmich
 
Регистрация: 05.05.2007
Сообщений: 236
Вопрос

я исправил ошибку.

Код:
  for i:=0 to Query1.RecordCount-1 do
   begin
  Sheet.Cells[index,1]:=DBGrid1.DataSource.DataSet.Fields[0].AsString;
  Sheet.cells[index,2]:=FormatDateTime('dddddd',
  DBGrid1.DataSource.DataSet.Fields[1].AsDateTime);
  Sheet.cells[index,3]:=DBGrid1.DataSource.DataSet.Fields[2].AsString;
  Sheet.cells[index,4]:=DBGrid1.DataSource.DataSet.Fields[3].AsString;
  Inc(index);
когда делаю экспорт в Excel то он выводит только одну записесь. т.е. - я имею виду что у меня 4 записи в БД, а в Excel он выводит 4 одинаковых записи. что делать?!
kuzmich вне форума Ответить с цитированием
Старый 11.11.2009, 09:48   #9
ProScor
 
Регистрация: 06.10.2009
Сообщений: 5
По умолчанию

Цитата:
меня 4 записи в БД, а в Excel он выводит 4 одинаковых записи
Добавьте в цикл преход на следующую запись
Код:
Query1.Next
ProScor вне форума Ответить с цитированием
Старый 11.11.2009, 09:55   #10
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

вместо этого
Код:
 for i:=0 to Query1.RecordCount-1 do
begin
...
end;
напиши лучше это и не забудь в конце добавить выделенное красным
Код:
while not(Query1.EOF) do
begin
  ....
  Query1.Next;
end;
soleil@mmc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт в Excel Hobbit_88 БД в Delphi 5 24.04.2009 10:15
экспорт из Excel в БД Tanuska___:) БД в Delphi 7 27.08.2008 15:31
Экспорт из Access в Excel, Экспорт из отчётов в таблицу Excel Kissedbythegod Microsoft Office Access 1 31.05.2008 22:15
Экспорт из Excel Nemo333 БД в Delphi 3 04.04.2007 15:53
Экспорт из Delphi в Excel micaell Общие вопросы Delphi 0 14.12.2006 01:24