[gelöst] TDataSet.Bookmark funktioniert nicht wie erwartet

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Benutzeravatar
KoBraSoft
Beiträge: 125
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

[gelöst] TDataSet.Bookmark funktioniert nicht wie erwartet

Beitrag von KoBraSoft »

Hallo,
Bookmark mit SQLQuery funktioniert nicht wie erwartet:
Ich hatte erwartet wenn ich zB mit

Code: Alles auswählen

B := SQLQuery1.Bookmark;  
eine Bookmark kopiere, dann das Dataset refreshe und anschließend mit

Code: Alles auswählen

SQLQuery1.Bookmark := B;
wieder setze, dass dann die Cursorposition wieder dort ist wo sie vor dem refresh war. Dem ist aber nicht so. Mache ich was falsch oder ist das ein Bug?
Zur Veranschaulichung habe ich ein Demoprojekt angehängt. Dem Demoprojekt liegt auch die Beispieldb "employee.sql" bei.

Getestet mit:
  • Lazarus 3.6 (rev lazarus_3_6) FPC 3.2.2 x86_64-linux-gtk2
  • Lazarus 4.99 (rev main_4_99-1238-gad7e912a49) FPC 3.3.1 x86_64-linux-gtk2
  • LI-V3.0.11.33637 Firebird 3.0
PS
Die Doku meint
TBookMark is the type used by the TDataset.SetBookMark method. It is an opaque type, and should not be used any more, it is superseded by the TBookmarkStr type.
ich solle also

Code: Alles auswählen

  Var
    B : TBookmarkStr; 
statt

Code: Alles auswählen

  Var
    B : TBookmark; 

verwenden was aber zur Fehlermeldung:

Code: Alles auswählen

unit1.pas(42,18) Error: Incompatible types: got "TBytes" expected "AnsiString"
führt
Dateianhänge
project1.zip
(168 KiB) 53-mal heruntergeladen
Zuletzt geändert von KoBraSoft am So 1. Jun 2025, 11:07, insgesamt 1-mal geändert.
Konrad

www.KoBraSoft.de

Sieben
Beiträge: 292
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: TDataSet.Bookmark funktioniert nicht wie erwartet

Beitrag von Sieben »

Die Bookmarks waren immer ein bestenfalls halbgares Konstrukt. Ich verwende in solchen Fällen immer und ausschließlich den Primärindex der jeweiligen Tabellen (GetFieldValues / Locate).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6848
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TDataSet.Bookmark funktioniert nicht wie erwartet

Beitrag von af0815 »

Der Bookmark ist IMHO ein Relikt der Desktop Database aka DBase und Konsorten.

Ich verwende den Bookmark bei Server Datenbanken nicht, dort macht es Sinn sich den Primärschlüssel zu merken und mit Locate dorthin zu springen.

Edith: sieben war schneller
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
KoBraSoft
Beiträge: 125
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: TDataSet.Bookmark funktioniert nicht wie erwartet

Beitrag von KoBraSoft »

Danke für den Hinweis. Mit locate funzt es.
Konrad

www.KoBraSoft.de

Antworten