interbase'e jpeg kaydetme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

interbase'e jpeg kaydetme

Mesaj gönderen true_false »

merhabalar
forumda @microchip bu konuyla ilgili bir yazısı vardı ama ib ile ilgili değildi araştırmalarım ve bu ana kadar yaptıklarımla bir noktada takıldım
resim kaydetmek istediğim alanın tipini blob verdim binary olarak tanımladım işin delphi kısmıda

Kod: Tümünü seç

 jpgresim: Tjpegimage;
         hafiza: TMemoryStream;

Kod: Tümünü seç

    if not IBQuery1.Active then
   IBQuery1.Open;
   IBQuery1.Append;
   jpgresim := TJPEGImage.Create;
   jpgresim.Assign(Image1.Picture.Bitmap);
   hafiza := TMemoryStream.Create;
   jpgresim.SaveToStream(hafiza);
   IBQuery1RESIM.SaveToStream(hafiza);
   IBQuery1RESIM_AD.AsString := OpenDialog1.FileName;
   IBQuery1.Post;
   IBQuery1.Transaction.CommitRetaining;
kodlarda herhangi bir hata almıyorum ama databasede resimleri göremiyorum kolaygelsin
type
Tform1 = class(Tform)
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Kod: Tümünü seç

    if not IBQuery1.Active then
   IBQuery1.Open;
   IBQuery1.Append;
   jpgresim := TJPEGImage.Create;
   jpgresim.Assign(Image1.Picture.Bitmap);
   hafiza := TMemoryStream.Create;
   jpgresim.SaveToStream(hafiza);
   hafiza.Position := 0;//Bunu ekleyip dene
   IBQuery1RESIM.SaveToStream(hafiza);
   IBQuery1RESIM_AD.AsString := OpenDialog1.FileName;
   IBQuery1.Post;
   IBQuery1.Transaction.CommitRetaining;
Kolay gele
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 !!!
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Mesaj gönderen true_false »

@freeman35 gönderdiğiniz şekilde değişiklik yaptım malesef aynı durum söz konusu
interbase'de blob alnın subtype'ını -1 yapıldığı zaman bmp
-2 yapıldığı zaman ise jpeg türü dosyların yazıldığını okumuştum ben ilk önce bmp kaydedebilmek için -1 yapmıştım ama tüm denemelerim sonuçsuz kaldı datadan baktığımda malesef boş görünüyor yardımlarınız için teşekkürler.
type
Tform1 = class(Tform)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam...

- Şöyle bir durum var. SaveToStream yapıldığında -bildiğim kadarıyla- içerisinde resim mi var, döküman mı yoksa exe mi, ne varsa bakılmaksızın kaydedilir. SubType vs. diye bir durum söz konusu değil.

- Düşüncem doğrultusunda, Stream elde edemiyorsunuz veya -bunu da bilmiyorum- Blob alanı cidden özel bir alan tipi olarak tanımladınız ve Stream kaydını engelliyor şeklinde yorum yapabilirim.

// Edit - Ekleme //

Örnek koymayı unutmuşum...

Normal bir veritabanı kaydında Blob alana veri kaydederken aşağıdaki metodu uyguluyorum...

Kod: Tümünü seç

(fieldbyName('BlobAlan') as TBlobField).LoadFromFile( DosyaAdi ) 
- Bu şekilde bir modifikasyon yapın ne olacak denemiş olalım...
En son mrmarman tarafından 26 Ara 2005 11:48 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Mesaj gönderen true_false »

CREATE TABLE IMAGE_DATA
(
FILENAME CHAR(12) NOT NULL PRIMARY KEY,
BMP BLOB SUB_TYPE -1,
JPEG BLOB SUB_TYPE -2
);
hocam bu bilgiye bu adresten ulaştım kodda hata döndürmemesi ve resminde blob alanın asPicture bölümünde gözükmemesi acaba database'de bi yanlışlıkmı yapıyorum sorusuna yöneltti ama malesef başarısız oldum ilginiz için teşekkür ederim
type
Tform1 = class(Tform)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Tekrar selam..

- Mesajımı edit ettikten sonra görmemiş olabilirsiniz önceki mesajıma bir göz atıp denemenizi isterdim...

- Verdiğiniz adreste bir konuyu atlamışsınız...
InterBase, Firebird and Blobs yazdı:As well as the predefined blob field sub-types, you can define your own sub-types. User-defined sub-types are designated by a negative integer value in association with the sub-type keyword. The actual integer value, that you use, is entirely arbitrary. But it should be negative e.g. use sub-type -1 to sub-type -32,678.
diyor ki tahmin ettiğim şekilde sadece sizin kod içerisinde karşılaştırma adına belirleyeceğiniz bir tip belirleme söz konusu. Kullanıcı tanımlı olması yani...

- Verdiğiniz adresten ben olsam bu durumda 8 numaralı Type'ı seçerdim. Tabii formunuzda bir TDBImage yoksa, yani veritabanından direkt resmi yansıtmıyorsanız.

- Çünkü SubType belirtmenin bence gereği, böyle sizin dışınızdaki aktarımlarda belirelyici unsur olmasından kaynaklı.

- Forma bir Image nesnesi koyar da AfterScrool olayında veya kendi belirleyeceğiniz bir event durumunda minik bir fonksiyon ile LoadFromStream ile alıp yine aynı metodla TIMage nesnesine aktarmayı uygun bulursanız böyle bir yöntem de var olduğunu bilin istedim.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

-- Yeni farkettim.. Verdiğin adresin en altında şunu yazıyor..
sayfanın en altında Delphi and C++Builder yazdı: When defining TField objects for Firebird blob fields in Delphi or C++Builder, the various blob field sub-types are assigned TField derivative types as follows:

Sub-type 0: TBlobField
Sub-type 1: TMemoField
User-defined: TBlobField
Yani Resim, diğer dosyalar gibi binary veri kaydedeceksen SubType olarak -tabi hala gerekli olup olmadığı konsunda emin olmamakla birlikte- 0 kullanacaksın.
Resim
Resim ....Resim
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Mesaj gönderen true_false »

hocam mantık olarak bi problem kalmadı yazılarınızdan anladığım konu resim kaydetmede subtype bizim için önemli değil eğer blob alanın tipini binary olarak tanımlasak herhangi bir sorun çıkmaz (benim işime yarayan özeti bu) fakat daha önce database'e resim kaydetmedim ve forumdaki arkadaşlarda resimlerimi yoksa pathlerimi datada tutma açısından ikilemde kalmışlar. ve açıkçası bunun arasında gidip geldim bana söylediğiniz şekilde kodları sadeleştirdim ama bir türlü resimleri datada göremiyorum

Kod: Tümünü seç

if OpenDialog1.Execute then
   begin
     if not IBQuery1.Active then
   IBQuery1.Open;
     with IBQuery1 do
     begin
     Append;
     //jpgresim := TJPEGImage.Create;
     //jpgresim.Assign(Image1.Picture.Bitmap);
    // hafiza := TMemoryStream.Create;
   //  jpgresim.SaveToStream(hafiza);
    // hafiza.Position := 0;
     (FieldByName('RESIM') as TBlobField).LoadFromFile(OpenDialog1.FileName);
     FieldByName('RESIM_ADI').AsString := OpenDialog1.FileName;
     post;
     Transaction.CommitRetaining;
     end;
   end;
burda yanlışım var bana bu konuda yardımcı olursanız sevinirim kolay gelsin iyi çalışmalar.
type
Tform1 = class(Tform)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Data'da resmi göremiyorum demekle nasıl acaba, Data'ya nasıl bakıyorsunuz. Bir Hex editör ile mi.

- Aşağıdaki şekilde kayıttan geri okumayı deneyin...

Kod: Tümünü seç

var
   S: TMemoryStream;
begin
   S := TMemoryStream.Create;
   try
      TBlobField( IBQuery1.FieldByName('BlobVeri') ).SaveToStream( S );
      S.Position := 0;
      S.SaveToFile(ExtractFilePath(Application.ExeName)+'DosyaAdi.BMP');
   finally
      S.Free;
   end;
end;
Resim
Resim ....Resim
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Mesaj gönderen true_false »

dataya ibexpert ile bakıyorum vakit azlığından dolayı artık pathleri tutuyorum fakat hafta sonu bu konu ile ilgilenicem vakit ayırdığınız için teşekkür ederim
type
Tform1 = class(Tform)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Umarım istediğiniz sonuca ulaşırsınız.. Değerlendirmem o ki ulaşacaksınız...
Resim
Resim ....Resim
Cevapla