Blob alan access Violation

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Blob alan access Violation

Mesaj gönderen Fatih! »

arkadaşlar şimdiye kadar işime yaramadığı için uğraşmadım bugün databaseye jpeg,doc vb. dosyalar eklemek için denemediğim yol kalmadı nette sürüyle makale okudum burada da bir örnek buldum. hepsi acces violation hatası verdi.
Aşağıda iki örnek var. bir kaç saat uğraştım olmadı.
yerdımlarınız için şimdden teşekkürler.

Kod: Tümünü seç

var
 fs : TFileStream;
 bs : TBlobStream;

Begin
 with IBDataSet1 do
 begin
   Append;
   fs := TFileStream.Create('D:\spman.jpg', fmOpenRead);
   Try
     bs := TBlobStream(CreateBlobStream(FieldByName('RESIM'), bmWrite));
     Try
       bs.CopyFrom(fs, 0);
     Finally
       bs.Free;
     End;
   Finally
     fs.Free;
   End;
   Post;
 end;
End;

Kod: Tümünü seç

var
  MyJpg:TJPEGImage;
  BlobField: TField;
  BS: TStream;
begin
  try
    MyJpg:=TjpegImage.Create;
    Myjpg.LoadFromFile('D:\spman.jpg');
    if not (IBDataSet1.State in [DsEdit,DsInsert]) Then
      IBDataSet1.Edit;
    BlobField := IBDataSet1.FieldByName('RESIM');
    BS :=IBDataSet1.CreateBlobStream(BlobField,bmWrite);
    MyJpg.SavetoStream(BS);
    IBDataSet1.Post;
  finally
    Myjpg.Free;
    BS.Free;
  end;
end;
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Bu mesaj işini görmesi lazım :!:

viewtopic.php?t=91&highlight=fmopenread+jpg
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

aynı hata :duvar:
metinkorkmaz
Üye
Mesajlar: 46
Kayıt: 25 May 2005 09:08
Konum: izmir

Mesaj gönderen metinkorkmaz »

Kod: Tümünü seç


var
  ms  : TmemoryStream;
  jpg : TJpegImage;

begin
  try
    jpg:=TJpegImage.Create;
    ms:=TMemoryStream.Create;

    jpg.LoadFromFile(s);
    jpg.SaveToStream(ms);

    IBTable1.Insert;
    ms.Seek(0,soFromBeginning);
    IBTable1jpegfile.LoadFromStream(ms);
    // IBTable1Jpegfile  -- blob field
    IbTable1.Post;
    ms.Clear;
  finally
    jpg.Free;
    ms.Free;
  end;
end;

Benim firebirdde resim kaydettmek için kullandigim yöntem ve işe yarıyor :)

Kod: Tümünü seç

var
  jpg:TJpegImage;
 
begin
  jpg:=TJpegImage.Create;
  try      

    jpg.LoadFromStream (IBQuery1.CreateBlobStream(IBQuery1.FieldByName('jpegfile'), bmRead));
    Image1.Picture.Graphic:=jpg;
  finally
    jpg.Free;
  end;
end;
Üstteki koduda aynı field dan jpg resmi image1 e atamak için kullanıyorum.

Dur şimdi aklıma geldi, ben bu kodu delphi nin resimleri bmp kaydetmesini önlemek için yazmıştım. Bunları kullanırsan resimlerini standart dbimage ile gösteremezsin, çünkü kayıtlar veritabanında jpg formatında tutululacaktır.
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Hocam burdada SQl le yapılmış bir yöntem belki işinize yarayabilir.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var 
ms: TMemoryStream;
begin
if OpenPictureDialog1.Execute then
begin
ms := TMemoryStream.Create;
try
ms.LoadFromFile(OpenPictureDialog1.FileName);
with Query1 do
begin
with SQL do 
begin
Clear;
Add('INSERT INTO "ImageTbl.db" (ImageFld)');
Add('VALUES (:param0 )');
end;
Query1.ParamByName('param0').SetBlobData(ms.Memory, ms.Size);
ExecSQL;
end;
finally
ms.Free;
end;
end;
end;
ama hatanız belki başka bir komuttan dolayı veriyordur.kodda ben bir tuhaflık göremedim.hatayı uygulama kapanırken mi alıyorsunuz yoksa olay gerçekleşirkenmi.kolay gelsin.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

iki gündür beni perşan eden sorumun cevabı utanç verici :oops:
nasıl olduysa blob yerine integer tipini seçmişim :)
Cevapla