Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.01.2011, 14:49
Аватар для th_bav
th_bav th_bav вне форума
Новичок
 
Регистрация: 02.12.2010
Сообщения: 74
Репутация: 10
По умолчанию Экспорт данных в Excel

Добрый день.
У меня БД на Акцессе, в БД у меня 2 таблицы,
Код:
procedure TSQLEditor.Button4Click(Sender: TObject);
var
    XLApp:Variant;
    Sheet:Variant;
    Colum:Variant;
    index:Integer;
    i:Integer;
    k:Variant;

begin
 XLApp:= CreateOleObject('Excel.Application');
 XLApp.Visible:=true;						                //
 XLApp.Workbooks.Add(-4167);			    		        //  создание Excell
 XLApp.Workbooks[1].WorkSheets[1].Name:='Отчет';	                //


 Colum:=XLApp.Workbooks[1].WorkSheets['Отчет'].Columns;	//
 Colum.Columns[1].ColumnWidth:=15;			               	//
 Colum.Columns[2].ColumnWidth:=15;			               	//
 Colum.Columns[3].ColumnWidth:=8;                      	                //
 Colum.Columns[4].ColumnWidth:=8;		                 	//
 Colum.Columns[5].ColumnWidth:=10;		                	// Ширина колонок
 Colum.Columns[6].ColumnWidth:=15;		                	//
 Colum.Columns[7].ColumnWidth:=25;		                	//
 Colum.Columns[8].ColumnWidth:=25;		                	//
 Colum.Columns[9].ColumnWidth:=15;		                	//
 Colum.Columns[10].ColumnWidth:=15;                                    //

 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['Отчет'];
 
k:=(Edit1.Text);
 Sheet.Cells[1,2]:=k;

 if  CheckBox1.State = cbChecked  then	                                 //
 Sheet.Cells[2,1]:='Наименование';
 
if  CheckBox2.State = cbChecked  then		                         //
 Sheet.Cells[2,2]:='Марка';
 
if  CheckBox3.State = cbChecked  then		                        //
 Sheet.Cells[2,3]:='Сорт';

 if  CheckBox4.State = cbChecked  then                                  //
 Sheet.Cells[2,4]:='Вес';

 if  CheckBox5.State = cbChecked  then                                 //  Текст в ячейке
 Sheet.Cells[2,5]:='Цена';

 if  CheckBox6.State = cbChecked  then                                //
 Sheet.Cells[2,6]:='Количество';
 
if  CheckBox7.State = cbChecked  then                                //
 Sheet.Cells[2,7]:='Поставщик(Ассортимент';

 if  CheckBox8.State = cbChecked  then                               //
 Sheet.Cells[2,8]:='Поставщик(Поставщик)';

 if  CheckBox9.State = cbChecked  then	                            //
 Sheet.Cells[2,9]:='Телефон';
 
if  CheckBox10.State = cbChecked  then		                    //
 Sheet.Cells[2,10]:='Адрес';
 index:=3;
SQLEditor.ADOQuerySQLEditor.First;
for i:=0 to SQLEditor.ADOQuerySQLEditor.RecordCount-1 do

begin
  if  CheckBox1.State = cbChecked  then
      Sheet.Cells[index,1]:=SQLEditor.ADOQuerySQLEditor.Fields.Fields[0].AsString;	//

  if  CheckBox2.State = cbChecked  then
      Sheet.Cells[index,2]:=SQLEditor.ADOQuerySQLEditor.Fields.Fields[1].AsString;	//

  if  CheckBox3.State = cbChecked  then
      Sheet.Cells[index,3]:=SQLEditor.ADOQuerySQLEditor.Fields.Fields[2].AsString;	//

  if  CheckBox4.State = cbChecked  then
      Sheet.Cells[index,4]:=SQLEditor.ADOQuerySQLEditor.Fields.Fields[3].AsString;	//

  if  CheckBox5.State = cbChecked  then
      Sheet.Cells[index,5]:=SQLEditor.ADOQuerySQLEditor.Fields.Fields[4].AsString;	// Печать строк
  if  CheckBox6.State = cbChecked  then
      Sheet.Cells[index,6]:=SQLEditor.ADOQuerySQLEditor.Fields.Fields[5].AsString;	//

  if  CheckBox7.State = cbChecked  then
      Sheet.Cells[index,7]:=SQLEditor.ADOQuerySQLEditor.Fields.Fields[6].AsString;	//

  if  CheckBox8.State = cbChecked  then
      Sheet.Cells[index,8]:=SQLEditor.ADOQuerySQLEditor.Fields.Fields[7].AsString;	//

  if  CheckBox9.State = cbChecked  then
      Sheet.Cells[index,9]:=SQLEditor.ADOQuerySQLEditor.Fields.Fields[8].AsString;	//

  if  CheckBox10.State = cbChecked  then
      Sheet.Cells[index,10]:=SQLEditor.ADOQuerySQLEditor.Fields.Fields[9].AsString; //


Inc(index);											            //
SQLEditor.ADOQuerySQLEditor.Next;						            // Вроде константа
end;
end;
Прога работает нормально когда у меня запрос берется по умолчанию т.е. тот который я запрограммировал в ADOQuerySQLEditor при открытии формы
А когда я сам пишу запрос
SELECT марка FROM Assortment;
в поле Мемо1, то что в низу, то в DBGrid все отображается как надо, получается SQL запрос работает, а когда я пытаюсь в Excel это дело оформить, то пишется ошибка List index out of bounds(N) N - это номер по счету моей колонки которую я хочу в Excel перенести, попробовал деграббером или как его там, то ошибка вылазит на строке
Код:
Sheet.Cells[index,2]:=SQLEditor.ADOQuerySQLEditor.Fields.Fields[1].AsString;	
Как думаете, что я не дописал????
прикрепил вложения для полной ясности
Изображения
Тип файла: jpg 2222.JPG (35.6 Кбайт, 4 просмотров)

Последний раз редактировалось th_bav, 25.01.2011 в 14:54.
Ответить с цитированием
  #2  
Старый 25.01.2011, 14:59
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Правильно делает что ругается.
не смущает кол-во полей в запросе и в списке Field (в field начинается с 0)
Код:
SELECT марка FROM Assortment;
SQLEditor.ADOQuerySQLEditor.Fields.Fields[1].AsString;

т.е.
Код:
SQLEditor.ADOQuerySQLEditor.Fields.Fields[0].AsString;
отработает, в нем будет марка, а вот
Код:
SQLEditor.ADOQuerySQLEditor.Fields.Fields[1].AsString;
уже нет т.к. нет его по определению.
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #3  
Старый 25.01.2011, 16:30
Аватар для th_bav
th_bav th_bav вне форума
Новичок
 
Регистрация: 02.12.2010
Сообщения: 74
Репутация: 10
По умолчанию

Понял, спасибо, сам бы наверно долго бы думал, теперь новая проблема возникла, но это уже другая история
Ответить с цитированием
  #4  
Старый 25.01.2011, 20:29
Аватар для th_bav
th_bav th_bav вне форума
Новичок
 
Регистрация: 02.12.2010
Сообщения: 74
Репутация: 10
По умолчанию

Снова обращаюсь к Вам за помощью, помогите описать DBGrid, т.е. проблема с перенесение информации в Excel
Как мне считать названия колонок которые получились в DBGrid в результате SQL-запроса?

Последний раз редактировалось th_bav, 26.01.2011 в 07:07.
Ответить с цитированием
  #5  
Старый 26.01.2011, 09:49
Аватар для th_bav
th_bav th_bav вне форума
Новичок
 
Регистрация: 02.12.2010
Сообщения: 74
Репутация: 10
По умолчанию

Все нашел!!!
Код:
var
L:string;
begin
L:=DBGRid1.Columns[0].FieldName;
может кому и пригодиться
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter