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.
Veritabanına dosya kaydetme..
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
merhaba;
veritabınında dosya kaydedecegin alanın image türünde olmalı.
aşagıdaki örnek kod veritabanına kaydetmeyi gösteriyor.
bu kodlada veritabanına kayıtettigin dosyayı çekebilirsin.
Kolay gelsin.
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;
Kod: Tümünü seç
if sSaveDialog1.Execute
then begin
(d.Adotable24.fieldbyName('dosya') as TblobField).SaveToFile(sSaveDialog1.FileName);
end;
end;
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.
Dosyayı bu şekilde gönderiyorum ve herhangi bir hata almıyorum. Zannediyorum ki kayıt işleminde problem yok.
Dosyayı geri çekerken ise;
Bu işlemden sonra Cannot create abc.pdf. Erişim engellendi hatası alıyorum.
Hatayı nerede yapıyorum peki?
Tşk.ederim
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ı 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;
Hatayı nerede yapıyorum peki?
Tşk.ederim
Re: Veritabanına dosya kaydetme..
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.
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
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: Veritabanına dosya kaydetme..
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.
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.