Ich habe eine Komponente geschrieben, mit der ich Jpeg-Bilddateien in eine Paradox-Tabelle ablegen kann.<br>
Das klappt auch ganz gut, bis auf einen Fehler den ich nicht in den Griff bekomme:<br>
Wenn ich den Inhalt vom Blob-Feld ändere, wird auf dem Bildschirm alles korrekt angezeigt, die neuen Daten
werden aber erst gespeichert wenn ich einen neuen Datensatz im DBGrid anwähle.<br>
Verlasse ich das Programm direkt nach der Änderung, bleiben die alten Daten erhalten.<br>
Im TFieldDataLink.OnDataChange-Ereignis lese ich das Blob-Feld aus und zeige das Bild an.<br><br>
Ich bin für jeden Tipp dankbar<br>
<hr noshade size="1">So sieht alles aus:<br>
<code>
<b>Delphi 5 pro</b><br>
TTable --> TDataSource --> TDBGrid
<ul><ul><ul>|<br>
+---------> TDBJpegImage (neu!)<br></ul></ul></ul><br>
+-----------------------------------------------+<br>
| Button, der die LoadFromFile-Function aufruft |<br>
+-----------------------------------------------+<br><br>
+-----------------------------------------+<br>
| Button, der die Clear-Procedure aufruft |<br>
+-----------------------------------------+<br><br>
</code>
<b>Hier ist der Programmcode der beiden Routinen</b><br><br>
<code>
procedure TDBJpegImage.Clear;<br>
begin<br>
__if Assigned(FDataLink.Field) then begin<br>
____FDataLink.Edit;<br>
____FDataLink.Field.Clear;<br>
____FDataLink.UpdateRecord;<br>
__end;<br>
end;<br>
<br>
function TDBJpegImage.LoadFromFile(Filename: string): boolean;<br>
var<br>
__Stream: TBlobStream;<br>
__JpegBild: TJpegImage;<br>
begin<br>
__Result := false;<br>
__if FileExists(Filename) and Assigned(FDataLink.Field) then begin<br>
____JpegBild := TJpegImage.Create;<br>
____JpegBild.LoadFromFile(Filename);<br>
____FDataLink.Edit;<br>
____Stream := TBlobStream.Create(FDataLink.Field as TBlobField, bmReadWrite);<br>
____Try<br>
______JpegBild.SaveToStream(Stream);<br>
______Result := true;<br>
____finally<br>
______FDataLink.UpdateRecord;<br>
______Stream.Free;<br>
______JpegBild.Free;<br>
____end;<br>
__end;<br>
end;<br>
</code>
Das klappt auch ganz gut, bis auf einen Fehler den ich nicht in den Griff bekomme:<br>
Wenn ich den Inhalt vom Blob-Feld ändere, wird auf dem Bildschirm alles korrekt angezeigt, die neuen Daten
werden aber erst gespeichert wenn ich einen neuen Datensatz im DBGrid anwähle.<br>
Verlasse ich das Programm direkt nach der Änderung, bleiben die alten Daten erhalten.<br>
Im TFieldDataLink.OnDataChange-Ereignis lese ich das Blob-Feld aus und zeige das Bild an.<br><br>
Ich bin für jeden Tipp dankbar<br>
<hr noshade size="1">So sieht alles aus:<br>
<code>
<b>Delphi 5 pro</b><br>
TTable --> TDataSource --> TDBGrid
<ul><ul><ul>|<br>
+---------> TDBJpegImage (neu!)<br></ul></ul></ul><br>
+-----------------------------------------------+<br>
| Button, der die LoadFromFile-Function aufruft |<br>
+-----------------------------------------------+<br><br>
+-----------------------------------------+<br>
| Button, der die Clear-Procedure aufruft |<br>
+-----------------------------------------+<br><br>
</code>
<b>Hier ist der Programmcode der beiden Routinen</b><br><br>
<code>
procedure TDBJpegImage.Clear;<br>
begin<br>
__if Assigned(FDataLink.Field) then begin<br>
____FDataLink.Edit;<br>
____FDataLink.Field.Clear;<br>
____FDataLink.UpdateRecord;<br>
__end;<br>
end;<br>
<br>
function TDBJpegImage.LoadFromFile(Filename: string): boolean;<br>
var<br>
__Stream: TBlobStream;<br>
__JpegBild: TJpegImage;<br>
begin<br>
__Result := false;<br>
__if FileExists(Filename) and Assigned(FDataLink.Field) then begin<br>
____JpegBild := TJpegImage.Create;<br>
____JpegBild.LoadFromFile(Filename);<br>
____FDataLink.Edit;<br>
____Stream := TBlobStream.Create(FDataLink.Field as TBlobField, bmReadWrite);<br>
____Try<br>
______JpegBild.SaveToStream(Stream);<br>
______Result := true;<br>
____finally<br>
______FDataLink.UpdateRecord;<br>
______Stream.Free;<br>
______JpegBild.Free;<br>
____end;<br>
__end;<br>
end;<br>
</code>
Comment