herhangi bir dosya kayıt edip okutmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

herhangi bir dosya kayıt edip okutmak

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar,

Herhangi bir dosyayı (pdf,jpg,doc,xls) kayıt edip tekrar nasıl açabilirim ?

bir componenet olmadan.

Teşekkürler
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2358
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: herhangi bir dosya kayıt edip okutmak

Mesaj gönderen freeman35 »

TStream leri inceleyebilirsin
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: herhangi bir dosya kayıt edip okutmak

Mesaj gönderen erdogan_ozkaya »

Hocam,

bir çok örnek var ama hepsi jpg veya pdf benim istediğim herhangi bir dosya olabilir.

Teşekkürler
Ahmetbi
Üye
Mesajlar: 5
Kayıt: 07 Mar 2017 11:28

Re: herhangi bir dosya kayıt edip okutmak

Mesaj gönderen Ahmetbi »

dataya binary olarak kaydedip ayrı bir alanda dosya adı ve/veya uzantısı tutarsan gerektiğinde uzantıya göre açabilirsin
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: herhangi bir dosya kayıt edip okutmak

Mesaj gönderen erdogan_ozkaya »

Anlayamadım ya ? bir kaç örnek buldum ama bir türlü çözemedim herhangi bir format olabilir


kayıt için

Kod: Tümünü seç

procedure TForm1.btn1Click(Sender: TObject);
var
   fs: TFileStream;
   BlobField: TBlobField;
begin
  fs := TFileStream.Create(dlgOpenDOSYA_AC.FileName, fmOpenRead);
   BlobField := QRY_1.FieldByName('DOSYA') AS TBlobField;
try
  QRY_1.Insert;
  BlobField.LoadFromStream(fs);
  QRY_1.Post;
finally
  fs.Free;
end;
Ahmetbi
Üye
Mesajlar: 5
Kayıt: 07 Mar 2017 11:28

Re: herhangi bir dosya kayıt edip okutmak

Mesaj gönderen Ahmetbi »

bulduğun örnek olayı açık açık anlatıyor zaten.
Formuna bir tane tOpenDialog koy. Adını dlgOpenDOSYA_AC yap.
Tablonda Blob tipinde DOSYA diye bir alan aç.
Query içeriğinde bu tabloyu çek.
Sonra aşağıdaki kod ile istediğin dosyayı kaydedebilirsin.
Okurkende LoadFromStream yerine SaveToStream yaparsın. Sonrada fs.SaveToFile yaparsın olur biter.

Kod: Tümünü seç

procedure TForm1.btn1Click(Sender: TObject);
var
   fs: TFileStream;
   BlobField: TBlobField;
begin
  if (dlgOpenDOSYA_AC.Execute) and (dlgOpenDOSYA_AC.FileName<>'') then begin
    fs := TFileStream.Create(dlgOpenDOSYA_AC.FileName, fmOpenRead);
    BlobField := QRY_1.FieldByName('DOSYA') AS TBlobField;
    try
      QRY_1.Insert;
      BlobField.LoadFromStream(fs);
      QRY_1.Post;
    finally
      fs.Free;
    end;
  end;
end;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: herhangi bir dosya kayıt edip okutmak

Mesaj gönderen erdogan_ozkaya »

kaydediyor ama resim olarak açıyor sadece,

ben istiyorumki eğer office dosyası ise office ile, pdf ise acrobat ile açsın yani sql kaydedeyim açarken temp alsın ordan açsın


bu şekilde kayıt yapıyor

Kod: Tümünü seç

procedure TForm1.btn1Click(Sender: TObject);
var
   fs: TFileStream;
   BlobField: TBlobField;
begin
  fs := TFileStream.Create(dlgOpenDOSYA_AC.FileName, fmOpenRead);
   BlobField := QRY_1.FieldByName('DOSYA') AS TBlobField;
try
  QRY_1.Insert;
  BlobField.LoadFromStream(fs);
  QRY_1.Post;
finally
  fs.Free;
end;

end;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: herhangi bir dosya kayıt edip okutmak

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar Dosya.doc yazan yere QRY_1ACIKLAMA.Text yazınca hata veriyor nasıl yapabilirim ?

Kod: Tümünü seç

procedure TForm1.btn3Click(Sender: TObject);

var
Dosya:TMemoryStream;
begin
Dosya:= Tmemorystream.Create;
TBlobField(QRY_1.FieldByName('DOSYA')).SaveToStream(Dosya);
Dosya.Position:=0;
Dosya.SaveToFile(QRY_1ACIKLAMA.Text);
ShellExecute(Handle, 'open','dosya.doc',nil,nil,SW_SHOWNORMAL);
Dosya.Free;
end;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: herhangi bir dosya kayıt edip okutmak

Mesaj gönderen erdogan_ozkaya »

işine yarayan arkadaş olabilir aşağıdaki gibi tüm dosya türlerini kaydedip açabiliyorum.

Kod: Tümünü seç

procedure TForm1.btn1Click(Sender: TObject);
var
   fs: TFileStream;
   BlobField: TBlobField;
begin
  fs := TFileStream.Create(dlgOpenDOSYA_AC.FileName, fmOpenRead);
   BlobField := QRY_1.FieldByName('DOSYA') AS TBlobField;
try
  QRY_1.Insert;
  BlobField.LoadFromStream(fs);
  QRY_1ACIKLAMA.AsString:=ExtractFileName(dlgOpenDOSYA_AC.FileName);
  QRY_1.Post;
finally
  fs.Free;
end;

end;

procedure TForm1.btn2Click(Sender: TObject);
begin
  dlgOpenDOSYA_AC.Execute;
  if dlgOpenDOSYA_AC.FileName <> '' then begin
     Caption:= dlgOpenDOSYA_AC.FileName;
  end;
end;

procedure TForm1.btn3Click(Sender: TObject);
var
Dosya:TMemoryStream;
begin
Dosya:= Tmemorystream.Create;
TBlobField(QRY_1.FieldByName('DOSYA')).SaveToStream(Dosya);
Dosya.Position:=0;
Dosya.SaveToFile(QRY_1ACIKLAMA.Text);
//ShellExecute(Handle, 'open','dosya.doc',nil,nil,SW_SHOWNORMAL);
  ShellExecute(handle, 'OPEN', pchar(QRY_1ACIKLAMA.AsString), nil, nil, sw_Show);
Dosya.Free;
end;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: herhangi bir dosya kayıt edip okutmak

Mesaj gönderen erdogan_ozkaya »

Atladığım bir konu,


dosyayı farklı nasıl kayıt yapabilirim ?

Kod: Tümünü seç

procedure TForm1.btn4Click(Sender: TObject);

begin  if dlgSaveDOSYA_KAYDET.Execute then
  begin
   with dlgSaveDOSYA_KAYDET do
   begin
     FileName:=QRY_1DOSYA.Value;
     if Execute then
     QRY_1DOSYA.SaveToFile(FileName);
   end;
end;
end;
teşekkürler
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: herhangi bir dosya kayıt edip okutmak

Mesaj gönderen erdogan_ozkaya »

:))

procedure TForm1.btn4Click(Sender: TObject);

begin
if dlgSaveDOSYA_KAYDET.Execute
then TBlobField( QRY_1.FieldByName('DOSYA')).SaveToFile(dlgSaveDOSYA_KAYDET.FIleName);
end;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: herhangi bir dosya kayıt edip okutmak

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar aşağıdaki kod ile kayıt ediyorum fakat savedialogda dosya adı çıkmadığı için uzantıda kaydedemiyorum ?

savedialog filenamede adı çıkmalı nasıl yapabilirim ?

teşekkürler

Kod: Tümünü seç

procedure TForm1.btn5Click(Sender: TObject);
var
 BlobStream: TStream;
 FileStream: TStream;
begin
 if QRY_1.Active and dlgSaveDOSYA_KAYDET.Execute then
    begin
       BlobStream := QRY_1.CreateBlobStream(QRY_1.FieldByName('DOSYA'), bmRead);
       try
          FileStream := TFileStream.Create(dlgSaveDOSYA_KAYDET.FileName, fmCreate);
           dlgSaveDOSYA_KAYDET.FileName:=QRY_1DOSYA_ADI.Text;
          try
             FileStream.CopyFrom(BlobStream, BlobStream.Size);
          finally
             FileStream.Free;
          end;
       finally
          BlobStream.Free;
       end;
    end;

end;
Cevapla