Hallo nochmal!
Also ich habe folgendes Problem: Ich benutze ein SQLClientDataSet mit einem DataSource-Objekt, welches meine Anzeigekomponenten auf dem Bildschirm aktualisiert, wenn man durch die Records browst. Die Datenbank ist eine MySQL-Datenbank. Browse ich auf einen älteren Record zurück und möchte diesen aendern, erscheint bei dem ApplyUpdates(-1) eine Uhr, die 5 Sekunden flackert und danach sieht es so aus, als ob er die Änderungen übernommen hätte. Starte ich die Anwendung neu, ist es aber nicht in die Datenbank übernommen worden.
(ich muss dazu sagen, dass ich das Problem bei Kylix habe)
Obwohl ich vor der Update-Maske immer Frage:
Delphi-Quelltext
1: 2:
| if (DataModule1.Dataset_Auftraege.State <> dsEdit) then DataModule1.Dataset_Auftraege.Edit; |
habe ich dieses Problem.
Weiss nicht ob das was damit zu tun haben könnte, aber ich machen noch folgendes:
Ich benutze ein autoincrement-Feld, um meine ID's zu generieren. Dazu schreibe ich in das AfterInsert-Ereignis folgenden Code, um das Increment zu simulieren (ansonsten bekomme ich eine Schlüsselverletzung):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TDataModule1.Dataset_AuftraegeAfterInsert(DataSet: TDataSet); var max:Integer; begin SQLDataSet1.CommandText:='SELECT MAX(Auftrag) as maxwert from auftrag'; SQLDataSet1.Open; max:=SQLDataSet1.FieldByName('maxwert').AsInteger+1; DataSet.FieldByName('Auftrag').AsInteger:=max; DataSet.FieldByName('Adresse1').AsInteger:=Formular_Hauptfenster.Barverkaufkundenid; SQLDataSet1.Close;
SQLDataset1.CommandText:='DELETE FROM positionen where auftrag='+IntToStr(max); SQLDataset1.ExecSQL; end;
procedure TDataModule1.Dataset_AuftraegeAfterDelete(DataSet: TDataSet); begin Dataset_Auftraege.ApplyUpdates(-1); end;
procedure TDataModule1.Dataset_AuftraegeAfterPost(DataSet: TDataSet); begin Dataset_Auftraege.ApplyUpdates(-1); end; |
Moderiert von
Gausi: Topic aus VCL (Visual Component Library) verschoben am Mi 24.08.2005 um 11:43