Hallo,
irgendetwas ist stimmt mit meiner TClientDataset Kompo nicht, oder ich habe etwas nicht verstanden !?.
Ich benutze eine TClientDataSet Kompo (mit Namen Tarife) für eine lokale Datenbank auf der Festplatte.
Erst öffne ich die Datenbank im Ereignis OnShow des Formulars und weise der Kompo die Datenbankdatei Tarife.cds zu.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm4.FormShow(Sender: TObject); begin
Tarife.FileName := Form1.Pfad + ('Tarife.cds');
Tarife.Open;
end; |
Die Datenbank ist noch leer und verfügt über keine Datensätze.
Nun soll ein Datensatz hinzugefügt werden. Dies geschieht im OnClick Ereignis einen normalen ToolButtons.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm4.ToolButton1Click(Sender: TObject); begin
Tarife.Append;
DBEdit1.SetFocus;
Tarife.Post;
end; |
Im Formular befindet sich ein DBGrid und die entsprechenden DBEdit Felder. Die Schreibmarke steht also im Feld DBEdit1. Ich fülle insgesamt 4 Felder aus. Wenn ich fertig bin, dann click ich einen Button OK an der folgenden Code ausführt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm4.Button1Click(Sender: TObject);
begin
Form4.Close;
end; |
Es wird also das Formular geschlossen. Im OnClose Ereignis des Formulars wird dann folgender Code ausgeführt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction); begin
Form4.Tarife.Close;
end; |
Es wird die Datenbank geschlossen. Wenn ich das Programm starte und das Formular aufrufe, um Daten einzugeben, klappt es. Beende ich das Programm und starte es erneut, sind alle Daten futsch. Was mache ich falsch, oder ist es ein Bug in der Kompo TClientDataSet ? Oder muß nach jeder Datensatzänderung oder wenn ein Satz hinzugefügt wurde, zuerst die Methode TClientDataSet.SavetoFile aufgerufen werden und erst dann werden die Änderungen auf die Platte geschrieben, bevor die Methode TClientDataSet.Close zum Zuge kommt ? Wer kann mir ein einfaches nachvollziehbares Beispiel geben, sonst komm ich nicht weiter. Ich will keine BDE Datenbank einsetzen und kein Mysql und Mitstreiter. Für mein kleines Programm, was lediglich in einer Erfassungsmaske ein paar Daten entgegennimmt und dann ausdruckt lohnt es sich nicht, einen Datenbankserver einzusetzen.
Ralli