Hoşgeldiniz, Ziyaretçi.Lütfen giriş yapın veya kayıt olun.
E-posta adresinize aktivasyon iletisi gelmediyse lütfen buraya tıklayın.
Kasım 15, 2018, 04:27:36 ÖS


FORUM ŞU AN İÇİN (ÖZEL BÖLÜMLER HARİÇ) TÜM ZİYARETÇİLERE AÇIKTIR.
EMEĞE SAYGI AÇISINDAN ALINTILARIN MUTLAKA KAYNAK GÖSTERİLMESİ RİCA OLUNUR.


Ana Sayfa Ana Sayfa Yardım Ara Giriş Yap Kayıt
+  Hay-NS Yazılım
|-+  DELPHİ KÖŞESİ
| |-+  Delphi Veritabanı (FİREBİRD)
| | |-+  Kod Bankası (Firebird)
| | | |-+  OleContainer e getirilen word dosyasını FireBird e kaydetme,kullanma
0 Üye ve 1 Ziyaretçi konuyu incelemekte. « önceki sonraki »
Sayfa: [1] Aşağı git Bu Konuyu Gönder Yazdır
Gönderen Konu: OleContainer e getirilen word dosyasını FireBird e kaydetme,kullanma  (Okunma Sayısı 10495 defa)
turkoder
Adnan YILDIZ
Administrator
Onbaşı
*****

Rep Puanı: +0/-0
Çevrimdışı Çevrimdışı

Mesaj Sayısı: 218



WWW
« : Kasım 13, 2006, 01:15:40 ÖS »

OleContainer e getirilen word dosyasını FireBird e kaydetme,kaydedileni (Word) çağırma,düzeltme

Rastladığım bazı forum larda Word dosyasının veritabanına kaydı ile ilgili bazı arkadaşlar imkansız yazmışlar, bu konuyla ilgili çok sorularla karşılaştım. Umarım ilgilenen arkadaşların işine yarar.
Bu kodlarla word dosyasını veritabanına ekleyebilir, tekrar wordde açarak düzeltebilirsiniz.

//OleContainer in olduğu forma linkleyelim....
Kod:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);
Form2.OleContainer1.DoVerb(ovShow);
Form2.ShowModal;
end;


Bu linke tıkladığınızda direkt (olecontaineri word olarak ayarladığınızı ve ben AllowActiveDoc=False , AllowInPlace=False yaptım ki word ayrı bir sayfada karşıma çıksın.
Word uygulamasına birşeyler yazıp çizip kaydet deyip çıktık, Burada yaptığımız işlemler formumuzda bulunan olecontainer1 içerisine geldi...

Şimdi bu içerisindeki bilgileri veritabanımıza (Firebird - Blob alan) kaydediyoruz.

Kod:
procedure TForm2.BitBtn6Click(Sender: TObject);
var
  Buf        : String;
  Uzunluk    : Integer;
  TempStream : TMemoryStream;
begin
dm.TSORU.Open; // dm - DataModule ye verilen name - isim
  dm.TSORU.Insert; // TSORU ise IBTable mize verdiğimiz isim
  TempStream := TMemoryStream.Create;
  OleContainer1.SaveToStream( TempStream );
  TempStream.Position := 0;
  Uzunluk := TempStream.Size;
  SetLength(Buf,Uzunluk+1);
  TempStream.Read(Buf[1],Uzunluk);
  dm.TSORU.FieldValues['RDOS']:=Buf;// RDOS blob alan ismi
   dm.TSORU.Post;
  TempStream.Free;
end;

// TSORU tablesiyle ilgili yaptıklarımı da yazayım da belki eleştiri gelir.

Kod:
procedure Tdm.TSORUBeforeOpen(DataSet: TDataSet);
begin
if not IBDatabase1.Connected=True then
IBDatabase1.Connected:=True;
if IBTransaction1.Active=False then
IBTransaction1.Active:=True;
end;
procedure Tdm.TSORUAfterPost(DataSet: TDataSet);
begin
  IBTransaction1.CommitRetaining;
end;


// insert esnasında otomatik artan için sp yi tetikleyelim...

Kod:
procedure Tdm.TSORUBeforePost(DataSet: TDataSet);
begin
IF (TSORU.State=dsInsert) AND (TSORU.FieldByName('SORU_ID').IsNull) then
begin
TSORU.FieldByName('SORU_ID').AsInteger:=0;
IbStoredProc2.Prepare;
IbStoredProc2.ExecProc;
TSORU.FieldByName('SORU_ID').AsInteger:=IbStoredProc2.ParamByName('ID').AsInteger;
end;
end;


Şimdide veritabanından bu dosyayı çağıralım ve wordde tekrar düzenleme yapalım.

Kod:
procedure TForm2.BitBtn8Click(Sender: TObject);
var
  Buf        : String;
  Uzunluk    : Integer;
  TempStream : TMemoryStream;
begin
  TempStream := TMemoryStream.Create;
  Buf:=dm.TSORU.FieldValues['RDOS'];
  Uzunluk := Length(Buf);
  TempStream.SetSize(Uzunluk+1);
  TempStream.Write(Buf[1],Uzunluk);
  TempStream.Position := 0;
  OleContainer1.LoadFromStream( TempStream );
  TempStream.Free;
end;

//ve
//tekrar wordde düzenleme yapalım

Kod:
procedure TForm2.BitBtn3Click(Sender: TObject);
begin
OleContainer1.DoVerb(ovShow);
end;


//evet düzenleme yapabiliyoruz. Veritabanına kayıt için yukarıda insert yerine edit yapalım....
Yani;

Kod:
procedure TForm2.BitBtn9Click(Sender: TObject);
var
  Buf        : String;
  Uzunluk    : Integer;
  TempStream : TMemoryStream;
begin
dm.TSORU.Open;
  dm.TSORU.Edit;
  TempStream := TMemoryStream.Create;
  OleContainer1.SaveToStream( TempStream );
  TempStream.Position := 0;
  Uzunluk := TempStream.Size;
  SetLength(Buf,Uzunluk+1);
  TempStream.Read(Buf[1],Uzunluk);
  dm.TSORU.FieldValues['RDOS']:=Buf;
   dm.TSORU.Post;
  TempStream.Free;
end;
« Son Düzenleme: Kasım 13, 2006, 01:18:22 ÖS Gönderen: Turkoder (Menderes) » Logged
Sayfa: [1] Yukarı git Bu Konuyu Gönder Yazdır 
« önceki sonraki »
Gitmek istediğiniz yer:  


Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

MySQL Kullanıyor PHP Kullanıyor Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC XHTML 1.0 Uyumlu! CSS Uyumlu!
Bu Sayfa 0.033 Saniyede 19 Sorgu ile Oluşturuldu