Добрый день.
У меня БД на Акцессе, в БД у меня 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;
Как думаете, что я не дописал????
прикрепил вложения для полной ясности