Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SQL Server dan Resim Okuma
#1
Selamun Aleykum,

Merhaba arkadaşlar.

SQL servera image de ki resmimi kaydettim lakin okuyamıyorum.

https://www.youtube.com/watch?v=EaCJmcR5V_g

bu videoda ekleme ve okumayı anlatmış. Lakin benim delphide 

TBlobStreamMode = (bmRead, bmWrite, bmReadWrite);

gelmiyor.

Okuma kodu şöyle

uses DBTables;

procedure LoadPicture;
var
bs : TBlobStream;
begin
 if d.SiparisTResim.value = Nil then
    begin
       Image1.Picture.Graphic:=Nil;
    end
 else
    begin
       bs := TBlobStream(d.SiparisT.CreateBlobStream(d.SiparisTResim, bmRead));
       try 
          bs.Position :=0;
          Image1.Picture.LoadFromStream(bs);
       finally
          bs.Free;
       end;   
    end;
end;



bmRead bende çıkmıyor.

Ne yapmalıyım?
Cevapla
#2
VCL için alternatif öneri, Jedi bileşen setinde DBimage bileşeni var. Veritabanındaki jpg tipindeki resimleri doğrudan gösterebiliyor.
Cevapla
#3
(18-05-2021, Saat: 18:36)frmman Adlı Kullanıcıdan Alıntı: VCL için alternatif öneri, Jedi bileşen setinde DBimage bileşeni var.  Veritabanındaki jpg tipindeki resimleri doğrudan gösterebiliyor.

DBimage yerine Image e yüklemek istiyorum.  

Kodlarda sıkıntı yok Ama  'bmRead' parametresi gelmiyor.

Delphide bi ayarmı gerekiyor?

uses  Data.DB;


yazınca problem çözüldü.
Cevapla
#4
uses jpeg; 
...
....


Function TDataModul.JPEGSentinelsAreOK (Const Filename: TBlobField): Boolean;
Var
  FileStream: TStream;
  w1: Word; // a "word" is always 2 bytes long
  w2: Word;
Begin
  ASSERT (SizeOf (Word) = 2);
  FileStream := TBlobStream.Create (Filename, bmRead);
  Try
      FileStream.Seek (0, soFromBeginning); 
      FileStream.Read (w1, 2);
      FileStream.Position := FileStream.Size - 2;
      FileStream.Read (w2, 2)
  Finally
      FileStream.Free
  End;
  Result := (w1 = $D8FF) And (w2 = $D9FF);
End;

Procedure TDataModul.ResimOku (ResimField: TBlobField; Resim: TPicture);
Var
  jpg: TJPEGImage;
  stbmp: TStream;
  bmp: TBitmap;
  stjpg: TStream;
Begin
  If Resimfield.isnull Then
  Begin
      Resim.Assign (Nil);
      Exit;
  End;
  If JPEGSentinelsAreOK (ResimField) Then
  Begin //1
      jpg := TJPEGImage.Create;
      bmp := Tbitmap.Create;
      stjpg := TBlobStream.Create (ResimField, bmRead);
      stbmp := TMemoryStream.Create;
      jpg.LoadFromStream (stjpg);
      If Jpg.PixelFormat = jf24bit Then
          Bmp.PixelFormat := pf24bit
      Else
          Bmp.PixelFormat := pf8bit;
      Bmp.Width := Jpg.Width;
      Bmp.Height := Jpg.Height;
      Bmp.Canvas.Draw (0, 0, Jpg);
      Bmp.SaveToStream (stbmp);
      Resim.Assign (bmp);
      bmp.Free;
      jpg.Free;
      stjpg.Free;
      stbmp.Free;
  End;
End;

Datamodul onchange olayındada

Datamodul.ResimOku (Datamodul.QSorguRESIM, image1.picture);

Şeklinde kullanabilirsiniz.
Cevapla
#5
(18-05-2021, Saat: 18:47)frmman Adlı Kullanıcıdan Alıntı:
uses jpeg; 
...
....


Function TDataModul.JPEGSentinelsAreOK (Const Filename: TBlobField): Boolean;
Var
  FileStream: TStream;
  w1: Word; // a "word" is always 2 bytes long
  w2: Word;
Begin
  ASSERT (SizeOf (Word) = 2);
  FileStream := TBlobStream.Create (Filename, bmRead);
  Try
      FileStream.Seek (0, soFromBeginning); 
      FileStream.Read (w1, 2);
      FileStream.Position := FileStream.Size - 2;
      FileStream.Read (w2, 2)
  Finally
      FileStream.Free
  End;
  Result := (w1 = $D8FF) And (w2 = $D9FF);
End;

Procedure TDataModul.ResimOku (ResimField: TBlobField; Resim: TPicture);
Var
  jpg: TJPEGImage;
  stbmp: TStream;
  bmp: TBitmap;
  stjpg: TStream;
Begin
  If Resimfield.isnull Then
  Begin
      Resim.Assign (Nil);
      Exit;
  End;
  If JPEGSentinelsAreOK (ResimField) Then
  Begin //1
      jpg := TJPEGImage.Create;
      bmp := Tbitmap.Create;
      stjpg := TBlobStream.Create (ResimField, bmRead);
      stbmp := TMemoryStream.Create;
      jpg.LoadFromStream (stjpg);
      If Jpg.PixelFormat = jf24bit Then
          Bmp.PixelFormat := pf24bit
      Else
          Bmp.PixelFormat := pf8bit;
      Bmp.Width := Jpg.Width;
      Bmp.Height := Jpg.Height;
      Bmp.Canvas.Draw (0, 0, Jpg);
      Bmp.SaveToStream (stbmp);
      Resim.Assign (bmp);
      bmp.Free;
      jpg.Free;
      stjpg.Free;
      stbmp.Free;
  End;
End;

Datamodul onchange olayındada

Datamodul.ResimOku (Datamodul.QSorguRESIM, image1.picture);

Şeklinde kullanabilirsiniz.

Çok teşekkür ederim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi ile SQL server bağlantı hatası yakalama Under 20 2.049 21-11-2025, Saat: 15:24
Son Yorum: mrmarman
  TIdHTTPWebBrokerBridge ile HTTP server de response bloklanabilirmi? aegean 1 416 25-09-2025, Saat: 19:57
Son Yorum: aegean
  Online Xslt Editör | Base64 Resim Dönüştürme ahmet6513 5 1.533 08-08-2025, Saat: 12:30
Son Yorum: ahmet6513
  E fatura okuma xlm metemet 5 1.296 06-04-2025, Saat: 19:30
Son Yorum: metemet
  Rest Server Hata m_ekici 2 750 09-03-2025, Saat: 13:32
Son Yorum: m_ekici



Konuyu Okuyanlar: 1 Ziyaretçi