Autor Beitrag
ralph
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 57

openSUSE 10.3 mit Crossover Linux 6.2
Delphi 3 Pro, Freereport 2.32
BeitragVerfasst: Do 16.02.06 15:09 
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.

ausblenden 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.

ausblenden 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.

ausblenden 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:

ausblenden 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
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Do 16.02.06 15:42 
Ich verbürge mich nicht dafür aber ich glaube du musst wie du schon sagtest SaveToFileaufrufen da das nur eine Tabelle im RAM ist. Man möge mich aber bitte ggF. korrigieren ;-)
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Do 16.02.06 15:45 
Das Post steht an der falschen Stelle. Aktuell fügst du eine ( leere ) Zeile per Append hinzu und postest dann direkt. Die Änderungen, die du im DBEdit vornimmst, werden zwar ins Dataset eingetragen, aber nie gepostet.

_________________
Bravery calls my name in the sound of the wind in the night...
ralph Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 57

openSUSE 10.3 mit Crossover Linux 6.2
Delphi 3 Pro, Freereport 2.32
BeitragVerfasst: Do 16.02.06 16:58 
Titel: Post bekommt einen extra Button
Ja, ich habe es schon selbst bemerkt, das Post habe ich auf einen extra Button (Daten übernehmen) verlegt. Es gibt nicht nur Dau's sondern ich bin ein dap. Bin leicht überarbeitet. Ein selten dummer Fehler.

Trotzdem Danke

Ralli