Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
ВнизНужно сохранить данные из DBGrida в файл. Найти похожие ветки
← →
WFS © (2007-07-24 20:58) [0]Скажите пожалуйста, как сохранить данные из DBGrida в файл. Просто вручную все столбцы и строки перебирать очень неудобно. Есть ли че нить такое типа DBgrid1.Savetofile. Или может можно в эксель перегнать?
← →
{RASkov} © (2007-07-24 21:01) [1]> [0] WFS © (24.07.07 20:58)
В ДБГриде нет данных, или другими словами эти данные уже и так сохранены в файле...
См DataSet.
← →
WFS © (2007-07-24 21:09) [2]А можно чуть поконкретнее, какую процедуру датасета нужно использовать?
← →
{RASkov} © (2007-07-24 21:15) [3]> [2] WFS © (24.07.07 21:09)
никакую... нужно почитать, что есть датасет и что есть дбгрид.... и что есть "ихи" данные....
← →
MsGuns © (2007-07-24 21:17) [4]Один из вариантов:
uses ComObj, Excel2000, OleServer,
var
XLExp_Report: TExcelApplication;
XLExp_WorkBook: Excel2000.ExcelWorkBook;
XLExp_Sheet: Excel2000.ExcelWorkSheet;
procedure XLExp_OpenReport(TemplateName: OleVariant);
// Процедура создает в первый раз Excel-приложение, а если оно уже существует,
// то коннектится к нему, определяя опции коннекта и создавая объекты "Книга"
// и "Лист". Имя книги задается параметром TemplateName
begin
if not Assigned(XLExp_Report) then
XLExp_Report:=TExcelApplication.Create(nil);
XLExp_Report.ConnectKind:=ckRunningOrNew;
XLExp_Report.Connect;
try
// если офис 2003, ХР
XLExp_WorkBook :=XLExp_Report.Workbooks.Add("",0);
except
try
// если офис 2000
XLExp_WorkBook :=XLExp_Report.Workbooks.Add("Книга1",0);
except
//try
// если Офис 97
//XLExp_WorkBook :=XLExp_Report.Workbooks.Add(xlWBatWorkSheet,0);
//except
//end;
end;
end;
XLExp_Sheet:=XLExp_Workbook.Worksheets.Item[1] as Excel2000.ExcelWorkSheet;
end;
procedure XLExp_DataSetExport(Range: OleVariant; DataSet: TDataSet);
// Експорт данных из датасета в Excel-лист
// Область листа (Range) задается параметром Range
// Range задает область листа (непрерывная последовательность ячеек листа)
// начиная с которой будет итти заполнение из НД. При этом самой левой колонкой
// может любая колонка листа, а строкой - любая строка листа.
// Ячейки этой "линии" колонок должны содержать имена полей НД, данные которых
// будут помещаться в эти колонки
var
RangeLen,Column,Row,lich,i,x: integer;
ValueArray: OleVariant;
Str: string;
FieldArray: array [0..30] of string;
bm: TBookmark;
begin
// Строка начала района
Row:=XLExp_Sheet.Range[Range,EmptyParam].Row;
// Колонка начала района (левая крайняя)
Column:=XLExp_Sheet.Range[Range,EmptyParam].Column;
// Колонка конца района (правая крайняя)
RangeLen:=Column+(XLExp_Sheet.Range[Range,EmptyParam].Columns.Count-1);
// Переписать в массив FieldArray содержимое ячеек 1-й строки указанной области
// листа Excel (имена полей датасета).
// Предполагается, что их не должно быть более 21
x := 0;
for i := Column to RangeLen do
begin
Str := XLExp_Sheet.Cells.Item[Row,i].Formula; // Содержимое ячейки
Delete(Str,1,1); // Обрезаем первый (служебный) символ
FieldArray[x] := Str;
x := x+1;
end;
// Создать дин.массив размерностью RxC, где R - кол-во строк датасета,
// а C - кол-во колонок, заданное Range
ValueArray := VarArrayCreate([0,DataSet.RecordCount-1,0,XLExp_Sheet.Range[Range,EmptyParam].Columns.Count],varVariant);
lich := 0; // Индекс строки НД
// Подготовка датасета к сканированию
with DataSet do
begin
bm := GetBookmark; // Запомнить текущую запись
DisableControls;
First;
while not Eof do
begin
for i := 0 to XLExp_Sheet.Range[Range,EmptyParam].Columns.Count do
// Для каждой колонки Region определяется имя поля НД и значение
// этого поля записывается в дин.массив по адресу=индексу колонки
begin
if (FieldArray[i]<>"") then // Колонка имеет ссылку на имя поля ?
ValueArray[lich,i] := FieldByName(FieldArray[i]).AsString
else
ValueArray[lich,i] := "";
end;
lich := lich+1;
Next;
end;
EnableControls;
GotoBookmark(bm); // Вернуться в исходную (до сканирования) запись
FreeBookmark(bm);
end;
{ Выражение :
xlSheet.Range[Col[Column]+IntToStr(Row),Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)]
представляет "экселовскую" адресацию типа "A10","H17", где буква - индекс колонки, а
число-индекс строки на листе Excel.
В нативном виде (в самом Excel`е) этот регион будет = "A10:H17"
}
// Перегнать в лист Excel (Ragion) значения из массива ValueArray
XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Value := ValueArray;
// Присвоить всем ячейкам региона Region цвет символов как у левой верхней ячейки
XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Font.Color := XLExp_Sheet.Range[Range,EmptyParam].Font.Color;
// Присвоить всем ячейкам региона Region цвет как у левой верхней ячейки
XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Interior.Color := XLExp_Sheet.Range[Range,EmptyParam].Interior.Color;
// Присвоить всем ячейкам региона Region рамки как у левой верхней ячейки
XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Borders.LineStyle := XLExp_Sheet.Range[Range,EmptyParam].Borders.LineStyle;
end;
← →
WFS © (2007-07-24 21:22) [5]О,господи, как все сложно в этой жизни...
Подскажите, как сгенерировать тогда нажатие клавиши printscreen?:)
← →
MsGuns © (2007-07-24 21:24) [6]Эта "сложность" от универсальности. Приведенный код выводит в Эксел данные ЛЮБОГО датасета. Если положить эту процедуру в библиотеку, то впоследствии организовать печать любого "грида" - дело 5 секунд
← →
WFS © (2007-07-24 21:32) [7]Боюсь у меня нет времени разбираться с этим.
Мне хотя бы как нибудь надо сделать до завтра и уволиться наконец с работы:)
← →
MsGuns © (2007-07-24 21:34) [8]>WFS © (24.07.07 21:32) [7]
>Боюсь у меня нет времени разбираться с этим.
Мне хотя бы как нибудь надо сделать до завтра и уволиться наконец с работы:)
Тогда тебе к Игорю Шевченко
← →
WFS © (2007-07-24 21:36) [9]А кто это такой?
Да кстати, как сэмулировать принтскрин?
← →
Anatoly Podgoretsky © (2007-07-24 21:51) [10]
> надо сделать до завтра и уволиться наконец с работы:)
Разумно!
← →
WFS © (2007-07-24 22:08) [11]я узнал код клавиши принтскрин. Это 39!
Теперь просто ответьте, как сэмулировать нажатие клавиши.
че нить типа keypress?
← →
MsGuns © (2007-07-24 22:46) [12]Видишь ли, "эмуляция" - это нам в наследство от дедовского ДОС осталось, а в винде есть сообщения, которыми обмениваются приложения с ОС.
Попробуй почитать что-нибудь о них, например о PostMessage/SendMessage.
Напоследок, перед тем, как навсегда расстаться с программированием ;)
← →
Anatoly Podgoretsky © (2007-07-24 22:49) [13]> MsGuns (24.07.2007 22:46:12) [12]
Времени мало осталось, но может успеет?
← →
WFS © (2007-07-24 22:56) [14]Ну навсегда я с ним не расстанусь. Но буду заниматься немного другими вещами.
Кстати, я ухожу, если кто хочет, может пойти вместо меня. В основном необходимо заниматься всякого рода тупых, но сложных программ, как например та, которую я сейчас делаю: контроль и учет деталей, находящихся на складе.
← →
WFS © (2007-07-24 22:56) [15]*заниматься разработкой (опечатка)
← →
MsGuns © (2007-07-24 23:32) [16]>WFS © (24.07.07 22:56) [14]
>Кстати, я ухожу, если кто хочет, может пойти вместо меня
Мизантроп ?
← →
WFS © (2007-07-24 23:38) [17]MsGuns, я не понял, к чему ты написал это слово:)
← →
MsGuns © (2007-07-24 23:46) [18]Нужно быть мизантропом (другими словам - человеконенавистником), чтобы рекомендовать другим место, которое столь сильно деквалифицирует специалиста ;)
← →
WFS © (2007-07-24 23:57) [19]Не, ты зря.
Место неплохое, можно работать дома.
Программы, которые требуется писать, сложные, но построены их простых элементов. То есть все, здесь собравшиеся, вполне смогут там работать.
Я по специальности не программер, а лазерщик, и считаю, что за год работы я узнал много нового.
← →
WFS © (2007-07-24 23:59) [20]Да, кстати, всем спасибо. Сделал я следующим образом: Сохранил вначале дбгрид в мемо, а затем в файл:))
← →
MsGuns © (2007-07-25 00:03) [21]>WFS © (24.07.07 23:59) [20]
>Да, кстати, всем спасибо. Сделал я следующим образом: Сохранил вначале дбгрид в мемо, а затем в файл:))
!?
Настоятельно рекомендую непосредственно перед увольнением снести со всех компов твоей контроы все твои программы. Все до единой.
Иначе прокляты будут и ты, и потомки твои до седьмого колена ;)))
← →
Loginov Dmitry © (2007-07-25 13:08) [22]TClientDataSet(DBGrid1.DataSource.DataSet).SaveToFile(FileName);
Не запускать это раньше времени :-D
← →
stanislav © (2007-07-25 13:16) [23]WFS © (24.07.07 23:59) [20]
Вот теперь точно никто не придет на твое место...
← →
Virgo_Style © (2007-07-25 13:24) [24]stanislav © (25.07.07 13:16) [23]
Если там разделители приличные, то еще есть шанс)
← →
WFS © (2007-07-25 19:01) [25]не понял, в чем прикол?
← →
MsGuns © (2007-07-25 21:18) [26]>WFS © (25.07.07 19:01) [25]
>не понял, в чем прикол?
Ну, если доступно..
Вот есть картина, художественная. Например, "Сикстинкая мадонна".
Требуется ее перевезти.
Так вот, ее взяли и порезали на мелкие кусочки, со спичечную этикету азером. И упаковали затем в спичечные коробки...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.041 c