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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2009, 14:24   #1
GhostBZ
Пользователь
 
Регистрация: 27.08.2009
Сообщений: 56
По умолчанию проблемы экспорта данных из DBGrid в Excel

Проблема вот в чем при отображении данных в DBGrid-е я использовал ADOTable и экспорт данных проходил на ура!
Но потом мне понадобилось использовать ADOQuery для отображение данных в DBGrid-е и после нажатие кнопки "экспорт" Выводит ошибку.

procedure TForm3.Button6Click(Sender: TObject);
var
i,j,z,index,col,row: Integer;
sline:string;
ExcelApp,sheet,Colum: Variant;
begin
ExcelApp := CreateOleObject('Excel.Application' );
ExcelApp.Visible := False;
ExcelApp.WorkBooks.open('c:\b2.xls' );

ExcelApp.WorkBooks[1].WorkSheets[1].name := 'TCP';
sheet:=ExcelApp.WorkBooks[1].WorkSheets['TCP'].Columns;

index:=13;
DBGrid1.DataSource.DataSet.First;

for i:=1 to DBGrid1.DataSource.DataSet.RecordCo unt
do
begin
for j:=1 to 13//DBGrid1.FieldCount-1
do
sheet.cells[index,j]:=DBGrid1.fields[j].asstring;
inc(index);
inc(z);
DBGrid1.DataSource.DataSet.Next;
end;

ExcelApp.Visible := true;
end;
GhostBZ вне форума Ответить с цитированием
Старый 28.08.2009, 14:25   #2
GhostBZ
Пользователь
 
Регистрация: 27.08.2009
Сообщений: 56
По умолчанию

Вообщем как решить данную проблему
GhostBZ вне форума Ответить с цитированием
Старый 28.08.2009, 14:31   #3
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

1) обрати внимание - тег CODE
2) чота у тебя тут путаница
я бы переписал так
Код:
DBGrid1.DataSource.DataSet.First;
i:=1;

while not(DBGrid1.DataSource.DataSet.EOF) do
begin
  for j:=1 to 13 do
    sheet.cells[i,j]:=DBGrid1.fields[j].AsString;
  inc(i);
  DBGrid1.DataSource.DataSet.Next;
end;
soleil@mmc вне форума Ответить с цитированием
Старый 28.08.2009, 14:39   #4
GhostBZ
Пользователь
 
Регистрация: 27.08.2009
Сообщений: 56
По умолчанию

Он ругается так же на строчку
sheet.cells[i,j]:=DBGrid1.fields[j].AsString;
может функция cells для ADOQuery не подхидит?!
GhostBZ вне форума Ответить с цитированием
Старый 28.08.2009, 14:44   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Он ругается так же на строчку
А чем ругается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2009, 14:52   #6
GhostBZ
Пользователь
 
Регистрация: 27.08.2009
Сообщений: 56
По умолчанию

Вот ошибка:
Project.exe raised exception class EAccessViolation with message' Access violation at address 0051bc03 in module 'Project.exe'. Read of address 0000000'. Process stoped ...
GhostBZ вне форума Ответить с цитированием
Старый 28.08.2009, 15:16   #7
GhostBZ
Пользователь
 
Регистрация: 27.08.2009
Сообщений: 56
По умолчанию

может есть схожая функция похожая на cells только для ADOQuery
GhostBZ вне форума Ответить с цитированием
Старый 28.08.2009, 15:21   #8
GhostBZ
Пользователь
 
Регистрация: 27.08.2009
Сообщений: 56
По умолчанию

Или может подскажите другой способ передачи данных из DBGrid-a в Excel
GhostBZ вне форума Ответить с цитированием
Старый 28.08.2009, 16:04   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Значит нужно проверки ставить:
Код:
DBGrid1.DataSource.DataSet.First;
i:=1;
 if VarIsClear(sheet) then begin
 ShowMessage('А не получили мы страничку, нету ее'); exit;
end;

while not(DBGrid1.DataSource.DataSet.EOF) do
begin
  for j:=1 to 13 do
    sheet.cells[i,j]:=DBGrid1.fields[j].AsString;
  inc(i);
  DBGrid1.DataSource.DataSet.Next;
end;
Ну и выяснить где ты чего недополучил.

А может нет свойства .cells у sheet твоего...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2009, 17:00   #10
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

скорее даже так
Код:
DBGrid1.DataSource.DataSet.First;
i:=1;

while not(DBGrid1.DataSource.DataSet.EOF) do
begin
  for j:=1 to 13 do
    sheet.cells[i,j]:=DBGrid1.DataSource.DataSet.fields[j].AsString;
  inc(i);
  DBGrid1.DataSource.DataSet.Next;
end;
ну и погоняй в дебаг-режиме
soleil@mmc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DBGrid->EXCEL Neba БД в Delphi 7 03.11.2010 05:23
Блок-схема экспорта в MS Excel lola8669 Общие вопросы Delphi 0 27.05.2009 13:23
перенос данных из DBGrid в DBGrid KingSize БД в Delphi 17 24.04.2009 09:30
StringGrid, Excel проблемы artemavd Общие вопросы Delphi 8 28.11.2008 19:37
Вставка данных(Excel) из clipboard в DBGrid mahsus Общие вопросы Delphi 1 07.10.2007 02:02