Veri Tabanına Dosya eklemek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Efe
Üye
Mesajlar: 56
Kayıt: 09 Kas 2014 11:14

Veri Tabanına Dosya eklemek

Mesaj gönderen Efe »

Merhaba

veri tabanına dosya eklemek istiyorum pdf, jpg, docx...

aşşağıdaki kodla yapmaya çalıştım ama blob alan boş kalıyor, veri eklenmiyor. MSSql, firedac kullanıyorum.
Veri tabanına dosya nasıl ekleyebilirim...

Kod: Tümünü seç

procedure TFrmNewService.ActAddAFileToDBExecute(Sender: TObject);
var
 FStream: TFileStream;
 BlobStream: TStream;
begin

  if ODialog.Execute then
  begin
    DMFiles.FTFiles.Edit;

    try
      BlobStream:=DMFiles.FTFiles.CreateBlobStream(DMFiles.FTFiles.FieldByName('BinaryFile'), bmWrite);
      FStream:=TFileStream.Create(ODialog.FileName, fmOpenRead or fmShareDenyNone);
      BlobStream.Seek(0, soFromBeginning);
      BlobStream.CopyFrom(FStream, FStream.Size);
      try
        DMFiles.FTFilesMusteriId.Value:=1;
        DMFiles.FTFilesServisId.Value:=1;
        DMFiles.FTFilesBinaryFile.LoadFromStream(BlobStream);
        DMFiles.FTFilesExtention.Value:='.jpg';
        DMFiles.FTFilesFileSize.Value:=123.34;
        DMFiles.FTFilesFileDescription.Value:='açıklama';
        DMFiles.FTFilesFileName.Value:=ODialog.FileName;
        DMFiles.FTFiles.Post;
      except
        DMFiles.FTFiles.Cancel;
      end;
    finally
      FreeAndNil(FStream);
      FreeAndNil(BlobStream);
    end;


  end;

end;
Kullanıcı avatarı
mustafasoy
Üye
Mesajlar: 154
Kayıt: 02 Ağu 2013 05:00
Konum: istanbul
İletişim:

Re: Veri Tabanına Dosya eklemek

Mesaj gönderen mustafasoy »

mssql olarak bir örnek hazırladım ,aşağıdaki gibi bir tablonuz olsun

Kod: Tümünü seç

CREATE TABLE documanx(
	id int IDENTITY(1,1) NOT NULL,
	documan image NULL)
delphi tarafında ise aşağıdakileri uygularsanız ihtiyacınızı karşılayacaktır.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
mem : TMemoryStream;
ds:TADODataSet;
begin
mem := TMemoryStream.Create;
ds:=TADODataSet.Create(self);
ds.Connection:=ADOConnection1;
ds.CommandText:='select top 0 * from documanx;
ds.Open;
try
if OpenDialog1.Execute then
begin
mem.LoadFromFile(OpenDialog1.FileName);
mem.Position := 0;
end
else
begin
exit;
end;
ds.Append;
TBlobField(ds.FieldByName('documan')).LoadFromStream(mem);
ds.Post;
finally
mem.Free;
ds.destroy;
end;
end;
http://www.mustafasoy.com.tr
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Efe
Üye
Mesajlar: 56
Kayıt: 09 Kas 2014 11:14

Re: Veri Tabanına Dosya eklemek

Mesaj gönderen Efe »

Cevabınız için teşekkürler.

Aslında ilk başta benim yazdığım kod çalışıyormuş :idea:

MSSQL tablodaki alanda data görünmeyince ben veri kaydetmiyor zannettim.
Dosyayı veri tabanından masa üstüne kaydedince bide ne göriim, veri tabanından dosya gelmiş :bravo:

Aşşağıdaki kod ile veri tabanına kaydet, veri tabanından tekrar dosyayı çıkart kodu sorunsuz çalışıyor.

Kod: Tümünü seç

procedure TForm1.LoadToBlob(FileName: String);
var
  FileStream: TFileStream;
  BlobStream: TStream;
begin
  QueryX.Edit;
  try
    BlobStream := QueryX.CreateBlobStream(Query.FieldByName('<YourBlobFieldNameHere>'), bmWrite);
    try
      FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
      try
        BlobStream.CopyFrom(FileStream, FileStream.Size);
      finally
        FileStream.Free;
      end;
    finally
       BlobStream.Free;
    end;
    QueryX.Post;
  except
    QueryX.Cancel;
  end;
end;

BLOB alandan oku:

procedure TForm1.SaveBlobField(FileName: String);
var
  FileStream: TFileStream;
  BlobStream: TStream;
begin
  FileStream := TFileStream.Create(FileName, fmCreate);
  try
    BlobStream := QueryX.CreateBlobStream(QueryX.FieldByName('<YourBlobFieldNameHere>'), bmRead);
    try
      FileStream.CopyFrom(BlobStream,BlobStream.Size);
    finally
      BlobStream.Free;
    end;
  finally
    FileStream.Free;
  end;
end;

Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: Veri Tabanına Dosya eklemek

Mesaj gönderen softdestek »

MS SQL de file streaming özelliği var ..Eğer bu özelliği kullanırsan veritabanın içine dosya ekleme derdin kalmaz..Dosya sistemini bizzat veritabanı gibi kullanırsın...

Birde bence bu özelliği dene

Aşağıda örnek var..

http://www.codeproject.com/Articles/128 ... ile-Stream

http://www.databasejournal.com/features ... r-2012.html
Efe
Üye
Mesajlar: 56
Kayıt: 09 Kas 2014 11:14

Re: Veri Tabanına Dosya eklemek

Mesaj gönderen Efe »

softdestek yazdı:MS SQL de file streaming özelliği var ..Eğer bu özelliği kullanırsan veritabanın içine dosya ekleme derdin kalmaz..Dosya sistemini bizzat veritabanı gibi kullanırsın...

Birde bence bu özelliği dene

Aşağıda örnek var..

http://www.codeproject.com/Articles/128 ... ile-Stream

http://www.databasejournal.com/features ... r-2012.html

İnceliyorum, teşekkürler.
Cevapla