Discussion:
Fehler bei einem aus mehreren Schritten bestehenden Vorgang. Prüfen Sie die einzelnen Statuswerte.
(zu alt für eine Antwort)
Stefan Koschke
2012-01-03 09:58:03 UTC
Permalink
Hallo,

erst mal ein gesundes neues jahr und schon neue Probleme:

Ich bekomme beim Schreiben in eine Datenbank den im Betreff genannten
Fehler.
Die Ursache ist klar, bei

query.fieldbyname(cInhalt).AsString := x;

ist x länger als die in der DB vorgegebene Feldlänge.

Wie aber fange ich so etwas ab?
mit
try
query.edit;
query.fieldbyname...
query.post;
except
irgendwas
end;

wird dann der gleiche Laufzeitfehler in der aufrufenden Funktion gefeuert!

Gibt es eine mir bisher unbekannte Funktion, welche nur die Menge Text
in das Feld schreibt die vorgesehen ist und den Rest abschneidet oder
muß ich an jeder Stelle im Programm erst die verfügbare Länge ermitteln
und den String manuell kürzen?
Das wären ein paar Hundert Stellen, die möchte ich nicht unbedingt alle
anpassen :-(

Prinzipiell ist die Datenbank richtig voreingestellt, aber durch
Kommunikationsfehler können eben mal zu lange Strings entstehen.

Wie gehe ich nun am besten vor?

Danke
Ciao
Stefan
Stefan Graf
2012-01-03 19:42:01 UTC
Permalink
Post by Stefan Koschke
Hallo,
Ich bekomme beim Schreiben in eine Datenbank den im Betreff genannten
Fehler.
Die Ursache ist klar, bei
query.fieldbyname(cInhalt).AsString := x;
ist x länger als die in der DB vorgegebene Feldlänge.
Wie aber fange ich so etwas ab?
mit
try
query.edit;
query.fieldbyname...
query.post;
except
irgendwas
end;
wird dann der gleiche Laufzeitfehler in der aufrufenden Funktion gefeuert!
Gibt es eine mir bisher unbekannte Funktion, welche nur die Menge Text
in das Feld schreibt die vorgesehen ist und den Rest abschneidet oder
muß ich an jeder Stelle im Programm erst die verfügbare Länge
ermitteln und den String manuell kürzen?
Das wären ein paar Hundert Stellen, die möchte ich nicht unbedingt
alle anpassen :-(
Prinzipiell ist die Datenbank richtig voreingestellt, aber durch
Kommunikationsfehler können eben mal zu lange Strings entstehen.
Wie gehe ich nun am besten vor?
In dem man das ganz anders aufruft ;-)

query.SQL.Clear;
query.SQL.Add ('update <tab> set <col>=x where <ref>=???');

try
query.ExecSQL;
except
...
end;

Ansonsten einfach

query.fieldbyname(cInhalt).AsString := Copy (x, 1,
query.fieldbyname(cInhalt).Size);
--
Stefan Graf
Lesen Sie weiter auf narkive:
Loading...