Autor Beitrag
Dan75
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 02.09.02 11:40 
Hallo,

Habe einen langen SQL - UPDATE Befehl mit über 20 Parametern:
ausblenden Quelltext
1:
2:
3:
4:
TQuery.Close;
TQuery.Clear;
TQuery.Add('UPDATE tabelle SET feld1 = :param1, ...., feld21 = :param21');
TQuery.ExecSQL -> Fehler


Dies funktioniert einmal, manchmal zweimal dann bekomme ich eine Fehlermeldung: "EDBEngineError: Allgemeiner SQL Fehler. Die Zeichenfolgendaten wurden rechts abgeschnmitten (Null)."

Weiß jemand Rat? Wieso funktioniert dies nur sporadisch?

Daniel
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 02.09.02 12:22 
Hmmm... Du meinst sicher TQuery.SQL.Add/Clear, oder?

Kann es sein, daß du über die BDE SQL-Zeilen eben nur bis zu einer bestimmten Länge (z.B. 255) übergeben kannst? Je nach Parameterwerte kommt dann manches Mal die Zeilenlänge an bzw. über die 256 Zeichen.

Probiere folgendes:
Füge jeden param in eine eigene Zeile ein.
ausblenden Quelltext
1:
2:
3:
4:
5:
Query.SQL.Add('Update tabelle set');
Query.SQL.Add(' feld1 =:param1,');
Query.SQL.Add(' feld2 =:param2,');
...
Query.SQL.Add(' feld21 =:param21');

Cu, :D
Udontknow
Steffer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 299



BeitragVerfasst: Di 03.09.02 11:59 
Alternative ist Query.SQL.Text:= ....

_________________
Keine Signatur ...
Dan75 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 03.09.02 21:14 
Danke für die Antworten,

habe das Problem inzwischen gelöst.

Es war auch an einer anderen Stelle als an der oben beschriebenen zu finden.

Hatte nämlich
ausblenden Quelltext
1:
TQuery.Params[Index].AsString := 'Blabla';					

verwendet statt
ausblenden Quelltext
1:
TQuery.ParamByName('ParamName').AsString := 'BLaBLa';					

Ich weiß zwar nicht warum die erste Möglichkeit nicht funktionierte, aber die zweite ist ja auch viel komfortabler.
Viele Grüsse

Daniel
Silent Bob
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 23.10.02 13:44 
Tja ... ich habe genau denselben Fehler, trotz sehr einfach gehaltener Anweisung ...

ausblenden Quelltext
1:
2:
3:
4:
TQuery.Close;
TQuery.Clear;
TQuery.Add('UPDATE Linearity SET NumOfMeasPos=200 WHERE LinNr=3');
TQuery.ExecSQL;


Ich erhalte ebenfalls eine Fehlermeldung vom Typ EDBEngineError : "Allgemeiner SQL Fehler. Too few parameters."

Kann mir da jemand hefen?

Gruss
Silent Bob

_________________
"Ich dachte alles wird gut, aber das ist lange her"
Silent Bob
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 23.10.02 13:58 
Diesselbe Fehlermeldung erhalt ich auch bei der INSERT-Anweisung

ausblenden Quelltext
1:
INSERT INTO Linearity (UDNr, UDName, NumOfMeasPositions) VALUES (4, Peter, 500)'					

_________________
"Ich dachte alles wird gut, aber das ist lange her"
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mi 23.10.02 14:37 
Hi!

Du hasst deinen Stringwert nicht in Hochkommata gesteckt.

ausblenden Quelltext
1:
INSERT INTO Linearity (UDNr, UDName, NumOfMeasPositions) VALUES (4, 'Peter', 500);					


Das Hochkomma kannst du in Delphi erzeugen, indem du einfach zweimal das Zeichen machst (Beispiel: MeinStr:='Ich schreie durch den Raum ''Peter!'''). Alternativ kannst du die Anführungsstriche nehmen.

Cu,
Udontknow