Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
fastreport şablonu database e kayıt
#1
arkadaşlar merhaba

programda raporlama olarak fast report kullanıyorum. Çok kullanıcılı sistemlerde ayrı ayrı şablon zor oluyor. O yüzden rapor şablonunu veritabanına kaydetmek ve buran çağırmak istiyorum. Bir çok döküman inceledim ama elle tutulur birşey bulamadım yada ben anlamadım. MYSQL veri tabanı kullanıyorum. Bununla ilgili örnek çalışma yapan varmıdır. yada elinde örnek proje olan varmıdır.
Cevapla
#2
Daha önce kullanmıştım. Kodu kontrol etmeden ekledim. Büyük boyutlu resim eklemeyecekseniz güzel çalışıyor.

procedure TForm1.Btn_DbdenOkuClick(Sender: TObject);
var
 New : boolean;
 Mstream : TMemoryStream;
 Bstream : TBlobStream;
begin
 frxReport1.Clear;
 New := False;

 try
 // if not(Table.State in [dsedit,dsinsert]) then
 //  Table.Edit;

   Mstream := TMemoryStream.Create;
   Bstream := TBlobStream.Create(Table.FieldByName('Rapor') as TBlobField, bmReadWrite);
   Mstream.CopyFrom(Bstream,Bstream.Size);
   Mstream.Position := 0;

   if Mstream.Size > 0 then
     frxReport1.LoadFromStream(Mstream)
       else
          New := True;
 finally
  Mstream.Free;
 end;
 frxReport1.DesignReport();

end;

function TForm1.frxDesigner1SaveReport(Report: TfrxReport;
 SaveAs: Boolean): Boolean;
var
 Mstream : TMemoryStream;
 Bstream : TBlobStream;
begin
    if Table.State in [dsBrowse] then begin
       Table.Edit;
    end;
    try
      Mstream := TMemoryStream.Create;
      Bstream := TBlobStream.Create(Table.FieldByName('Rapor') as TBlobField, bmReadWrite);
      frxReport1.SaveToStream(Mstream);
      Mstream.Position := 0;
      Bstream.CopyFrom(Mstream, Mstream.Size);
      if Table.State in [dsInsert,dsEdit] then
         Table.Post;

    finally
      Mstream.Free;
      Bstream.Free;
    end;
    Result := True;

end;
Cevapla
#3
(02-01-2025, Saat: 20:16)ugorkem Adlı Kullanıcıdan Alıntı: Daha önce kullanmıştım. Kodu kontrol etmeden ekledim.  Büyük boyutlu resim eklemeyecekseniz güzel çalışıyor.

procedure TForm1.Btn_DbdenOkuClick(Sender: TObject);
var
 New : boolean;
 Mstream : TMemoryStream;
 Bstream : TBlobStream;
begin
 frxReport1.Clear;
 New := False;

 try
 // if not(Table.State in [dsedit,dsinsert]) then
 //  Table.Edit;

   Mstream := TMemoryStream.Create;
   Bstream := TBlobStream.Create(Table.FieldByName('Rapor') as TBlobField, bmReadWrite);
   Mstream.CopyFrom(Bstream,Bstream.Size);
   Mstream.Position := 0;

   if Mstream.Size > 0 then
     frxReport1.LoadFromStream(Mstream)
       else
          New := True;
 finally
  Mstream.Free;
 end;
 frxReport1.DesignReport();

end;

function TForm1.frxDesigner1SaveReport(Report: TfrxReport;
 SaveAs: Boolean): Boolean;
var
 Mstream : TMemoryStream;
 Bstream : TBlobStream;
begin
    if Table.State in [dsBrowse] then begin
       Table.Edit;
    end;
    try
      Mstream := TMemoryStream.Create;
      Bstream := TBlobStream.Create(Table.FieldByName('Rapor') as TBlobField, bmReadWrite);
      frxReport1.SaveToStream(Mstream);
      Mstream.Position := 0;
      Bstream.CopyFrom(Mstream, Mstream.Size);
      if Table.State in [dsInsert,dsEdit] then
         Table.Post;

    finally
      Mstream.Free;
      Bstream.Free;
    end;
    Result := True;

end;

Merhaba;

firebird 5 kullanıyorum.
veritabanına kayıt işlemini gerçekliştiremedim. çalışma anında raporu yüklüyor. düzenleme yapıp kaydediyorum. tekrar raporu yüklüyor. ilgili form veya programı kapatıp açınca raporu düzenleme için tekrar yüklemiyor. sayfa boş geliyor.
Cevapla
#4
(14-02-2025, Saat: 06:07)akuyumcu63 Adlı Kullanıcıdan Alıntı: Merhaba;

firebird 5 kullanıyorum.
veritabanına kayıt işlemini gerçekliştiremedim. çalışma anında raporu yüklüyor. düzenleme yapıp kaydediyorum. tekrar raporu yüklüyor. ilgili form veya programı kapatıp açınca raporu düzenleme için tekrar yüklemiyor. sayfa boş geliyor.

Database'e kayıt yaptığın ve okuduğun kodu paylaşmazsan tahmin edemeyiz nerede yanlış yaptığını.
WWW
Cevapla
#5
(14-02-2025, Saat: 08:41)yhackup Adlı Kullanıcıdan Alıntı:
(14-02-2025, Saat: 06:07)akuyumcu63 Adlı Kullanıcıdan Alıntı: Merhaba;

firebird 5 kullanıyorum.
veritabanına kayıt işlemini gerçekliştiremedim. çalışma anında raporu yüklüyor. düzenleme yapıp kaydediyorum. tekrar raporu yüklüyor. ilgili form veya programı kapatıp açınca raporu düzenleme için tekrar yüklemiyor. sayfa boş geliyor.

Database'e kayıt yaptığın ve okuduğun kodu paylaşmazsan tahmin edemeyiz nerede yanlış yaptığını.

yukarıdaki kodun aynısını kullanmaya çalıştım. yine de gözden kaçan birşeyler olabilir. haklısınız.
Firebird 5.0 ı kullanıyorum. RAPOR alanı BLOB SUB TYPE BINARY olarak ayarlı,

okuma yaparken;
procedure TfrmTanimlar.btnDBdenOkuClick(Sender: TObject);
var
New : boolean;
Mstream : TMemoryStream;
Bstream : TBlobStream;
begin
 frxReport1.Clear;
 New := False;
 try
   if not(UniTable1.State in [dsedit,dsinsert]) then UniTable1.Edit;
   Mstream := TMemoryStream.Create;
   Bstream := TBlobStream.Create(UniTable1.FieldByName('RAPOR') as TBlobField, bmReadWrite);
   Mstream.CopyFrom(Bstream,Bstream.Size);
   Mstream.Position := 0;
   if Mstream.Size > 0 then
     frxReport1.LoadFromStream(Mstream) else New := True;
 finally
   Mstream.Free;
 end;
 frxReport1.DesignReport();
end;

yazma yaparken;
function TfrmTanimlar.frxDesigner1SaveReport(Report: TfrxReport;
 SaveAs: Boolean): Boolean;
var
 Mstream : TMemoryStream;
 Bstream : TBlobStream;
begin
 if UniTable1.State in [dsBrowse] then
 begin
   UniTable1.Edit;
 end;
 try
   Mstream := TMemoryStream.Create;
   Bstream := TBlobStream.Create(UniTable1.FieldByName('RAPOR') as TBlobField, bmReadWrite);
   frxReport1.SaveToStream(Mstream);
   Mstream.Position := 0;
   Bstream.CopyFrom(Mstream, Mstream.Size);
   if UniTable1.State in [dsInsert,dsEdit] then
   Begin
     UniTable1.Post;
   End;
 finally
   Mstream.Free;
   Bstream.Free;
 end;
 Result := True;
end;
Cevapla
#6
Yukarıdaki kodlar MYSQL veri tabanında BLOB olarak tanımlanan alan için çalışıyor. herhangi bir problemle karşılaşmadım. FIREBIRD 5 te kaydetme işlemini neden yapmıyor. onu bulamadım.
Cevapla
#7
Merhaba, firebird 2.5.9, ibx component seti kullanıyorum, aşağıdaki şekilde yapıyorum.

MemData := TMemoryStream.Create;
MemData.LoadFromFile(EXEKLASOR+'DATA\RAPOR\RAPOR.frf');
ANA.TDIZAYN.Active:=TRUE;
ANA.TDIZAYN.Locate('KOD',INTTOSTR(RAPORKODU),[]);
   ANA.TDIZAYN.Edit;
   TBlobField(ANA.TDIZAYN.FieldByName('ICERIK')).LoadFromStream(MemData);
   ANA.TDIZAYN.Refresh;
   ANA.TDIZAYN.Active:=FALSE;
MemData.Free;
ANA.TRANS_RAPOR.CommitRetaining;
WWW
Cevapla
#8
(14-02-2025, Saat: 13:15)esistem Adlı Kullanıcıdan Alıntı: Merhaba, firebird 2.5.9, ibx component seti kullanıyorum, aşağıdaki şekilde yapıyorum.

MemData := TMemoryStream.Create;
MemData.LoadFromFile(EXEKLASOR+'DATA\RAPOR\RAPOR.frf');
ANA.TDIZAYN.Active:=TRUE;
ANA.TDIZAYN.Locate('KOD',INTTOSTR(RAPORKODU),[]);
   ANA.TDIZAYN.Edit;
   TBlobField(ANA.TDIZAYN.FieldByName('ICERIK')).LoadFromStream(MemData);
   ANA.TDIZAYN.Refresh;
   ANA.TDIZAYN.Active:=FALSE;
MemData.Free;
ANA.TRANS_RAPOR.CommitRetaining;

merhaba;
CommitRetaining yapamadık sanırım sıkıntı burada. çünkü çalışma anında problem yok, işlemler oluyor. farklı kayıtlar seçildiğinde her kayıt kendi raporunu çağırıyor. programı kapatınca güncellemeler uçuyor.

sonunda oldu.

okuma için
procedure TfrmTanimlar.btnDBdenOkuClick(Sender: TObject);
var
New : boolean;
Mstream : TMemoryStream;
Bstream : TBlobStream;
begin
 frxReport1.Clear;
 New := False;
 try
   if DM.QryRaporlar.State in [dsBrowse] then
   begin
     DM.QryRaporlar.Edit;
   end;
   Mstream := TMemoryStream.Create;
   Bstream := TBlobStream.Create(DM.QryRaporlar.FieldByName('RAPOR') as TBlobField, bmReadWrite);
   Mstream.CopyFrom(Bstream,Bstream.Size);
   Mstream.Position := 0;
   if Mstream.Size > 0 then
     frxReport1.LoadFromStream(Mstream) else New := True;
 finally
   Mstream.Free;
 end;
 frxReport1.DesignReport();
end;

yazma için;
function TfrmTanimlar.frxDesigner1SaveReport(Report: TfrxReport;
 SaveAs: Boolean): Boolean;
var
 Mstream : TMemoryStream;
 Bstream : TBlobStream;
begin
 if DM.QryRaporlar.State in [dsBrowse] then
 begin
   DM.QryRaporlar.Edit;
 end;
 try
   Mstream := TMemoryStream.Create;
   Bstream := TBlobStream.Create(DM.QryRaporlar.FieldByName('RAPOR') as TBlobField, bmReadWrite);
   frxReport1.SaveToStream(Mstream);
   Mstream.Position := 0;
   Bstream.CopyFrom(Mstream, Mstream.Size);
   if DM.QryRaporlar.State in [dsInsert,dsEdit] then
   Begin
     DM.QryRaporlar.Post;
     DM.QryRaporlar.UpdateTransaction.CommitRetaining;
   End;
 finally
   Mstream.Free;
   Bstream.Free;
 end;
 Result := True;
end;

herkese teşekkür ederim.
Cevapla
#9
tablodan field okuma (btnDBdenOkuClick) sırasında edit etmene gerek yok. Eğer başka bir amacın yoksa düzeltme kodunu kaldırmalısın

   if DM.QryRaporlar.State in [dsBrowse] then
  begin
    DM.QryRaporlar.Edit;
  end;
Cevapla
#10
(14-02-2025, Saat: 19:01)ugorkem Adlı Kullanıcıdan Alıntı: tablodan field okuma (btnDBdenOkuClick) sırasında edit etmene gerek yok. Eğer başka bir amacın yoksa düzeltme kodunu kaldırmalısın

   if DM.QryRaporlar.State in [dsBrowse] then
  begin
    DM.QryRaporlar.Edit;
  end;

merhaba;
bu kodu kaldırınca dataset edit yada insert modunda değil diye hata veriyor.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Datasnap veritabanı kayıt serdar 2 312 30-11-2025, Saat: 10:53
Son Yorum: serdar
Big Grin Fastreport Masterdata StartNewPage değerini değiştirme nevzatc 4 493 28-11-2025, Saat: 02:29
Son Yorum: nevzatc
  FastReport da sayfa uzunluğu mcuyan 1 436 22-09-2025, Saat: 08:50
Son Yorum: hi_selamlar
  Veri Tabanına Kontrollü Kayıt Yaptırma bünyamin68 20 4.087 08-06-2025, Saat: 09:40
Son Yorum: izmaimen
  FastReport Dinamik Sayıya Göre Etiket Bastırma [ÇÖZÜLDÜ] bünyamin68 2 714 09-01-2025, Saat: 13:47
Son Yorum: bünyamin68



Konuyu Okuyanlar: 1 Ziyaretçi