|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Ошибка при выброски в Excel
Доброго времени суток!
у меня возникла проблема вот код Код:
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. |