Entwickler-Ecke
Datenbanken - SQLClientDataSet + MySQL
Björn karpenstein - Mo 22.08.05 13:18
Titel: SQLClientDataSet + MySQL
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
Udontknow - Mo 22.08.05 13:22
Hallo!
Schau dir mal das Ereignis OnReconcileError an... :wink:
Cu,
Udontknow
Björn karpenstein - Mo 22.08.05 13:32
Hallo vielen Dank! Also ich habe einfach mal ein ShowMessage(E.Message) gemacht. Bekomme folgende Fehlermeldung:
Unknown column "beglichen" in WHERE CLAUSE.
Die SQL-Anweisung dazu sieht so aus:
Select *,bezahltbar+bezahltscheck+bezahltkarte as beglichen from auftrag
Geht das nicht?
Udontknow - Mo 22.08.05 13:40
Nein. Das SQLDataset versucht ja, die Änderungen über die Feldnamen zurückzuschleusen. Da du das Feld aber im SQL umbenannt hast, versucht Delphi nun, den Wert des Feldes "Beglichen" zu ändern.
Was sollte da auch dann wo drinstehen? Das ist eine Gleichung mit 3 Unbekannten. X+Y+Z=50. Da soll bestimmt nicht nach Zufallsprinzip verteilt werden. :wink:
Wenn du nur die Überschrift des Feldes im Grid ändern willst, so verwende die Eigenschaft DisplayLabel der Felder.
Cu,
Udontknow
Björn karpenstein - Mo 22.08.05 13:43
Vielen Dank damit hast du mir ein haufen arbeit erspart :). War schon kurz davor alles von Hand nachzuprogrammieren :oops:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!