
Zitat von
SMALLID:
Hi nochmal. Ok vllt. habe ich dann doch was falsch verstanden. 2 Zeilen wären ja schon super!

Ich setze aber am Anfang für jede Tabelle erstmal den funiqueid wert, indem ich durchiteriere mit
Na gut, die Initialisierung ist vielleicht noch dazuzurechnen.

Zitat von
SMALLID:
...
aber ggf. geht es noch anders?
Bisher habe ich immer nur
Paradox Tabellen benutzt und in diesem Fall nutze ich MyBase, weil ich da weder
BDE noch
ADO Support auf dem Zielrechner brauche. Dachte eigentlich, dass jeder das TClientDataset für lokale DBs nimmt, oder ist da
ODBC/
ADO nach
Access doch simpler?
Erstens geht es einfacher und zweitens ist
ADO sowieso auf jedem Windows-PC installiert. Ich würde persönlich (aber nur bei Einzelplatzanwendungen)
Access per
ADO verwenden. Für Standard-Anwendungen reicht das Dicke und macht die Entwicklung zum Kinderspiel.
Delphi-Quellcode:
Function GetMaxID (aTable : TDataset; IDField : String) : Integer;
Var
fField : TField;
B : TBookmark;
Begin
Result := -maxInt;
fField := aTable.FieldByName(IDField);
aTable.DisableControls;
aTable.GetBookmark (B);
Try
aTable.First;
While not aTable.Eof Do Begin
If Result < fField.AsInteger Then
Result := fField.AsInteger;
aTable.Next;
End;
Finally
aTable.GotoBookmark (B);
aTable.FreeBookmark (B);
aTable.EnableControls;
End;
End;
Im DataModuleCreate wird für alle Tabellen dann GetMaxID aufgerufen und der Wert in den privaten Feldern gespeichert. Noch einfacher ist es, die MaxID in der Tag-Eigenschaft der Tabelle zu speichern:
Delphi-Quellcode:
Procedure TMyDataModule.DataModuleCreate (Sender : TObject);
Begin
Table1.Tag := GetMaxId (Table1);
Table2.Tag := GetMaxId (Table2);
Table3.Tag := GetMaxId (Table3);
Table4.Tag := GetMaxId (Table4);
Table1.OnNewRecord := TMyDataModuleNewRecrd;
Table2.OnNewRecord := TMyDataModuleNewRecrd;
Table3.OnNewRecord := TMyDataModuleNewRecrd;
Table4.OnNewRecord := TMyDataModuleNewRecrd;
End;
Procedure TMyDataModule.DataModuleCreate (Sender : TDataset);
Begin
Sender.Tag := Sender.Tag + 1;
Sender[IDField] := Sender.Tag;
End;
Ich würd trotzdem
Access nehmen. Ist doch schön stabil (bei einer Einzelplatzanwendung).