Entwickler-Ecke

Datenbanken - UPDATE mit TQuery erzeugt Fehler


Dan75 - Mo 02.09.02 11:40
Titel: UPDATE mit TQuery erzeugt Fehler
Hallo,

Habe einen langen SQL - UPDATE Befehl mit über 20 Parametern:

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 - 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.

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 - Di 03.09.02 11:59

Alternative ist Query.SQL.Text:= ....


Dan75 - 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

Quelltext
1:
TQuery.Params[Index].AsString := 'Blabla';                    

verwendet statt

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 - Mi 23.10.02 13:44

Tja ... ich habe genau denselben Fehler, trotz sehr einfach gehaltener Anweisung ...


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


Silent Bob - Mi 23.10.02 13:58

Diesselbe Fehlermeldung erhalt ich auch bei der INSERT-Anweisung


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


Udontknow - Mi 23.10.02 14:37

Hi!

Du hasst deinen Stringwert nicht in Hochkommata gesteckt.


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