Delphi5.0' da Access OLE fieldin gösterilmesi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Delphi5.0' da Access OLE fieldin gösterilmesi
Arkadaşlar Merhaba...
Access veritabınımda excel ve word documanlarını gömdüğüm bir OLE field' ım var. Delphi5.0 da hazırlayacağım bir programda bu ole field' in içeriğini nasıl gösterebilirim? mevcut componentlerin dışında başka componetlere mi ihtiyacım var?
Access veritabınımda excel ve word documanlarını gömdüğüm bir OLE field' ım var. Delphi5.0 da hazırlayacağım bir programda bu ole field' in içeriğini nasıl gösterebilirim? mevcut componentlerin dışında başka componetlere mi ihtiyacım var?
Selamlar...
- Denemedim ama yaptığım minik bir araştırma sonucu şunu buldum... Kulağa mantıklı geliyor, dilersen bir dene.
- Ref: http://www.elists.org/pipermail/delphi- ... 02594.html
- Denemedim ama yaptığım minik bir araştırma sonucu şunu buldum... Kulağa mantıklı geliyor, dilersen bir dene.
- Ref: http://www.elists.org/pipermail/delphi- ... 02594.html
Kod: Tümünü seç
var
S: TMemoryStream;
begin
S := TMemoryStream.Create;
try
tblTo.Edit;
TBlobField( tblFrom.FieldByName('Document') ).SaveToStream( S );
S.Position := 0; // <== add this line.
TBlobField( tblTo.FieldByName('Document') ).LoadFromStream( S );
tblFrom.Post;
finally
S.Free;
end;
end;
merhaba...
öncelikle ilginiz için teşekkür ederim.
bu kod anladığım kadarıyla bir tablodaki blob field' i diğer bir tabloya kopyalıyor; ancak yapmak istediğim buradaki bilgiyi form üzerinde göstermek. OleConteiner componenti yada uygun olabilecek başka bir component.
aşağıdaki kodu
şeklinde değiştirsem belki faydası olabilir. Şu anda deneme imkanım yok ama akşam eve gittiğimde ilk iş bunu denemek olacak.
öncelikle ilginiz için teşekkür ederim.
bu kod anladığım kadarıyla bir tablodaki blob field' i diğer bir tabloya kopyalıyor; ancak yapmak istediğim buradaki bilgiyi form üzerinde göstermek. OleConteiner componenti yada uygun olabilecek başka bir component.
aşağıdaki kodu
Kod: Tümünü seç
OleContainer1.LoadFromStream(S);
şeklinde değiştirsem belki faydası olabilir. Şu anda deneme imkanım yok ama akşam eve gittiğimde ilk iş bunu denemek olacak.
denedim ama yapamadım..
sonra aşağıdaki gibi birşey denedim :
orjinal dosyadan daha büyük bir dosya kaydetti. sanırım dosyanın başına fazladan 1-2 Kb' lik bir şeyler ekledi.. Orjinal dosyayı ayırmanın bir yolu var mıdır?

sonra aşağıdaki gibi birşey denedim :
Kod: Tümünü seç
tblobfield(adotable1.fields[0]).savetofile('c:\' + adotable1.Fields[1].value + '.doc' );
- Kusura bakma denemediğim için net bişi yazamıyorum... Sadece arama yapıp bulduklarımı sunabiliyorum...
- Bir forumda da şöyle geçmiş... {Noktalı} yerde ekrana yansıtma olayını gerçekleştirirsin...
ref : http://groups.google.com.tr/groups?hl=t ... 013.z2.ftn
- Bir forumda da şöyle geçmiş... {Noktalı} yerde ekrana yansıtma olayını gerçekleştirirsin...
ref : http://groups.google.com.tr/groups?hl=t ... 013.z2.ftn
Kod: Tümünü seç
var
OLE : TOLEContainer;
TBS : TADOBLOBStream;
begin
OLE:=TOLEContainer.Create(Self);
OLE.Parent:=Self;
TBS:=TADOBLOBStream.Create(TBLOBField(ADOTable1.fields[0]), bmRead);
OLE.LoadFromStream(TBS);
TBS.Free;
{...}
OLE.Free;
end;
tekrar merhaba...
bu konu çok uzadı biliyorum ama yukardaki kodlarda satırında Invalid Stream Format. hatası veriyor. Bu blob field'deki verinin gerçek dosya boyutundan daha büyük olması ile ilgili olabilir mi? Acaba verileri okurken Stream.Position değeri 0' dan büyük mü olmalı? öyle ise kaç olmalı?
bu konu çok uzadı biliyorum ama yukardaki kodlarda
Kod: Tümünü seç
OLE.LoadFromStream(TBS);
access' e kayıt manuel olarak yapıldı..
yani table view' da alandaki boş hücreye sağ tuşla tıklanıp insert object dedikten sonra CreateFromFile seçeneği ile ekledim.
dediğim gibi stream.savetofile deyip save edebiliyorum fakat kaydettiği dosya benim orjinal dosyamdan daha büyük. Access, benim dosyamın yanı sıra bu alana ilave bişeyler ekliyor olmalı. Field' a gömülü Dosyanın içeriğini Access' te problemsiz görebiliyorum.
yani table view' da alandaki boş hücreye sağ tuşla tıklanıp insert object dedikten sonra CreateFromFile seçeneği ile ekledim.
dediğim gibi stream.savetofile deyip save edebiliyorum fakat kaydettiği dosya benim orjinal dosyamdan daha büyük. Access, benim dosyamın yanı sıra bu alana ilave bişeyler ekliyor olmalı. Field' a gömülü Dosyanın içeriğini Access' te problemsiz görebiliyorum.
- O zaman bişi önericem...
- Örnek bir word / excel ne olursa bir dosya oluşturup diske kaydedin. Sonra da bunu dosya olarak aynı bildiğiniz şekilde veritabanına ekleyip, kullanacağınız zaman açın ve save to file ile kaydedin... İki dosya arasındaki binary farkı sabit ise yine delphide file operation ile bu fazlalığı ayıklayıp işe yarayan kısmı işleme koyun...
- Örnek bir word / excel ne olursa bir dosya oluşturup diske kaydedin. Sonra da bunu dosya olarak aynı bildiğiniz şekilde veritabanına ekleyip, kullanacağınız zaman açın ve save to file ile kaydedin... İki dosya arasındaki binary farkı sabit ise yine delphide file operation ile bu fazlalığı ayıklayıp işe yarayan kısmı işleme koyun...
Stream.Position değerini 0 dan başlatıp 448000 küsüre kadar arttırdım. fakat hiç birinde de olumlu sonuç alamadım..
Delphi gibi üstün bir araç ile çok basit gibi görünen bir şey neden bu kadar komplex hale geldi anlamıyorum. Çok basit bir noktayı atlıyoruz gibi bir his var içimde... Web' de de çok aradım ama Blob field'e hep resim gömülmüş. Neden kimse word/excel/PDF ..vb gömmeyi denememiş?
Delphi gibi üstün bir araç ile çok basit gibi görünen bir şey neden bu kadar komplex hale geldi anlamıyorum. Çok basit bir noktayı atlıyoruz gibi bir his var içimde... Web' de de çok aradım ama Blob field'e hep resim gömülmüş. Neden kimse word/excel/PDF ..vb gömmeyi denememiş?
Selam...
- Bugün biraz vaktim vardı senin için bir deneme yaptım... Haklıymışsın, fazlalık var ama bu fazlalık eklenti şeklinde değil tamamen format farklılığından kaynaklı...
- Dilersen aşağıda vereceğin kodu dene...
- Blob Alana XLS dosya gömme... Program dizinindeki Kitap1.XLS dosyası AdoQuery1'deki üzerinde konumlanmış kaydın "BlobVeri" ismindeki blob alana kopyalanması...
- Yukardaki şekilde Blob Alana gömülmüş XLS dosyayı HDD'ye kopyalama...
- Bu işlemin mümkün olduğu görüldüğüne göre, sorunun kaynağına gidilmiş oldu... Sorun Clipboard nesenesini dosyaymış gibi HDD'ye kaydetmekten kaynaklı...
- Sana önerim, mouse sağ clik/Nesne Ekle(InsertObject) vb. yerine ufak bir program yazıp, bu dosyaları yukardaki metodla veritabanına kaydet ki, aynı şekilde geri okuyabilesin...
- Şimdi yeni soru Clipboard formatındaki bir nesnenin dosya formatına dönüştürülmesi nasıl olur ?
- Hani daha önceki başlıklarda HDD'ye kaydettiğin veri normalden uzun diyordun ya işte onu dosyanın orjinaline nasıl dönüştüreceğini bulmak lazım... Bunu halen bilmiyorum...
- Bugün biraz vaktim vardı senin için bir deneme yaptım... Haklıymışsın, fazlalık var ama bu fazlalık eklenti şeklinde değil tamamen format farklılığından kaynaklı...
- Dilersen aşağıda vereceğin kodu dene...
- Blob Alana XLS dosya gömme... Program dizinindeki Kitap1.XLS dosyası AdoQuery1'deki üzerinde konumlanmış kaydın "BlobVeri" ismindeki blob alana kopyalanması...
Kod: Tümünü seç
AdoQuery1.Edit;
(AdoQuery1.fieldbyName('BlobVeri') as TblobField).loadfromFile(ExtractFilePath(Application.ExeName)+'Kitap1.XLS');
AdoQuery1.Post;
Kod: Tümünü seç
var
S: TMemoryStream;
begin
S := TMemoryStream.Create;
try
TBlobField( AdoQuery1.FieldByName('BlobVeri') ).SaveToStream( S );
S.Position := 0;
S.SaveToFile(ExtractFilePath(Application.ExeName)+'ExcelVerisi.XLS');
finally
S.Free;
end;
end;
- Sana önerim, mouse sağ clik/Nesne Ekle(InsertObject) vb. yerine ufak bir program yazıp, bu dosyaları yukardaki metodla veritabanına kaydet ki, aynı şekilde geri okuyabilesin...
- Şimdi yeni soru Clipboard formatındaki bir nesnenin dosya formatına dönüştürülmesi nasıl olur ?
- Hani daha önceki başlıklarda HDD'ye kaydettiğin veri normalden uzun diyordun ya işte onu dosyanın orjinaline nasıl dönüştüreceğini bulmak lazım... Bunu halen bilmiyorum...