Autor Beitrag
Björn karpenstein
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 96

Windows XP, Linux
D7, K3
BeitragVerfasst: Mo 22.08.05 13:18 
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:
ausblenden 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):

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

 //Falls schonmal Auftrag abgebrochen wurde
 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 user profile iconGausi: Topic aus VCL (Visual Component Library) verschoben am Mi 24.08.2005 um 11:43
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 22.08.05 13:22 
Hallo!

Schau dir mal das Ereignis OnReconcileError an... :wink:

Cu,
Udontknow
Björn karpenstein Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 96

Windows XP, Linux
D7, K3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 96

Windows XP, Linux
D7, K3
BeitragVerfasst: 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: