Модераторы: Duncon , Naeel Maqsudov , Игорь Акопян , Хыиуду
vav1lon
Сообщения: 23 Зарегистрирован: 25 май 2007, 08:20
Откуда: Екатеринбург
Контактная информация:
28 май 2007, 14:49
скажите что не так и где поправть .. Плиззз...
Код: Выделить всё
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 в процессах и подвисагию программы....
Игорь Акопян
Сообщения: 1440 Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:
29 май 2007, 01:44
ещё одын совет: чтобы при пасте текста из буфера сохранить русские буквы надо делать копи в буфер при включенной русской раскладке
а что собственно говорит отладчик? на каком месте затыкается? может долго формирует?
vav1lon
Сообщения: 23 Зарегистрирован: 25 май 2007, 08:20
Откуда: Екатеринбург
Контактная информация:
29 май 2007, 07:07
Спасибо
буду знать
Для начала я Self прописал а он всеравно не пашет
А когда нажимаю заюзать он просто в системе открывает excel.exe и все программа подваисает немного истоит
попробую запустить но мне кажется я процедуру неправельно вызвал..
vav1lon
Сообщения: 23 Зарегистрирован: 25 май 2007, 08:20
Откуда: Екатеринбург
Контактная информация:
29 май 2007, 07:18
не что то тут не то так как когда он в подвисшем состоянии, а я в этот момент открываю Excel он показывает мне окно SaveDialog с именем того файла что в программе открыт когда нажимаю сохранить в програме ошибка вылетает
Could not convert variant of type (OleStr) into type (Boolean)
что может быть не так ?
Игорь Акопян
Сообщения: 1440 Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:
29 май 2007, 14:32
мдя...
" писал(а): ExportDBGrid(ExcelApplication1.GetSaveAsFilename(FName));
фигня-с...
Убери ты вообще запрос имени. Откроешь Эксел - там жмакнешь "Сохранить"
vav1lon
Сообщения: 23 Зарегистрирован: 25 май 2007, 08:20
Откуда: Екатеринбург
Контактная информация:
31 май 2007, 08:51
немогу допереть и найти нфы как правельно запустить эту процедуру
vav1lon
Сообщения: 23 Зарегистрирован: 25 май 2007, 08:20
Откуда: Екатеринбург
Контактная информация:
31 май 2007, 10:02
Вопрос такой:
после того как я загрузил все в DBGrid как мне сделать так чтобы проверить пустое поле или нет Null непрокатывает
Код: Выделить всё
IF (Form1.DBGrid2.Columns.Items[0] = [B]что тут писать[/B] ) then Form1.Label4.Caption := 'Ошибок нет'
else Form1.Label4.Caption := 'Ошибка в поле!';
Игорь Акопян
Сообщения: 1440 Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:
31 май 2007, 15:21
vav1lon , не в ту сторону копаешь
Проверять значение поля надо не через грид, а через Dataset...
типа
Код: Выделить всё
if Dataset.FieldByName('MyField').IsNull then
проверит поле на Null у текущей записи.
Если тебе надо проверить есть ли null'ы в таблице вообще - проще выполнить отдельный SQL-запрос
vav1lon
Сообщения: 23 Зарегистрирован: 25 май 2007, 08:20
Откуда: Екатеринбург
Контактная информация:
06 июн 2007, 07:29
спасибо ето помогло он проверяет но проверяет тока первую ячейку...
а как сделать чтобы весь столбец проверял?
Игорь Акопян
Сообщения: 1440 Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:
08 июн 2007, 00:03
vav1lon , огласи поточнее условие. Выдать все записи у которых в заданном столбце не Null?