[gelöst] Scroll abbrechen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

[gelöst] Scroll abbrechen

Beitrag von Michl »

Hallo,

in einer Anwendung soll ein Feld geprüft werden, ob es vom Kontext her richtig ist (also die Daten, die der Nutzer gerade eingegeben hat), bevor auf einen neuen Datensatz zugegriffen werden kann.

Ich habe mir das mit BeforeScroll hingewurstelt und frage dort, ob alles passt, wenn ja, dann mache normal weiter, wenn nein, dann setze wieder alten Wert, bei Abbruch gehe zurück zum letzten bearbeiteten Datensatz.
Der "Abbruch" ist umständlich und konnte ich nur mit Hilfsvariablen und asynchronen Methoden lösen.

Das kommt mir arg hölzern vor. Wie macht man es denn eigentlich richtig?

Mein Testprojekt für SQLDB und SQLite anbei (SQLite dll nicht - müsste noch ins Projektverzeichnis kopiert werden).
Dateianhänge
SqliteScrollAbort.zip
(3.94 KiB) 51-mal heruntergeladen
Zuletzt geändert von Michl am Mo 7. Feb 2022, 12:46, insgesamt 1-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Sieben
Beiträge: 202
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: Scroll abbrechen

Beitrag von Sieben »

Ohne es mir bisher angesehen zu haben - warum nicht BeforePost...? Das hier zB:

Code: Alles auswählen

procedure TdmMain.qKategBeforePost(DataSet: TDataSet);
begin
  if qKategName.IsNull then
  begin
    ShowMessage('Will Namen haben...!');
    SysUtils.Abort;
  end;
end;
bleibt 'ohne weiteres' auf dem Record, belässt den DataSet im Edit-Modus und bricht auch jede weitere Aktion wie zB das Aufsuchen eines anderen Records durch VK_UP odgl ab.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Scroll abbrechen

Beitrag von Michl »

Das Leben kann so einfach sein.

Super! Das funktioniert. Danke!!!
Dateianhänge
SqliteScrollAbortFunktioniert.zip
(3.84 KiB) 57-mal heruntergeladen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten