Aktuellen Datensatz ermitteln

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Aktuellen Datensatz ermitteln

Beitrag von DL3AD »

Hallo,

ich stehe auf dem schlauch :shock:
Mit einer ZQuery kann ich mit .First den ersten Datensatz greifen, mit .Last den letzten - aber wie kann ich den aktuellen Datensatz ermitteln ?

Gruß Frank

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Aktuellen Datensatz ermitteln

Beitrag von wp_xyz »

Alles das, was du per ZQuery.FieldByName(..) etc. abrufst, bezieht sich auf den aktuellen Datensatz.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Aktuellen Datensatz ermitteln

Beitrag von DL3AD »

... ja dass ist klar.
In einem DBGrid habe ich eine Datensatz ausgewählt - der ist nun der aktuelle.
Nun ändere ich in einer Eingabemaske die Daten. vor dem schreiben in die DB prüfe ich mit einer DB Abfrage ob die Daten dann doppelt sein würden.
Bei der Abfrage verliere ich dann den aktuellen Datensatz den ich zuvor zum Editieren gewählt hatte.

Wie kann ich mir den zuvor ausgewählten Datensatz merken um ihn dann wieder anzusteuern ?

Gruß Frank

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: Aktuellen Datensatz ermitteln

Beitrag von gladio »

meinst du vielleicht sowas

Code: Alles auswählen

procedure ....;
var PrevRecord: TBookmark;
begin
  PrevRecord:=ZQueryX.GetBookmark;
  try
     mach irgendwas
  finally
     if PrevRecord <> nil then
    begin
      ZQueryX.GotoBookmark(PrevRecord);
      ZQueryX.FreeBookmark(PrevRecord);
    end;
  end;
end;

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: Aktuellen Datensatz ermitteln

Beitrag von gladio »

Du kannst auch einfach den Primärkey des aktuelle Datensatzes in eine Variable schreiben,
irgndwas machen und den Datensatz danach mit Locate und der Variablen wieder aufrufen.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Aktuellen Datensatz ermitteln

Beitrag von wp_xyz »

DL3AD hat geschrieben:... ja dass ist klar.
In einem DBGrid habe ich eine Datensatz ausgewählt - der ist nun der aktuelle.
Nun ändere ich in einer Eingabemaske die Daten. vor dem schreiben in die DB prüfe ich mit einer DB Abfrage ob die Daten dann doppelt sein würden.
Bei der Abfrage verliere ich dann den aktuellen Datensatz den ich zuvor zum Editieren gewählt hatte.

Dann nimm halt für die Prüfung nicht dieselbe Query. Evtl gibt es bei ZEOS auch ein Dataset.Clone, durch das man sich einen zweiten unabhängigen Cursor erzeugen kann. Oder erzeuge dir eine zweite ZQuery mit demselben SQL-Text (oder besser: nur mit den Feldern, die du prüfen willst), führst diese im OnBeforePost der Query aus, die editiert wird, und falls die Suchquery den geänderten Datensatz schon findest, brichst du das Speichern mit Abort ab.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Aktuellen Datensatz ermitteln

Beitrag von DL3AD »

... Ich Danke euch beiden.
Die Idee mit einer zweiten Query hatte ich auch - habe es nun auch so gemacht - damit ist alles sauber getrennt und es funktioniert 8)

Antworten