Draufgekommen bin ich erst dadurch, dass ich im
SQL Server die Verbindung samt ausgeführter Statements getrackt habe.
Über das "
SQL Server Management Studio" habe ich den "
Activity Monitor" (rechte Maustaste auf der Serververbindung...) gestartet und bei meiner Verbindung dann (ebenfalls über die rechte Maustaste) "
Trace Process in SQL Server Profiler" ausgeführt.
Im sich dann öffnenden "
SQL Server Profiler"-Fenster kann man alles sehen, was so an Datenbank-Statements abgesetzt wird...
Und da habe ich mich dann schon mal gewundert, dass der Update nicht direct ausgeführt wird, sondern über eine Store-Procedure:
Code:
exec sp_executesql N'UPDATE [T_Test]
SET [Name] = TRIM( @P1 )
, [Info] = TRIM( @P2 )
, [Text] = TRIM( @P3 )
WHERE [ID] = @P4
',N'@P1 varchar(14), @P2 varchar(max), @P3 text,@P4 int','Max Mustermann','','das ist nicht so lang',1
Die angeg. VARCHAR-Längen der Parameter scheinen die tatsächliche Textlänge widerzuspiegeln - ausser bei Leerstrings, da kommt dann
max
Wenn ich das Statement dann herauskopiere und im
SQL Server Management Studio in einem neuen
Query-Fenster auf der Datenbank ausführe,
kommt dort die Fehlermeldung:
Code:
Msg 8116, Level 16, State 1, Line 1
Argument data type text is invalid for argument 1 of Trim function.
Das ist dann der "echte" tatsächliche Fehler - man darf hier beim Aufruf über eine Stored-Procedure kein
TRIM auf Parameter ausführen, die als
text definiert sind!
Ich wäre da nie von alleine drauf gekommen
- weder dass irgendjemnand (Delphi /
BDE /
ODBC-Treiber ???) das Update-Statement als Stored Procedure-Aufruf absetzt,
- noch dass dort kein TRIM auf die
Text-Spalte möglich ist (wo doch im View genau das gemacht wird...)
- und dann noch, dass der Fehler dann als
Table is readonly in der Applikation ankommt
Ich hoffe, die Beschreibung hilft jemand anderes bei ähnlichen Problemen - zumindest bei der Fehlersuche