![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Доброго времени суток!
у меня возникла проблема вот код Код:
procedure TForm1.Button2Click(Sender: TObject);
var
XL, XArr: Variant;
i:Integer;
j:Integer;
begin
XArr:=VarArrayCreate([1,ADOTable1.FieldCount],varVariant);
XL:=CreateOLEObject('Excel.Application'); // Nicaaiea OLE iauaeoa
XL.WorkBooks.add;
XL.visible:=False;
j := 1;
//выгрузка 1го выделеного
if RadioButton1.Checked then
begin
For i:=0 to ADOTable1.FieldCount-1 do
XArr[i+1] := ADOTable1.Fields.Value;
XL.Range['A'+IntToStr(j),
CHR(64+ADOTable1.FieldCount)+IntToStr(j)].Value := XArr;
end else
//Выгрузка всей БД
Begin
while not ADOTable1.Eof do
begin
i:=1;
while i<=ADOTable1.FieldCount do
begin
ADOTable1.First;
XArr := ADOTable1.Fields[i-1].Value;
i:= i+1;
XL.Selection.Font.Name:='Arial cur';
XL.Selection.Font.Size:=10;
XL.selection.Columns.AutoFit;
XL.Range['A1','A1'].select;
end;
end;
end;
XL.visible:=True;
end;
end. Значит когда RadioButton1 включин выгружается только выделеная строка таблици Это работает нормально все выгружается а когда выделение RadioButton1 снимаю то виснет и чекрез некоторое время дает ошибку ЛЮди пожалуйсто подскажите где код криво написано!!! БУду оченьблагодарин! |
|
#2
|
|||
|
|||
|
1.А разве во втором случае (not RadioButton1.Checked) Вы не должны обращать к ЭЛЕМЕНТАМ массива ?
Вот здесь : XArr := ADOTable1.Fields[i-1].Value; 2. У Вас "вроде, как" получается "вечный цикл" ... Код:
while not ADOTable1.Eof do
begin
...
while i<=ADOTable1.FieldCount do
begin
ADOTable1.First; <= вот здесь ...
...
end;
end;Не зависимо от функционала должно быть примерно так : Код:
ADOTable1.First;
while not ADOTable1.Eof do
begin
...
for i:=0 to (ADOTable1.FieldCount-1) do
begin
...
end;
ADOTable1.Next;
end; |
|
#3
|
|||
|
|||
|
дружище я не очень в БД
выложи пж исправленный код если тебе не тежело Заранее спс |
|
#4
|
||||
|
||||
|
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
XL, XArr: Variant;
i: Integer;
j: Integer;
begin
{подрубите ComObj}
XArr:=VarArrayCreate([1,TableDB.FieldCount],varVariant);
XL:=CreateOLEObject('Excel.Application');
XL.WorkBooks.add;
XL.visible:=true;
j := 1;
TableDB.First;
while not TableDB.Eof do
begin
i:=1;
while i<=TableDB.FieldCount do
begin
XArr[i] := TableDB.Fields[i-1].Value;
i := i+1;
end;
XL.Range['A'+IntToStr(j),
CHR(64+TableDB.FieldCount)+IntToStr(j)].Value := XArr;
TableDB.Next;
j:=j+1;
end;
XL.Range['A1',CHR(64+TableDB.FieldCount)+IntToStr(j)].select;
XL.cells.select;
XL.Selection.Font.Name:='Arial cur';
XL.Selection.Font.Size:=10;
XL.selection.Columns.AutoFit;
XL.Range['A1','A1'].select;
end;токо не пойму как импортировать всю таблицу, здесь импортирует только записи ![]() |
|
#5
|
|||
|
|||
|
да нет у меня все таблица выгружается
мне нада если отмечена RadioButton1 то выгружается вся таблица а если нет то только выделеная строка и все!!! |
|
#6
|
||||
|
||||
|
Сначала показалось, что у вас только пара ошибок, но при детальном изучении вашего кода понял, что его надо переписать полностью
![]() Вот так должно работать: Код:
procedure TForm1.Button2Click(Sender: TObject);
var
XL: Variant;
i: Integer;
begin
XL := CreateOLEObject('Excel.Application');
XL.WorkBooks.Add;
XL.Visible := False;
ADOTable1.First;
while not ADOTable1.Eof
do begin
for i := 1 to ADOTable1.FieldCount
do begin
XL.Selection.Font.Name := 'Arial';
XL.Selection.Font.Size := 10;
XL.Selection.Columns.AutoFit;
XL.Range[Chr(64+i)+IntToStr(ADOTable1.RecNo)] := ADOTable1.Fields[i-1].AsString;
end;
if RadioButton1.Checked then Break;
ADOTable1.Next;
end;
XL.Visible := True;
end;Экспорт через OLE довольно тормознутая вещь. Даже при относительно небольших объемах передаваемых данных у пользователя может возникнуть ощущение, что прога зависла. Поэтому не всегда полезно скрывать Эксел при экспорте. |
|
#7
|
||||
|
||||
|
Цитата:
Но с учетом новой концепции поправьте в моем примере строчку: Код:
if not RadioButton1.Checked then Break; Последний раз редактировалось Страдалецъ, 25.09.2009 в 11:15. |
|
#8
|
|||
|
|||
|
Цитата:
Спс огромное за код!!! все работает!! отлично!!! Благодарю!!! |
|
#9
|
|||
|
|||
|
Цитата:
Спс огромное за код!!! все работает!! отлично!!! Благодарю!!! |
|
#10
|
|||
|
|||
|
есть код выгружающий название столбцов из Grid
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
XL, XArr: Variant;
i:Integer;
j:Integer;
sline: string;
mem:TMemo;
col, row: Integer;
//создаем обьект Excel
begin
XArr:=VarArrayCreate([1,ADOTable1.FieldCount],varVariant);
XL:=CreateOLEObject('Excel.Application');
XL.WorkBooks.add;
xl.WorkBooks[1].WorkSheets[1].name := 'Отчёт';
XL.visible:=False;
j := 1;
begin
mem := TMemo.Create(Self);
mem.Visible := false;
mem.Parent := Form1;
mem.Clear;
sline := '';
sline :=(#9'БД студентов на '+DateToStr(date));
mem.Lines.Add(sline);
sline := '';
end;
for col := 0 to DBGrid1.FieldCount-1 do
if DBGrid1.Columns[col].Visible then
sline := sline + DBGrid1.Columns[col].Title.Caption + #9;
mem.Lines.Add(sline);
mem.Lines.Add('');
for row := 0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
mem.SelectAll;
mem.CopyToClipboard;
begin
XL.Visible := true;
xl.Workbooks[1].WorkSheets['Отчёт'].Paste;
end;
end;
и есть код выгружающий выделеную строку из DBGrid
procedure TForm1.Button2Click(Sender: TObject);
var
XL, XArr: Variant;
i:Integer;
j:Integer;
begin
XArr:=VarArrayCreate([1,ADOTable1.FieldCount],varVariant);
XL:=CreateOLEObject('Excel.Application'); // Nicaaiea OLE iauaeoa
XL.WorkBooks.add;
XL.visible:=False;
j := 1;
For i:=0 to ADOTable1.FieldCount-1 do
XArr[i+1] := ADOTable1.Fields.Value;
XL.Range['A'+IntToStr(j),
CHR(64+ADOTable1.FieldCount)+IntToStr(j)].Value := XArr;
XL.Range['A1',CHR(64+ADOTable1.FieldCount)+IntToStr(j)].select;
XL.Selection.Font.Name:='Arial cur';
XL.Selection.Font.Size:=10;
XL.selection.Columns.AutoFit;
XL.Range['A1','A1'].select;
XL.visible:=True;
end;
end. а как зделать чтоб выгружало название полей с даными ввыделеной строки ну как совместить эти 2 кода???? я просто не силен в БД может кто знает!!! Последний раз редактировалось Admin, 28.09.2009 в 17:51. |