Merhaba arkadaşlar öncelikle hayırlı ramazanlar ve hayırlı kandiller.
Arkadaşlar Ekte bir resim paylaştım o resimdeki veri tabanı alanlarımdan sadece seçilenlerin raporlanmasını istiyorum nasıl yapabilirim bana yardımcı olabilir misiniz ?
Teşekkürler.
Raporlama Hakkında
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 151
- Kayıt: 17 Kas 2005 04:46
Raporlama Hakkında
- Dosya ekleri
-
- Adsız.rar
- (14.16 KiB) 82 kere indirildi
-
- Adsız.jpg (7.39 KiB) 1881 kere görüntülendi
Re: Raporlama Hakkında
(1) SQL kullanacaksınız.
(2) Joker bir SELECT satırı yazıp uygulayacaksınız. Bunlardan hiçbiri seçilmemişse uyarıp işlemi durduracaksınız.
Örnek :
Başarılar.
(2) Joker bir SELECT satırı yazıp uygulayacaksınız. Bunlardan hiçbiri seçilmemişse uyarıp işlemi durduracaksınız.
Örnek :
Kod: Tümünü seç
SQL.Add(' SELECT 1 as BuSutunDBGriddeGizlenecek');
if chkAd.checked then SQL.Add(', FieldAd');
if chkSoyad.checked then SQL.Add(', FieldSoyad');
if chkAdres.checked then SQL.Add(', FieldAdres');
if chkGSM.checked then SQL.Add(', FieldGSM');
...
...
Active := True;
DBGrid1.Columns[0].Visible := False; // ilk sütunu gizleyecektik ya işte o...
-
- Üye
- Mesajlar: 151
- Kayıt: 17 Kas 2005 04:46
Re: Raporlama Hakkında
Sayın mrmarman cevabın için teşekkür ederim.Raporlama derken benim kastettiğim yazıcı için raporlama grid üzerinde değil bu yöntemle yazıcı içinde yapabilir miyim ?mrmarman yazdı:(1) SQL kullanacaksınız.
(2) Joker bir SELECT satırı yazıp uygulayacaksınız. Bunlardan hiçbiri seçilmemişse uyarıp işlemi durduracaksınız.
Örnek :Başarılar.Kod: Tümünü seç
SQL.Add(' SELECT 1 as BuSutunDBGriddeGizlenecek'); if chkAd.checked then SQL.Add(', FieldAd'); if chkSoyad.checked then SQL.Add(', FieldSoyad'); if chkAdres.checked then SQL.Add(', FieldAdres'); if chkGSM.checked then SQL.Add(', FieldGSM'); ... ... Active := True; DBGrid1.Columns[0].Visible := False; // ilk sütunu gizleyecektik ya işte o...
Re: Raporlama Hakkında
Merhaba.
Yazıcı için raporlama aracı kullanmak veya bu aracı bizzat kendin tasarlamak zorundasın.
Aslında raporlama araçlarının da yazın düzeni ve şablonunu senin tasarladığın göz önüne alındığında iki halde de iş sende bitiyor.
Şahsen artık FastReport, QuickRepot vs. raporlama araçlarını kullanmayı bıraktım. Excel, Word otomasyon ile veya direkt HTML bir çıktı tasarlayıp bunu yazıcıya yönlendirmek her platformda bana kolaylık sağlıyor.
Şimdi bu verdiğim örnek DBGrid'den bahis şekilde algılamamdan dolayı ona yönelik özelleştirme idi. Yazıcı için buna ihtiyacın yok, önerdiğim şekillerde sütun sayısı farklılaşan dinamik çözümler de üretebilirsin.
Eğer sistemde MSOffice kurulu ise senin için EXCEL ile bir örnek hazırladım bu mesaj ekinde bulabilirsin.
// ADOQuery içeriğini ne varsa direkt Excel'e gönderen bir procedure hazırlamıştım...
// Yazdır Butonu
// Form açılınca Veritabanı gösteren standart kısım
Yazıcı için raporlama aracı kullanmak veya bu aracı bizzat kendin tasarlamak zorundasın.
Aslında raporlama araçlarının da yazın düzeni ve şablonunu senin tasarladığın göz önüne alındığında iki halde de iş sende bitiyor.
Şahsen artık FastReport, QuickRepot vs. raporlama araçlarını kullanmayı bıraktım. Excel, Word otomasyon ile veya direkt HTML bir çıktı tasarlayıp bunu yazıcıya yönlendirmek her platformda bana kolaylık sağlıyor.
Şimdi bu verdiğim örnek DBGrid'den bahis şekilde algılamamdan dolayı ona yönelik özelleştirme idi. Yazıcı için buna ihtiyacın yok, önerdiğim şekillerde sütun sayısı farklılaşan dinamik çözümler de üretebilirsin.
Eğer sistemde MSOffice kurulu ise senin için EXCEL ile bir örnek hazırladım bu mesaj ekinde bulabilirsin.
// ADOQuery içeriğini ne varsa direkt Excel'e gönderen bir procedure hazırlamıştım...
Kod: Tümünü seç
USES ComObj;
Procedure AdoQueryToExcel( Baslik, Sheet : String; AdoQuery:TAdoQuery; ProgressBar:TProgressBar; boolYazdir: Boolean );
// Uses AdoDb, ComObj, ComCtrls
Const // Excel97'den
xlWBATWorksheet = $FFFFEFB9;
xlCenter = $FFFFEFF4;
xlEdgeLeft = $00000007;
xlEdgeRight = $0000000A;
xlContinuous = $00000001;
xlInsideHorizontal = $0000000C;
xlInsideVertical = $0000000B;
xlEdgeTop = $00000008;
xlEdgeBottom = $00000009;
Sonuc : Array[1..2] of Char = ('x', ' ');
Var
xExcel,
xRange : OleVariant;
Sayac : Integer;
Harfler : TStringList;
begin
If AdoQuery.Eof then Exit;
AdoQuery.DisableControls;
AdoQuery.First;
Harfler := TStringList.Create;
For Sayac := 65 to 90 do Harfler.Add( Chr( Sayac ) );
For Sayac := 65 to 90 do Harfler.Add( 'A'+Chr( Sayac ) );
For Sayac := 65 to 90 do Harfler.Add( 'B'+Chr( Sayac ) );
With AdoQuery do begin
IF NOT EOF then begin
Try
xExcel := CreateOleObject('Excel.Application');
xExcel.Workbooks.Add(xlWBatWorkSheet);
xExcel.Workbooks[1].WorkSheets[1].Name := Format('(%s)',[Sheet]);
Except
MessageDlg('İşlem Başarısız...', mtError, [mbOk], 1); //mrOK = 1
Exit;
End;
// xExcel.Visible := True;
xRange := xExcel.Range['A1',Harfler[Fields.Count]+'1'];
xRange.MergeCells := True;
xRange.Columns.Font.Name := 'Tahoma';
xRange.Columns.Font.Size := 14;
xRange.Columns.Font.Color := clNavy;
xRange.Columns.Font.Bold := True;
xRange.Columns.ColumnWidth := 10;
xRange.Cells.Interior.Color := clYellow;
xRange.Cells.HorizontalAlignment := xlCenter;
// Başlıklar
xExcel.Range['A1'].Value := Baslik;
xExcel.Range['A2'].Value := 'S.No';
For Sayac := 0 to Fields.Count-1 do begin
xExcel.Range[Harfler[Sayac+1]+'2'].Value := Fields[Sayac].DisplayName;
xExcel.Range[Harfler[Sayac+1]+'2'].Font.Bold:= True;
end;
If Assigned(ProgressBar) then ProgressBar.Max := RecordCount;
While (NOT EOF) do begin
If Assigned(ProgressBar) then ProgressBar.Position := RecNo;
xExcel.Range['A'+IntToStr(2+RecNo)].Value := Format('%d', [RecNo]);
For Sayac := 0 to Fields.Count-1 do begin
xExcel.Range[Harfler[Sayac+1]+IntToStr(2+RecNo)].NumberFormat := '@';
If Fields[Sayac].DataType = ftBoolean then
begin
xExcel.Range[Harfler[Sayac+1]+IntToStr(2+RecNo)].Value := Sonuc[Integer(Fields[Sayac].AsBoolean)];
xExcel.Range[Harfler[Sayac+1]+IntToStr(2+RecNo)].Cells.HorizontalAlignment := xlCenter;
end else
begin
xExcel.Range[Harfler[Sayac+1]+IntToStr(2+RecNo)].Value := Fields[Sayac].AsString;
end;
end; //For
Next;
Application.ProcessMessages;
end; // While
// Format
xRange := xExcel.Range['A2',Format('%s%d', [Harfler[Fields.Count], RecordCount+2]) ];
xRange.Columns.AutoFit;
xRange.Cells.VerticalAlignment := xlCenter;
xRange.Borders.Item[xlEdgeLeft].LineStyle := xlContinuous;
xRange.Borders.Item[xlEdgeRight].LineStyle := xlContinuous;
xRange.Borders.Item[xlInsideHorizontal].LineStyle := xlContinuous;
xRange.Borders.Item[xlInsideVertical].LineStyle := xlContinuous;
xRange.Borders.Item[xlEdgeTop].LineStyle := xlContinuous;
xRange.Borders.Item[xlEdgeBottom].LineStyle := xlContinuous;
end; // IF NOT EOF
xExcel.Visible := True;
if boolYazdir
then xExcel.ActiveWorkBook.PrintOut(Copies := 2, Collate := True, Preview := True);
end; // With
Harfler.Free;
AdoQuery.EnableControls;
end;
Kod: Tümünü seç
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
i : Integer;
AQSorgu : TAdoQuery;
strAlanlar : String;
begin
strAlanlar := '';
for i := 0 to CheckListBox1.Items.Count - 1 do begin
if CheckListBox1.Checked[i] then
begin
if strAlanlar <> '' then strAlanlar := strAlanlar + ',' + CheckListBox1.Items[i]
else strAlanlar := CheckListBox1.Items[i];
end;
end;
AQSorgu := TAdoQuery.Create(nil);
With AQSorgu do begin
Try
Connection := AdoQuery1.Connection;
SQL.Text := 'SELECT ' + strAlanlar + ' FROM FILM';
Active := True;
AdoQueryToExcel( 'Benim Raporum', 'Rapor-01', AQSorgu, ProgressBar1, True );
Active := False;
Finally
Free;
End;
end;
end;
Kod: Tümünü seç
procedure TForm1.FormShow(Sender: TObject);
Var
i : Integer;
begin
AdoConnection1.LoginPrompt := False;
AdoConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;'
+ 'Data Source='+ ExtractFilePath(Application.Exename) + 'film_veritabani.mdb';
AdoQuery1.Connection := ADOConnection1;
AdoQuery1.SQL.Text := 'SELECT * FROM FILM';
AdoQuery1.Active := True;
DataSource1.DataSet := ADOQuery1;
DBGrid1.DataSource := DataSource1;
DBGrid1.Options := DBGrid1.Options - [dgEditing];
CheckListBox1.Columns := 7;
for i := 0 to AdoQuery1.FieldCount - 1
do CheckListBox1.Items.Add( AdoQuery1.Fields[i].FieldName );
end;
- Dosya ekleri
-
- YaziciDinamikSutun.rar
- Excel kullanarak raporlama örneği (ofis kurulu ise geçerlidir)
- (57.18 KiB) 75 kere indirildi
-
- Üye
- Mesajlar: 151
- Kayıt: 17 Kas 2005 04:46
Re: Raporlama Hakkında
Yardımlarınız için teşekkür ederim.
Re: Raporlama Hakkında
Yemin ederim çok kıymetli paylaşımlar.mrmarman yazdı: ↑14 Tem 2015 03:36 Merhaba.
Yazıcı için raporlama aracı kullanmak veya bu aracı bizzat kendin tasarlamak zorundasın.
Aslında raporlama araçlarının da yazın düzeni ve şablonunu senin tasarladığın göz önüne alındığında iki halde de iş sende bitiyor.
Şahsen artık FastReport, QuickRepot vs. raporlama araçlarını kullanmayı bıraktım. Excel, Word otomasyon ile veya direkt HTML bir çıktı tasarlayıp bunu yazıcıya yönlendirmek her platformda bana kolaylık sağlıyor.
Şimdi bu verdiğim örnek DBGrid'den bahis şekilde algılamamdan dolayı ona yönelik özelleştirme idi. Yazıcı için buna ihtiyacın yok, önerdiğim şekillerde sütun sayısı farklılaşan dinamik çözümler de üretebilirsin.
Eğer sistemde MSOffice kurulu ise senin için EXCEL ile bir örnek hazırladım bu mesaj ekinde bulabilirsin.
// ADOQuery içeriğini ne varsa direkt Excel'e gönderen bir procedure hazırlamıştım...// Yazdır ButonuKod: Tümünü seç
USES ComObj; Procedure AdoQueryToExcel( Baslik, Sheet : String; AdoQuery:TAdoQuery; ProgressBar:TProgressBar; boolYazdir: Boolean ); // Uses AdoDb, ComObj, ComCtrls Const // Excel97'den xlWBATWorksheet = $FFFFEFB9; xlCenter = $FFFFEFF4; xlEdgeLeft = $00000007; xlEdgeRight = $0000000A; xlContinuous = $00000001; xlInsideHorizontal = $0000000C; xlInsideVertical = $0000000B; xlEdgeTop = $00000008; xlEdgeBottom = $00000009; Sonuc : Array[1..2] of Char = ('x', ' '); Var xExcel, xRange : OleVariant; Sayac : Integer; Harfler : TStringList; begin If AdoQuery.Eof then Exit; AdoQuery.DisableControls; AdoQuery.First; Harfler := TStringList.Create; For Sayac := 65 to 90 do Harfler.Add( Chr( Sayac ) ); For Sayac := 65 to 90 do Harfler.Add( 'A'+Chr( Sayac ) ); For Sayac := 65 to 90 do Harfler.Add( 'B'+Chr( Sayac ) ); With AdoQuery do begin IF NOT EOF then begin Try xExcel := CreateOleObject('Excel.Application'); xExcel.Workbooks.Add(xlWBatWorkSheet); xExcel.Workbooks[1].WorkSheets[1].Name := Format('(%s)',[Sheet]); Except MessageDlg('İşlem Başarısız...', mtError, [mbOk], 1); //mrOK = 1 Exit; End; // xExcel.Visible := True; xRange := xExcel.Range['A1',Harfler[Fields.Count]+'1']; xRange.MergeCells := True; xRange.Columns.Font.Name := 'Tahoma'; xRange.Columns.Font.Size := 14; xRange.Columns.Font.Color := clNavy; xRange.Columns.Font.Bold := True; xRange.Columns.ColumnWidth := 10; xRange.Cells.Interior.Color := clYellow; xRange.Cells.HorizontalAlignment := xlCenter; // Başlıklar xExcel.Range['A1'].Value := Baslik; xExcel.Range['A2'].Value := 'S.No'; For Sayac := 0 to Fields.Count-1 do begin xExcel.Range[Harfler[Sayac+1]+'2'].Value := Fields[Sayac].DisplayName; xExcel.Range[Harfler[Sayac+1]+'2'].Font.Bold:= True; end; If Assigned(ProgressBar) then ProgressBar.Max := RecordCount; While (NOT EOF) do begin If Assigned(ProgressBar) then ProgressBar.Position := RecNo; xExcel.Range['A'+IntToStr(2+RecNo)].Value := Format('%d', [RecNo]); For Sayac := 0 to Fields.Count-1 do begin xExcel.Range[Harfler[Sayac+1]+IntToStr(2+RecNo)].NumberFormat := '@'; If Fields[Sayac].DataType = ftBoolean then begin xExcel.Range[Harfler[Sayac+1]+IntToStr(2+RecNo)].Value := Sonuc[Integer(Fields[Sayac].AsBoolean)]; xExcel.Range[Harfler[Sayac+1]+IntToStr(2+RecNo)].Cells.HorizontalAlignment := xlCenter; end else begin xExcel.Range[Harfler[Sayac+1]+IntToStr(2+RecNo)].Value := Fields[Sayac].AsString; end; end; //For Next; Application.ProcessMessages; end; // While // Format xRange := xExcel.Range['A2',Format('%s%d', [Harfler[Fields.Count], RecordCount+2]) ]; xRange.Columns.AutoFit; xRange.Cells.VerticalAlignment := xlCenter; xRange.Borders.Item[xlEdgeLeft].LineStyle := xlContinuous; xRange.Borders.Item[xlEdgeRight].LineStyle := xlContinuous; xRange.Borders.Item[xlInsideHorizontal].LineStyle := xlContinuous; xRange.Borders.Item[xlInsideVertical].LineStyle := xlContinuous; xRange.Borders.Item[xlEdgeTop].LineStyle := xlContinuous; xRange.Borders.Item[xlEdgeBottom].LineStyle := xlContinuous; end; // IF NOT EOF xExcel.Visible := True; if boolYazdir then xExcel.ActiveWorkBook.PrintOut(Copies := 2, Collate := True, Preview := True); end; // With Harfler.Free; AdoQuery.EnableControls; end;
// Form açılınca Veritabanı gösteren standart kısımKod: Tümünü seç
procedure TForm1.BitBtn1Click(Sender: TObject); Var i : Integer; AQSorgu : TAdoQuery; strAlanlar : String; begin strAlanlar := ''; for i := 0 to CheckListBox1.Items.Count - 1 do begin if CheckListBox1.Checked[i] then begin if strAlanlar <> '' then strAlanlar := strAlanlar + ',' + CheckListBox1.Items[i] else strAlanlar := CheckListBox1.Items[i]; end; end; AQSorgu := TAdoQuery.Create(nil); With AQSorgu do begin Try Connection := AdoQuery1.Connection; SQL.Text := 'SELECT ' + strAlanlar + ' FROM FILM'; Active := True; AdoQueryToExcel( 'Benim Raporum', 'Rapor-01', AQSorgu, ProgressBar1, True ); Active := False; Finally Free; End; end; end;
Kod: Tümünü seç
procedure TForm1.FormShow(Sender: TObject); Var i : Integer; begin AdoConnection1.LoginPrompt := False; AdoConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;' + 'Data Source='+ ExtractFilePath(Application.Exename) + 'film_veritabani.mdb'; AdoQuery1.Connection := ADOConnection1; AdoQuery1.SQL.Text := 'SELECT * FROM FILM'; AdoQuery1.Active := True; DataSource1.DataSet := ADOQuery1; DBGrid1.DataSource := DataSource1; DBGrid1.Options := DBGrid1.Options - [dgEditing]; CheckListBox1.Columns := 7; for i := 0 to AdoQuery1.FieldCount - 1 do CheckListBox1.Items.Add( AdoQuery1.Fields[i].FieldName ); end;
Bu tür sketch'ler benim başımı döndürüyor...
Fastreportun dbgrid Excel export bileşeni var çok dandik, yarın ilk iş bu kodları pas haline getirip projemde deneyeceğim.
Anladığım kadarıyla, field sütun başlıkları büyütülebilir, font değiştirilebilir
Bold sutun başlığı ekleyecem, offf kodlara bak, geliştirilmesi gerek, bundan neler yapilir be.
3 parti yazilimlara gerek yok Excel dururken.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;