Страница 2 из 3

Re: работа с Dbf

Добавлено: 28 май 2007, 14:49
vav1lon
скажите что не так и где поправть .. Плиззз... :confused: :(

Код: Выделить всё

procedure ExportDBGrid(toExcel: Boolean);
var
  bm: TBookmark;
  col, row: Integer;
  sline: string;
  mem: TMemo;
  ExcelApp: Variant;
  MainForm: Tmemo;
begin
  Screen.Cursor := crHourglass;
  Form1.DBGrid1.DataSource.DataSet.DisableControls;
  bm := Form1.DBGrid1.DataSource.DataSet.GetBookmark;
  Form1.DBGrid1.DataSource.DataSet.First;

  // ñîçäà¸ì îáúåêò Excel
  if toExcel then
  begin
    ExcelApp := CreateOleObject('Excel.Application');
    ExcelApp.WorkBooks.Add(xlWBatWorkSheet);
    ExcelApp.WorkBooks[1].WorkSheets[1].name := 'Grid Data';
  end;

  // Ñïåðâà îòïðàâëÿåì äàííûå â memo
  // ðàáîòàåò áûñòðåå, ÷åì îòïðàâëÿòü èõ íàïðÿìóþ â Excel
//  mem := TMemo.Create(Self);
  mem.Visible := false;
  mem.Parent := MainForm;
  mem.Clear;
  sline := '';

  // äîáàâëÿåì èíôîðìàöèþ äëÿ èì¸í êîëîíîê
  for col := 0 to Form1.DBGrid1.FieldCount-1 do
    sline := sline + Form1.DBGrid1.Fields[col].DisplayLabel + #9;
  mem.Lines.Add(sline);

  // ïîëó÷àåì äàííûå èç memo
  for row := 0 to Form1.DBGrid1.DataSource.DataSet.RecordCount-1 do
  begin
    sline := '';
    for col := 0 to Form1.DBGrid1.FieldCount-1 do
      sline := sline + Form1.DBGrid1.Fields[col].AsString + #9;
    mem.Lines.Add(sline);
    Form1.DBGrid1.DataSource.DataSet.Next;
  end;

  // êîïèðóåì äàííûå â clipboard
  mem.SelectAll;
  mem.CopyToClipboard;

  // åñëè íåîáõîäèìî, òî îòïðàâëÿåì èõ â Excel
  // åñëè íåò, òî îíè óæå â áóôåðå îáìåíà
  if toExcel then
  begin
    ExcelApp.Workbooks[1].WorkSheets['Grid Data'].Paste;
    ExcelApp.Visible := true;
  end;

  FreeAndNil(ExcelApp);
  Form1.DBGrid1.DataSource.DataSet.GotoBookmark(bm);
  Form1.DBGrid1.DataSource.DataSet.FreeBookmark(bm);
  Form1.DBGrid1.DataSource.DataSet.EnableControls;
  Screen.Cursor := crDefault;
end;

//***************************************************

procedure TForm1.BtoExcelBClick(Sender: TObject);

begin
SaveDialog1.FileName := FName;
if SaveDialog1.Execute then
 begin
  FName := SaveDialog1.FileName;
  ExportDBGrid(ExcelApplication1.GetSaveAsFilename(FName));
 end;
end;
Это приводит к открытию excel в процессах и подвисагию программы....

Re: работа с Dbf

Добавлено: 29 май 2007, 01:44
Игорь Акопян
ещё одын совет: чтобы при пасте текста из буфера сохранить русские буквы надо делать копи в буфер при включенной русской раскладке ;)

а что собственно говорит отладчик? на каком месте затыкается? может долго формирует?

Re: работа с Dbf

Добавлено: 29 май 2007, 07:07
vav1lon
Спасибо :) буду знать :)

Для начала я Self прописал а он всеравно не пашет :(
А когда нажимаю заюзать он просто в системе открывает excel.exe и все программа подваисает немного истоит :) попробую запустить но мне кажется я процедуру неправельно вызвал.. :(

Re: работа с Dbf

Добавлено: 29 май 2007, 07:18
vav1lon
не что то тут не то так как когда он в подвисшем состоянии, а я в этот момент открываю Excel он показывает мне окно SaveDialog с именем того файла что в программе открыт когда нажимаю сохранить в програме ошибка вылетает
Could not convert variant of type (OleStr) into type (Boolean)

что может быть не так ?

Re: работа с Dbf

Добавлено: 29 май 2007, 14:32
Игорь Акопян
мдя...
&quot писал(а):ExportDBGrid(ExcelApplication1.GetSaveAsFilename(FName));
фигня-с...
Убери ты вообще запрос имени. Откроешь Эксел - там жмакнешь "Сохранить"

Re: работа с Dbf

Добавлено: 31 май 2007, 08:51
vav1lon
немогу допереть и найти нфы как правельно запустить эту процедуру

Re: работа с Dbf

Добавлено: 31 май 2007, 10:02
vav1lon
Вопрос такой:
после того как я загрузил все в DBGrid как мне сделать так чтобы проверить пустое поле или нет Null непрокатывает ;)

Код: Выделить всё

IF (Form1.DBGrid2.Columns.Items[0] = [B]что тут писать[/B] ) then Form1.Label4.Caption := 'Ошибок нет'
 else Form1.Label4.Caption := 'Ошибка в поле!';

Re: работа с Dbf

Добавлено: 31 май 2007, 15:21
Игорь Акопян
vav1lon, не в ту сторону копаешь
Проверять значение поля надо не через грид, а через Dataset...
типа

Код: Выделить всё

if Dataset.FieldByName('MyField').IsNull then 
проверит поле на Null у текущей записи.
Если тебе надо проверить есть ли null'ы в таблице вообще - проще выполнить отдельный SQL-запрос

Re: работа с Dbf

Добавлено: 06 июн 2007, 07:29
vav1lon
спасибо ето помогло он проверяет но проверяет тока первую ячейку...
а как сделать чтобы весь столбец проверял?

Re: работа с Dbf

Добавлено: 08 июн 2007, 00:03
Игорь Акопян
vav1lon, огласи поточнее условие. Выдать все записи у которых в заданном столбце не Null?