Announcement

Collapse
No announcement yet.

neue Daten sofort speichern (File in Blob-Feld)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • neue Daten sofort speichern (File in Blob-Feld)

    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>

  • #2
    Hallo,

    die Datenmenge wird über <b>Edit</b> in den Editiermodus geschaltet, bevor die BLOb-Daten an die TField-Instanz übergeben werden. Was fehlt, ist der <b>Post</b>-Aufruf. Der <b>UpdateRecord</b>-Aufruf sorgt nur dafür, dass die VCL intern synchronisiert, schreibt die Daten jedoch nicht zurück zur Datenbank.

    P.S: Beim Wechsel zu einem anderen Datensatz macht die VCL implizit einen Post-Aufruf, so dass die Daten gespeichert werden.

    Comment


    • #3
      Hallo,<br>
      das Post alleine speichert noch keine Daten bei Paradox Tabellen.<br>
      Um die Daten richtig auf die Platte zu schreiben sollte in der<br>
      AfterPost Routine die funktion dbiSaveChanges aufgerufen werden.<br>
      Damit werden die daten physikalisch auf die Platte geschrieben,<br>
      ansonsten erst beim beenden des Programmes.<br>
      mfg
      Matthia

      Comment


      • #4
        Hi!
        Hey hagi, ich brauche ganeu soeine Komponente!!!
        Vieleicht kannst du mir mal ne Mail schreiben, wenn du sie fertig hast!!
        Ich würd mich echt riisig freuen!
        Dadurch würde wohl vieles leichter!
        Bis dann und viel erfolg noch...

        Gruß,
        Stanl

        Comment

        Working...
        X