Veritabanına dosya kaydetme..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Veritabanına dosya kaydetme..

Mesaj gönderen vipaydin »

Merhaba arkadaşlar.
Valla forumda birçok bölüme göz attım ve çözemedim.
MSSQL 2000 ve ADO nesnelerini kullanıyorum.
Müşterilerimizden gelen dosyaları sql veritabanına kaydetmek istiyoruz. Dosyanın hangi tip olduğu önemli değil. Pdf, xls, doc, txt vs.
Gelen dosyalar küçük ebatlı dosyalar olacağı için veritabanında saklamak daha mantıklı gözüküyor.
FileStream ve Ado kullanarak dosyanın veritabanına kaydedilmesi ve kaydedilmiş dosyanın tekrar kendi bilgisayarımıza download edilmesi için örnek kod verebilirseniz çok memnun olurum.

Her müşteriye ait birden çok dosya yüklemeyi planlıyoruz. Dosyaları ayrı bir table ve müşteri referansıyla saklayacağım. Gerektiğinde de oradan kendi bilgisayarımız aracılığı ile tekrar okuyacağım.

Teşekkür ederim, iyi çalışmalar.
iumit
Üye
Mesajlar: 1
Kayıt: 02 Oca 2008 08:34
Konum: ankara

Mesaj gönderen iumit »

merhaba;
veritabınında dosya kaydedecegin alanın image türünde olmalı.
aşagıdaki örnek kod veritabanına kaydetmeyi gösteriyor.

Kod: Tümünü seç

var
s:string;

begin
s:=AdvFileNameEdit1.Text;

 d.adotable19.Edit;
 if s<>'' then
                    begin
(d.Adotable24.fieldbyName('dosya') as TblobField).loadfromFile(s);
                end;
d.Adotable24.Post;

bu kodlada veritabanına kayıtettigin dosyayı çekebilirsin.

Kod: Tümünü seç


if   sSaveDialog1.Execute
then begin

(d.Adotable24.fieldbyName('dosya') as TblobField).SaveToFile(sSaveDialog1.FileName);
end;
end;
Kolay gelsin.
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Mesaj gönderen vipaydin »

Pardon. Veritabanındaki alan image mi olacak yoksa binary mi?
Kullanıcı avatarı
odemir01
Üye
Mesajlar: 31
Kayıt: 01 Eki 2007 10:37
Konum: Adana

Mesaj gönderen odemir01 »

hocam image olması gerekiyor. bende benzer bi çalışma yaptım. en iyi şekilde image iş görüyor
Varsa Yoksa Delphi
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Mesaj gönderen vipaydin »

Peki hocam, aşağıdaki kodlara bakar mısın? Kaydetme de sorun yok fakat geri yükleme de Cannot create 'dosya ismi'. Erişim engellendi. hatası alıyorum.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
blobalan:TADOBlobStream;

begin

AdoQuery1.Edit;
blobalan:=TADOBlobStream.Create(TBlobField(AdoQuery1.FieldByName('FILE')),bmwrite);
blobalan.LoadFromFile('C:\abc.pdf');
blobalan.Position:=0;
TBlobField(AdoQuery1.FieldByName('FILE')).LoadFromStream(blobalan);
AdoQuery1.Post;  
Dosyayı bu şekilde gönderiyorum ve herhangi bir hata almıyorum. Zannediyorum ki kayıt işleminde problem yok.

Dosyayı geri çekerken ise;

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var 
okumablob:TAdoBlobStream;

begin
okumablob:=TADOBlobStream.Create((AdoQuery1.FieldByName('FILE') as TBlobField), bmRead);
okumablob.SaveToFile('C:\abc.pdf');
okumablob.Free;
Bu işlemden sonra Cannot create abc.pdf. Erişim engellendi hatası alıyorum.

Hatayı nerede yapıyorum peki?

Tşk.ederim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Veritabanına dosya kaydetme..

Mesaj gönderen aslangeri »

s.a.
c sürücüsünde yazma izniniz olmayabilir. veya c:}abc.pdf dosyası var ve açık olduğu için yazmanıza izin vermiyor.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Re: Veritabanına dosya kaydetme..

Mesaj gönderen vipaydin »

a.s

Valla hocam hayret bir şey. Hiç aklıma yazma izni gelmedi. Bir de çalışmayı Vista üzerinde yaptığım için bu problem oluyormuş. Projeyi derleyip exe haline getirdim. Yönetici olarak çalıştır dediğimde tık diye dosya almayı yaptı.

Çok teşekkür ederim ilginiz için.
Cevapla