Announcement

Collapse
No announcement yet.

Wert von "old_xxx" in TIBDataset

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

  • Wert von "old_xxx" in TIBDataset

    Hallo,

    verwende Delphi 5, IBX 5.03 und TIBDataset. Für ein Update-Event würde ich jetzt den alten Wert eines Feldes benötigen. Und wenn ich mir mit dem Dataset-Editor in TIBDAtaset die generierten SQL-Statements anschaue, kommt dort immer sowas wie "update ..... where XXX = :OLD_XXX" vor. Wie kann ich in Delphi auf diesen alten Wert zugreifen?

    Danke im voraus,
    Helmut

  • #2
    Hallo,

    das folgende Beispiel aus meinem Buch <i>InterBase Datenbankentwicklung mit Delphi</i> demonstriert den Zugriff auf diese Informationen. Die TField-Instanzen für die Spalten der Tabelle stellen die Eigenschaften <b>OldValue</b>, <b>NewValue</b> und <b>Value</b> zur Verfügung, um alle 3 Zustände abrufen zu können. Wie in der Hilfe vermerkt ist, stehen die Daten nur im Cached Update-Modus zur Verfügung. Ich greife dazu auf die <b>OnUpdateRecord</b>-Ereignisbehandlungsmethode als Alternative zu einer TUpdateSQL-Komponente zurück:
    <pre>
    procedure TDataModule2.IBDataSet2UpdateRecord(DataSet: TDataSet;
    UpdateKind: TUpdateKind; var UpdateAction: TIBUpdateAction);
    begin
    if UpdateKind = ukDelete then
    begin
    IBStoredProcDELETE.Params[0].Value := IBDataSet2ID.OldValue;
    IBStoredProcDELETE.ExecProc;
    end;
    if UpdateKind = ukInsert then
    begin
    IBStoredProcINSERT.Params[1].Value := IBDataSet2LAND.Value;
    IBStoredProcINSERT.Params[2].Value := IBDataSet2HAUPTSTADT.Value;
    IBStoredProcINSERT.ExecProc;
    if GetGeneratorID then
    begin
    FID := IBStoredProcINSERT.Params[0].Value;
    ShowMessage('Neue ID:' + IntToStr(FID));
    // Vom Generator vergebenen Primärschlüsselwert einsetzen
    IBDataSet2ID.NewValue := FID;
    end;
    end;
    if UpdateKind = ukModify then
    begin
    IBStoredProcUPDATE.Params[1].Value := IBDataSet2LAND.NewValue;
    IBStoredProcUPDATE.Params[2].Value := IBDataSet2HAUPTSTADT.NewValue;
    IBStoredProcUPDATE.ExecProc;
    end;
    UpdateAction := uaApplied;
    end;
    </pre&gt

    Comment


    • #3
      Danke, Herr Kosch!

      Ich habe Ihr Buch ja auch vor mir liegen, dass ist mir aber glatt entgangen. Manchmal sieht man den Wald vor lauter Bäumen nicht.

      Anmerken möchte ich aber noch, dass ich keine Cached Updates benutze, die Werte bei Verwendung von IBX aber trotzdem vorhanden sind (war ein Hinweis von Jeff Overcash, mit dem ich auch geredet habe).
      Ansonsten noch ein großes Lob für Ihr Buch, hat mich schon vor einigen Fallen (zB. Transaktion-Bugs) bewahrt!

      mit freundlichen Grüßen,
      Helmut Wös

      Comment

      Working...
      X