Показать сообщение отдельно
  #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 просмотров)
Ответить с цитированием