Hab immense Probleme mit dem Beibehalten der Datensatzposition, bei Eingabe von Daten in die Felder.
1. Problem : Wenn ich die
Unit wechsle und dann das Fenster wieder schliesse, wird der erste Datensatz der Tabelle abgezeigt
1. Zum ersten wäre es sinnvoll, jeder Tabelle einen Primary-Key zu spendieren, den du dir nach jedem Scrollvorgang (OnAfterScroll) in einer globalen Variablen merkst:
Delphi-Quellcode:
procedure TDatMod.Dset_ArtikelAfterScroll(DataSet: TDataSet);
begin
// Index_Artikel: globale Integer-Variable, deklariert in UnitData unter Public
Index_Artikel := Dset_Artikel.FieldByName('IDX_ARTIKEL').AsInteger;
end;
2. Bei mir liegen Datenbank-Komponenten immer (außer bei Testprogrammen) in einem Datenmodul (UnitData), das auch diese globale(n) Variable(n) aufnehmen kann. Schließlich wird das Datenmodul in der Regel von allen anderen Units/Forms mitverwendet (Uses-Klausel unter Implementation):
Delphi-Quellcode:
...
IMPLEMENTATION
USES
UnitData;
...
3. Für besondere Fälle merke ich mir den aktuellen Primary-Key in einer lokalen Variablen und setze ihn nach Abschluß der jeweiligen Funktion/Prozedur mittels Locate wieder auf den ursprünglichen Wert.
4. In fast allen meinen Datenbanken gibt es eine Benutzer-Tabelle, in der ich u.a. auch die Datensatz-Positionen meiner Tabellen speichere, wie sie bei Programmende gerade vorgefunden werden. Dadurch hat der Anwender beim nächsten Start wieder genau die Datensätze vor Augen wie beim vorangegegangen Programm-Ende.