Einzelnen Beitrag anzeigen

SvenT

Registriert seit: 6. Aug 2003
50 Beiträge
 
Delphi 5 Enterprise
 
#1

Meldung anzeigen wenn kein Bild in DB vorhanden

  Alt 18. Aug 2003, 16:06
Hallo!

Ich greife mit Hilfe von ADO auf eine MS Access DB zu. In dieser DB sind auch Bilder abgelegt. Ich kann mir die Bilder anzeigen lassen und auch welche abspeichern. Wenn allerdings für den aktuellen Datensatz kein Bild vorhanden ist, soll eine Meldung mit dem Hinweis das kein Bild vorhanden ist herscheinen. Ich habe das Problem versucht mit den beiden unten stehenden Methoden zu lösen. Es erscheint aber eine Stream-Read-Fehlermeldung wenn kein Bild vorhanden ist. Der except-Fall wird in der Procedure also nicht durchlaufen. Hat jemand eine Idee?

Grüße Sven


Delphi-Quellcode:
procedure TForm_Hauptformular.But_Foto_anzeigenClick(Sender: TObject);
var
  bS : TADOBlobStream;
  Pic : TJpegImage;
begin
  bS := TADOBlobStream.Create(DM.Ado_T_SpielplaetzeFoto, bmRead);
  try
  try
    bS.Seek(JpegStartsInBlob(DM.Ado_T_SpielplaetzeFoto), soFromBeginning);
    Pic:=TJpegImage.Create;
    try
     Pic.LoadFromStream(bS);
     ADOImage.Picture.Graphic:=Pic;
    finally
     Pic.Free;
    end;
  finally
    bS.Free
  end;
  except
        on EStreamError do
          MessageDlg('Für diesen Datensatz ist kein Foto vorhanden!', mtInformation, [mbOK], 0);
  end;
end;

function TForm_Hauptformular.JpegStartsInBlob(PicField:TBlobField):integer;
var
 bS : TADOBlobStream;
 buffer : Word;
 hx : string;
begin
 Result := -1;
 bS := TADOBlobStream.Create(PicField, bmRead);
 try
  while (Result = -1) and
        (bS.Position + 1 < bS.Size) do
  begin
   bS.ReadBuffer(buffer, 1);
   hx:=IntToHex(buffer, 2);
    if hx = 'FFthen begin
     bS.ReadBuffer(buffer, 1);
     hx:=IntToHex(buffer, 2);
     if hx = 'D8then Result := bS.Position - 2
     else if hx = 'FFthen
         bS.Position := bS.Position-1;
    end;
   end;
 finally
   bS.Free
 end;
end;
  Mit Zitat antworten Zitat