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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2015, 23:53   #1
Kate12
 
Регистрация: 07.05.2015
Сообщений: 6
По умолчанию Ошибка при выводе БД в Excel

Добрый вечер, подскажите, пожалуйста, при выводе БД Delphi в Excel, выходит ошибка, "Член группы не найден". Excel открывается, но пустой документ. Вот сам код:

Код:
procedure TForm14.Excel1Click(Sender: TObject);

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.Colums[1].ColumWidth:=20;
Colum.Colums[2].ColumWidth:=20;
Colum.Colums[3].ColumWidth:=20;
Colum.Colums[4].ColumWidth:=20;
Colum.Colums[5].ColumWidth:=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]:='Бланк 1 БД';
Sheet.Cells[2,1]:='ФИО';
Sheet.Cells[2,2]:='ДатаРождения';
Sheet.Cells[2,3]:='ДатаОсмотра';
Sheet.Cells[2,4]:='Заключение';

index:=3;
DataModule1.BookTable2.First;
for i:=0 to DataModule1.BookTable2.RecordCount-1 do
 begin
Sheet.Cells[index,1]:=DataModule1.BookTable2.Fields.Fields[1].AsString;
Sheet.Cells[index,2]:=DataModule1.BookTable2. Fields.Fields[2].AsString;
Sheet.Cells[index,3]:=DataModule1.BookTable2. Fields.Fields [3].AsString;
Sheet.Cells [index,4]:=DataModule1.BookTable2.Fields. Fields [5] .AsString;
Sheet.Cells [index,5]:=FormatDateTime( 'dddddd',
DataModule1.BookTable2.Fields.Fields [6].AsDateTime);
Inc(index);
DataModule1.BookTable2.Next;
 end;
end;
end.

Последний раз редактировалось Аватар; 14.05.2015 в 00:19.
Kate12 вне форума Ответить с цитированием
Старый 14.05.2015, 06:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

На какой строке ошибка? Пройди пошаговку.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2015, 11:39   #3
Kate12
 
Регистрация: 07.05.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
На какой строке ошибка? Пройди пошаговку.
В коде ошибок нет. Ошибка выходит когда уже происходит открытие Excel. Excel открывается, но документ пустой
Kate12 вне форума Ответить с цитированием
Старый 14.05.2015, 12:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я в коде криминала не вижу, только вот цикл твой малость смущает. Я обычно привык использовать while для прохода по набору. Ты трассировку делала? Может у тебя RecordCount дает 0 изначально?
Или в Экзеле даже шапки отчета не видно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2015, 12:46   #5
Kate12
 
Регистрация: 07.05.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я в коде криминала не вижу, только вот цикл твой малость смущает. Я обычно привык использовать while для прохода по набору. Ты трассировку делала? Может у тебя RecordCount дает 0 изначально?
Или в Экзеле даже шапки отчета не видно?
Нет, ничего нет. Просто пустой лист Excel.
Код брала из учебника Флеонов "Библия Делфи". Может что то с модулями uses не так?

Код:
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.Grids, Vcl.DBGrids,
  Vcl.Menus, Data.Win.ADODB, ComObj;
А еще я изменила код. Теперь у меня шапку выводит.

Код:
procedure TForm14.Excel1Click(Sender: TObject);

var
XLApp, Sheet, Colum:Variant;
index,i:Integer;
begin
 XLApp:= CreateOleObject('Excel.Application');
 XLApp.Visible:=true;

XLApp:= CreateOleObject('Excel.Application');
XLApp.Visible:=true;
XLApp.WorkBooks.Add;
XLApp.ActiveSheet.Name:='ddd';
XLApp.Cells(1,2):='Бланк 1 БД';
XLApp.Cells(2,1):='ФИО';
XLApp.Cells(2,2):='ДатаРождения';
XLApp.Cells(2,3):='ДатаОсмотра';
XLApp.Cells(2,4):='Заключение';
//XLApp.Application.Quit;
      {
 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.Columns[5].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 ('Отчет');
XLApp.Cells.Cells[1,2]:='Бланк 1 БД';
XLApp.Cells.Cells[2,1]:='ФИО';
XLApp.Cells.Cells[2,2]:='ДатаРождения';
XLApp.Cells.Cells[2,3]:='ДатаОсмотра';
XLApp.Cells.Cells[2,4]:='Заключение';

index:=3;
DataModule1.BookTable2.First;
for i:=0 to DataModule1.BookTable2.RecordCount-1 do
 begin
Sheet.Cells[index,1]:=DataModule1.BookTable2.Fields.Fields[1].AsString;
Sheet.Cells[index,2]:=DataModule1.BookTable2. Fields.Fields[2].AsString;
Sheet.Cells[index,3]:=DataModule1.BookTable2. Fields.Fields [3].AsString;
Sheet.Cells [index,4]:=DataModule1.BookTable2.Fields. Fields [5] .AsString;
Sheet.Cells [index,5]:=FormatDateTime( 'dddddd',
DataModule1.BookTable2.Fields.Fields [6].AsDateTime);
Inc(index);
DataModule1.BookTable2.Next;
 end;}
end;


end.

Последний раз редактировалось Kate12; 14.05.2015 в 12:51.
Kate12 вне форума Ответить с цитированием
Старый 14.05.2015, 12:56   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да не... Вроде все правильно...
Я бы на твоем месте трассировку сделал. Проверил что принимают переменные. Может к примеру Worksheets ('Отчет') возвращает не то что нужно, а может еще что.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2015, 13:06   #7
Kate12
 
Регистрация: 07.05.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Да не... Вроде все правильно...
Я бы на твоем месте трассировку сделал. Проверил что принимают переменные. Может к примеру Worksheets ('Отчет') возвращает не то что нужно, а может еще что.
Вот какие сообщения выводит компилятор

Код:
Checking project dependencies...
Compiling Project1.dproj (Debug, Win32)
dcc command line for "Project1.dpr"
  c:\program files (x86)\embarcadero\studio\16.0\bin\dcc32.exe -$O- -$W+ --no-config -M -Q -TX.exe -AGenerics.Collections=System.Generics.Collections;
  Generics.Defaults=System.Generics.Defaults;WinTypes=Winapi.Windows;WinProcs=Winapi.Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE -DDEBUG 
  -E.\Win32\Debug -I"c:\program files (x86)\embarcadero\studio\16.0\lib\Win32\debug";"c:\program files (x86)\embarcadero\studio\16.0\lib\Win32\release";
  C:\Users\User\Documents\Embarcadero\Studio\16.0\Imports;"c:\program files (x86)\embarcadero\studio\16.0\Imports";
  C:\Users\Public\Documents\Embarcadero\Studio\16.0\Dcp;"c:\program files (x86)\embarcadero\studio\16.0\include";"C:\Program Files 
  (x86)\FastReports\LibD22";"C:\Program Files (x86)\Raize\CS5\Lib\RS-XE8\Win32" -LEC:\Users\Public\Documents\Embarcadero\Studio\16.0\Bpl 
  -LNC:\Users\Public\Documents\Embarcadero\Studio\16.0\Dcp -NU.\Win32\Debug -NSWinapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;
  System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell; -O"c:\program files 
  (x86)\embarcadero\studio\16.0\lib\Win32\release";C:\Users\User\Documents\Embarcadero\Studio\16.0\Imports;"c:\program files 
  (x86)\embarcadero\studio\16.0\Imports";C:\Users\Public\Documents\Embarcadero\Studio\16.0\Dcp;"c:\program files (x86)\embarcadero\studio\16.0\include";
  "C:\Program Files (x86)\FastReports\LibD22";"C:\Program Files (x86)\Raize\CS5\Lib\RS-XE8\Win32" -R"c:\program files 
  (x86)\embarcadero\studio\16.0\lib\Win32\release";C:\Users\User\Documents\Embarcadero\Studio\16.0\Imports;"c:\program files 
  (x86)\embarcadero\studio\16.0\Imports";C:\Users\Public\Documents\Embarcadero\Studio\16.0\Dcp;"c:\program files (x86)\embarcadero\studio\16.0\include";
  "C:\Program Files (x86)\FastReports\LibD22";"C:\Program Files (x86)\Raize\CS5\Lib\RS-XE8\Win32" -U"c:\program files 
  (x86)\embarcadero\studio\16.0\lib\Win32\debug";"c:\program files (x86)\embarcadero\studio\16.0\lib\Win32\release";
  C:\Users\User\Documents\Embarcadero\Studio\16.0\Imports;"c:\program files (x86)\embarcadero\studio\16.0\Imports";
  C:\Users\Public\Documents\Embarcadero\Studio\16.0\Dcp;"c:\program files (x86)\embarcadero\studio\16.0\include";"C:\Program Files 
  (x86)\FastReports\LibD22";"C:\Program Files (x86)\Raize\CS5\Lib\RS-XE8\Win32" -V -VN -NBC:\Users\Public\Documents\Embarcadero\Studio\16.0\Dcp 
  -NHC:\Users\Public\Documents\Embarcadero\Studio\16.0\hpp\Win32 -NO.\Win32\Debug   Project1.dpr   
[dcc32 Hint] Unit14.pas(41): H2164 Variable 'Sheet' is declared but never used in 'TForm14.Excel1Click'
[dcc32 Hint] Unit14.pas(41): H2164 Variable 'Colum' is declared but never used in 'TForm14.Excel1Click'
[dcc32 Hint] Unit14.pas(42): H2164 Variable 'index' is declared but never used in 'TForm14.Excel1Click'
[dcc32 Hint] Unit14.pas(42): H2164 Variable 'i' is declared but never used in 'TForm14.Excel1Click'
Success
Elapsed time: 00:00:02.0
Kate12 вне форума Ответить с цитированием
Старый 14.05.2015, 14:12   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В сообщениях об ошибках не говорится.
Еще раз предлагаю: Пройди трассировкой код и проверь какие переменные что получают. Трассировать умеешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2015, 14:43   #9
Kate12
 
Регистрация: 07.05.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В сообщениях об ошибках не говорится.
Еще раз предлагаю: Пройди трассировкой код и проверь какие переменные что получают. Трассировать умеешь?
Нет
Kate12 вне форума Ответить с цитированием
Старый 14.05.2015, 14:51   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Придется научиться.
1) становишься курсором на первую строку кода (XLApp:= CreateOleObject('Excel.Application' )
2) Жмешь F5 - слева появляется красная точка.
3) Жмешь F8 - программа проходится по строкам
4) Мышку наводишь на переменные и читаешь что пишется в подсказке.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при выводе Pasha_Sh Общие вопросы Delphi 7 27.03.2015 19:52
Ошибка при выводе отчета в Excel Valik93 C++ Builder 2 24.04.2013 12:36
Ошибка при выводе xml DKENT Работа с сетью в Delphi 0 08.02.2011 21:49
Ошибка при выводе trad Общие вопросы C/C++ 7 15.01.2011 11:32
Ошибка при выводе инфо из БД Xeon332 PHP 4 30.12.2009 05:41