Entwickler-Ecke

Datenbanken - Datensätze werden in der Datenbank nicht gespeichert !


Jagg - Mi 20.11.02 12:25
Titel: Datensätze werden in der Datenbank nicht gespeichert !
Hallo !

Ich habe DBGrid mit Query vebunden !
Wenn ich das Programm starte und einen neuen Datensatz eingebe,dann
wird der Datensatz nicht gespeichert,sondern fällt weg beim next ProgrammStart !

Walum ?


Jagg !


DataCool - Mi 20.11.02 12:30

Hast Du auch einen DBNavigator mit dem DataSource verbunden ?

Steht die Query vielleicht auf ReadOnly ?


Udontknow - Mi 20.11.02 12:56

Es geht noch einfacher. :wink:

Hast du vielleicht einfach den Aufruf von "Post" vergessen?

Cu, :)
Udontknow


DataCool - Mi 20.11.02 13:08

Darauf wollte ich hinaus, deshalb der DBNavigator :wink:


Jagg - Mi 20.11.02 13:30


Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button3Click(Sender: TObject);
begin
  Query1.Post;
  DBEdit1.SetFocus;
end;


Er sagt dann den Fehler :

Datenmenge weder im Editer noch im Einfügemodus !

Muss ich dann noch : "Query1.Edit" machen ?


Udontknow - Mi 20.11.02 13:41

Post funzt nur, wenn du vorher Edit oder Insert aufgerufen hast. Es macht aber keinen Sinn, deshalb dann Edit oder Insert aufzurufen.

Also: Grundsätzlich wird ein Datensatz in einem TDataset zuerst mit Insert oder Update für die Bearbeitung bereit gemacht, nach der Bearbeitung muss man dann Post ausführen.
In einem DBGrid wird automatisch Insert aufgerufen, wenn du in der letzten Zeile den Pfeil nach unten drückst, Update wird ausgeführt, wenn du in irgendeiner Zelle etwas veränderst. Ein DBGrid postet auch automatisch, wenn du diese Zeile verlässt und auf einen anderen Datensatz gehst.
Fügst du aber nur ein, verlässt aber nicht diese Zeile und beendest sofort das Programm, so wird kein Post ausgeführt, der Datensatz landet nicht in der Datenbank.

Hier, das solltest du in dein Onclose-Event packen:


Quelltext
1:
2:
if (Query1.State=dsInsert) or (Query1.State=dsUpdate) then
  Query1.Post;


Cu, :)
Udontknow


Jagg - Mi 20.11.02 13:58

dsUpdate kennt er aber nicht !

Muss ich eine Unit einfügen oder so ?

Jagg !


Udontknow - Mi 20.11.02 14:25

Ups, sorry, es muss dsEdit heissen. Deklaration befindet sich in der Unit DB.

Cu,
Udontknow


Jagg - Mi 20.11.02 14:47

hm...... geht irgendwie nicht !

JAgg !


Jagg - Mi 20.11.02 15:01

meno....warum schreibt er in die datenbank nichts rein ?


Udontknow - Mi 20.11.02 15:13

Schliesst du vor der Ausführung desoben gegebenen Code-Snippets die DB-Connection oder die Query?


Jagg - Mi 20.11.02 15:24

nein mach ich nicht !
liegt es daran ?

Jagg !


Udontknow - Mi 20.11.02 15:41

Es hätte daran gelegen, wenn du so verfahren hättest...


Jagg - Mi 20.11.02 15:47

ich habe nochmal nachgeschau...also,ich schliesse nichts,das ist alles noch geöffnet !

Jagg !


Udontknow - Mi 20.11.02 16:02

Wie ist denn der State der Query vor dem Snippet?


Jagg - Mi 20.11.02 16:13

Ich habe da keinen state !
muss da einer hin ?
oder muss da was im Objektinspektor gemacht werden ?
Jagg !


wwerner - Mi 20.11.02 16:20

Schließt du die DB bei Programmende? Das ist auch wichtig!


Jagg - Mi 20.11.02 16:50

ne ich schliesse es nicht !
warum sollte ich auch !
bei ttable schreibt er es sofort rein !

Jagg !


Udontknow - Mi 20.11.02 17:13

:?:

Wie, du hast keinen State? State ist eine Eigenschaft der Query, diese hat zu jeder Zeit einen Status! Also, Haltepunkt vor dem Codesnippet und dann per Strg+F7 Query1.State auswerten!

Cu,
Udontknow