Hänsel hat folgendes geschrieben : |
Das Fenster wird geöffnet mit:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.DBCtrlGrid1DblClick(Sender: TObject); var such,nr,we_nr :String; begin such:=DataModule1.ADOQuery_Objekte['ID']; DataModule1.ADOQuery_Objekte.Close; DataModule1.ADOQuery_Objekte.SQL.Text:='Select * From ODV2 Where ID ='+such+''; DataModule1.ADOQuery_Objekte.Open; DataModule1.ADOQuery_Wasser.Close; DataModule1.ADOQuery_Wasser.SQL.Text:='Select * From Wasser Where ID ='+such+' order by SPA'; DataModule1.ADOQuery_Wasser.Open; Form_Objekt.ShowModal; |
und wenn das Fenster Objekt geschlossen wird:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm_Objekt.SpeedButton39Click(Sender: TObject); begin DataModule1.ADOQuery_Objekte.Edit; DataModule1.ADOQuery_Objekte.Post; DataModule1.ADOQuery_Objekte.Close; DataModule1.ADOQuery_Objekte.SQL.Text:='Select * From ODV2 order by obj'; DataModule1.ADOQuery_Objekte.Open; Form1.Edit1.SetFocus; close; end; |
|
Ich vermute mal, dass du in den Fenstern die Datenanzeige über die selbe TDataSource mit ADOQuery_Objekte realisiert hast.
Falls du nicht irgendwo noch was sehr spezielles machst, vermute ich, dass die Doppelnutzung dieser Query zur Anzeige in einem Fenster und zur Bearbeitung im anderen Fenster und der ständigen Neuzuweisung der SQL-Statements irgendwas "kaputt" macht.
Es ist natürlich auch die Frage, was du in der ersten Form anzeigst. Das Ergebnis von ADOQuery_Objekte oder ADOQuery_Wasser? Die zweite Abfrage wird beim Close ja nicht zurückgesetzt.
Das folgende bitte nur als gut gemeinten Rat verstehen:
Du hast zirkuläre Referenzen. Das heißt, du hast in der Unit für die Objekte ein Uses mit der Unit der Form1 und umgekehrt. Das ist in der Regel problemlos, aber eben nur in der Regel. In diesem Fall auch nicht erforderlich, da du Edit1.SetFocus auch in Form1 nach dem Form_Objekt.ShowModal machen kannst.
Bitte deine Button, Edits, Forms, DataModule, ... mit sinnvollen Namen versehen. Ein SpeedButton39 wird dich irgendwann vor Probleme stellen, wenn du den Source in 3 Monaten wieder ansiehst. Beispiel btnClose für SpeedButton39.
Parameter für die SQL-Statements verwenden.
Im Moment vermutlich noch kein Problem, aber es erhöht die Lesbarkeit des Sources, schützt vor Code-Injection und beschleunigt die SQL-Abfragen (Stichwort Prepare).
Den Sinn hiervon habe ich gar nicht verstanden:
Delphi-Quelltext
1: 2:
| DataModule1.ADOQuery_Objekte.Edit; DataModule1.ADOQuery_Objekte.Post; |
Wenn du schon im Edit-Modus bist, sollte das eine Exception auslösen. Bist du nicht im Edit-Modus, sind diese Anweisungen sinnlos.