Master-Detail ilişkili tablonun bozulmadan excell'e aktarımı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Master-Detail ilişkili tablonun bozulmadan excell'e aktarımı
Arkadaşlar merhaba;
Öncelikle herkesin geçmiş bayramını kutluyorum.
Bu konu ile ilgili formdaki tüm excell konularına baktım ama aradığım cevabı bulamadım. Sorunum şu master-deteil ilişkili bir tablom var bunlardaki kayıtları ilişkiyi bozmadan excell'e aktarmak istiyorum. Yapmak istediğim olay örnek vermek gerekirse...
01.11.2005
001 - ekmek - 1 Adet - 0,25 - 0,25
002 - süt - 2 Adet - 1,30 - 2,60
02.11.2005
001 - peynir - 100 GR - 2,50 - 2,50
gibi ...
bu yukarıdaki şekilde ben bunlar dbgrid'de gösteriyorum. Excell'de aktarmak istediğimde bu şekilde bir aktarım yöntemi uygulamak istiyorum ama bu kounda çok fazla bilgim olmadığı için siz değerli arkadaşlardan yardım almak istedim...
Konuyla ilgilenen herkese şimdiden çok teşekkür ederim...
Saygılarımla...
Öncelikle herkesin geçmiş bayramını kutluyorum.
Bu konu ile ilgili formdaki tüm excell konularına baktım ama aradığım cevabı bulamadım. Sorunum şu master-deteil ilişkili bir tablom var bunlardaki kayıtları ilişkiyi bozmadan excell'e aktarmak istiyorum. Yapmak istediğim olay örnek vermek gerekirse...
01.11.2005
001 - ekmek - 1 Adet - 0,25 - 0,25
002 - süt - 2 Adet - 1,30 - 2,60
02.11.2005
001 - peynir - 100 GR - 2,50 - 2,50
gibi ...
bu yukarıdaki şekilde ben bunlar dbgrid'de gösteriyorum. Excell'de aktarmak istediğimde bu şekilde bir aktarım yöntemi uygulamak istiyorum ama bu kounda çok fazla bilgim olmadığı için siz değerli arkadaşlardan yardım almak istedim...
Konuyla ilgilenen herkese şimdiden çok teşekkür ederim...
Saygılarımla...
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
sanırım cevap gelmediğine göre baya zor bişey bunu kodla yapmak..ama http://www.sqlmanager.net de EXLReport diye paralı bir komponent var belki free olanlarda vardır aynı işi yapan...süper bişey bence bir dene vaya demolarını incele..grouplandırma ,sum bile yapabiliyorsunn aslında başka bir projeye başlarsamm raporlama işlemlerinin tamamını bunda yapmayı düşünüyorum..kolay gelsin
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Hocam bu işi en kolay quantum gridle halledilir.
Bunun için 2 yol var
Birincisi : Bir sql ile master-detail tabloları joinle.
Sonra sqli çalıştırdığın nesneyi QuantumGride bağla. Ve Tarih alanının Columnuna tıkla ve groupindex ini 0 yap. Bu şekilde master detail bir görünüm elde etmiş olursun ve şu kodlarla Excele export et.
Bu arada Uses'a cxExportGrid4Link'i ekle
ikinci yol : İki tane level oluştur Cxgridde. Sonra üst levelin viewine master table'ı, alt levelin viewine detail table'ı bağla. Aralarında Relation kur. Şu an tam net ayrıntısını hatırlamıyorum Cx gridde relation kurmanın. Sitede bununla ilgili örnekler var "cxgrid master-detail" diye bir arattır.
Birinci yol için yazdığım kod bunun içinde geçerli.
Kolay gelsin...
Bunun için 2 yol var
Birincisi : Bir sql ile master-detail tabloları joinle.
Yukarıda şekilden şu şekile gelecek şekilde:01.11.2005
001 - ekmek - 1 Adet - 0,25 - 0,25
002 - süt - 2 Adet - 1,30 - 2,60
01.11.2005 - 001 - ekmek - 1 Adet - 0,25 - 0,25
01.11.2005- 002 - süt - 2 Adet - 1,30 - 2,60
Sonra sqli çalıştırdığın nesneyi QuantumGride bağla. Ve Tarih alanının Columnuna tıkla ve groupindex ini 0 yap. Bu şekilde master detail bir görünüm elde etmiş olursun ve şu kodlarla Excele export et.
Kod: Tümünü seç
ExportGrid4ToExcel('deneme', cxgrid, true, true, true, 'xls');
ikinci yol : İki tane level oluştur Cxgridde. Sonra üst levelin viewine master table'ı, alt levelin viewine detail table'ı bağla. Aralarında Relation kur. Şu an tam net ayrıntısını hatırlamıyorum Cx gridde relation kurmanın. Sitede bununla ilgili örnekler var "cxgrid master-detail" diye bir arattır.
Birinci yol için yazdığım kod bunun içinde geçerli.
Kolay gelsin...
slm.
hocam aşıdaki kodu bir unit olarak sakla ve uses na ekle
sonrasında DBGridToExcelADO procedurü aracılığı ile dbgrid den excel e aktarım yapabilirsin.
Not : Ole Object olmadığı için çalıştırılan makinede excel olmasa bile sorun çıkartmaz.
sonrasında DBGridToExcelADO procedurü aracılığı ile dbgrid den excel e aktarım yapabilirsin.
Not : Ole Object olmadığı için çalıştırılan makinede excel olmasa bile sorun çıkartmaz.
Kod: Tümünü seç
unit DBGridExportToExcel;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ComCtrls, DB, IniFiles, Buttons, dbgrids, ADOX_TLB, ADODB;
type TScrollEvents = class
BeforeScroll_Event: TDataSetNotifyEvent;
AfterScroll_Event: TDataSetNotifyEvent;
AutoCalcFields_Property: Boolean;
end;
procedure DisableDependencies(DataSet: TDataSet; var ScrollEvents: TScrollEvents);
procedure EnableDependencies(DataSet: TDataSet; ScrollEvents: TScrollEvents);
procedure DBGridToExcelADO(DBGrid: TDBGrid; FileName: string; SheetName: string);
implementation
//Support procedures: I made that in order to increase speed in
//the process of scanning large amounts
//of records in a dataset
//we make a call to the "DisableControls" procedure and then disable the "BeforeScroll" and
//"AfterScroll" events and the "AutoCalcFields" property.
procedure DisableDependencies(DataSet: TDataSet; var ScrollEvents: TScrollEvents);
begin
with DataSet do
begin
DisableControls;
ScrollEvents := TScrollEvents.Create();
with ScrollEvents do
begin
BeforeScroll_Event := BeforeScroll;
AfterScroll_Event := AfterScroll;
AutoCalcFields_Property := AutoCalcFields;
BeforeScroll := nil;
AfterScroll := nil;
AutoCalcFields := False;
end;
end;
end;
//we make a call to the "EnableControls" procedure and then restore
// the "BeforeScroll" and "AfterScroll" events and the "AutoCalcFields" property.
procedure EnableDependencies(DataSet: TDataSet; ScrollEvents: TScrollEvents);
begin
with DataSet do
begin
EnableControls;
with ScrollEvents do
begin
BeforeScroll := BeforeScroll_Event;
AfterScroll := AfterScroll_Event;
AutoCalcFields := AutoCalcFields_Property;
end;
end;
end;
//This is the procedure which make the work:
procedure DBGridToExcelADO(DBGrid: TDBGrid; FileName: string; SheetName: string);
var
cat: _Catalog;
tbl: _Table;
col: _Column;
i: integer;
ADOConnection: TADOConnection;
ADOQuery: TADOQuery;
ScrollEvents: TScrollEvents;
SavePlace: TBookmark;
begin
//
//WorkBook creation (database)
cat := CoCatalog.Create;
cat._Set_ActiveConnection('Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileName + ';Extended Properties=Excel 8.0');
//WorkSheet creation (table)
tbl := CoTable.Create;
tbl.Set_Name(SheetName);
//Columns creation (fields)
DBGrid.DataSource.DataSet.First;
with DBGrid.Columns do
begin
for i := 0 to Count - 1 do
if Items[i].Visible then
begin
col := nil;
col := CoColumn.Create;
with col do
begin
Set_Name(Items[i].Title.Caption);
Set_Type_(adVarWChar);
end;
//add column to table
tbl.Columns.Append(col, adVarWChar, 20);
end;
end;
//add table to database
cat.Tables.Append(tbl);
col := nil;
tbl := nil;
cat := nil;
//exporting
ADOConnection := TADOConnection.Create(nil);
ADOConnection.LoginPrompt := False;
ADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileName + ';Extended Properties=Excel 8.0';
ADOQuery := TADOQuery.Create(nil);
ADOQuery.Connection := ADOConnection;
ADOQuery.SQL.Text := 'Select * from [' + SheetName + '$]';
ADOQuery.Open;
DisableDependencies(DBGrid.DataSource.DataSet, ScrollEvents);
SavePlace := DBGrid.DataSource.DataSet.GetBookmark;
try
with DBGrid.DataSource.DataSet do
begin
First;
while not Eof do
begin
ADOQuery.Append;
with DBGrid.Columns do
begin
ADOQuery.Edit;
for i := 0 to Count - 1 do
if Items[i].Visible then
begin
ADOQuery.FieldByName(Items[i].Title.Caption).AsString := FieldByName(Items[i].FieldName).AsString;
end;
ADOQuery.Post;
end;
Next;
end;
end;
finally
DBGrid.DataSource.DataSet.GotoBookmark(SavePlace);
DBGrid.DataSource.DataSet.FreeBookmark(SavePlace);
EnableDependencies(DBGrid.DataSource.DataSet, ScrollEvents);
ADOQuery.Close;
ADOConnection.Close;
ADOQuery.Free;
ADOConnection.Free;
end;
end;
end.
Arkdaşlar öncelikle konu ile ilgilenip zaman ayırdığınız için çok tşk ediyorum...
Undefined hocamın da dediği gibi olay quantum grid ile halledilebiliyor. Bunu denedim bu ok. Onun haricinde cevap gelene kadar bende araştırma yaptım ve fast report'un excell ve buna benzer bir çok olaya export nesnesi var bunları kullanarak Excell'e aktarımı istediğim şekilde sağladım. Sonuçta her iki yöntemle de olabiliyor. Bu konuda sorunu olan tüm arkadaşlar bu iki yöntemi de kullanabilirler. Sağlıklı sonuç alacaklarına eminim.
Herkese çok tşk ederim.... Çalışmalarınızda başarılar dilerim...
Undefined hocamın da dediği gibi olay quantum grid ile halledilebiliyor. Bunu denedim bu ok. Onun haricinde cevap gelene kadar bende araştırma yaptım ve fast report'un excell ve buna benzer bir çok olaya export nesnesi var bunları kullanarak Excell'e aktarımı istediğim şekilde sağladım. Sonuçta her iki yöntemle de olabiliyor. Bu konuda sorunu olan tüm arkadaşlar bu iki yöntemi de kullanabilirler. Sağlıklı sonuç alacaklarına eminim.
Herkese çok tşk ederim.... Çalışmalarınızda başarılar dilerim...
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...