Moin,
ich will einen Datensatz INSERTen oder UPDATEn. Dazu bekommt die Delphi Procedure die Felder Protokolltext (sProtoText),
SQL-Statement (sProtoSQL), aus welcher Form das kommt (sForm) und ob die Ursache ein Fehler war oder "nur" ein Protokolleintrag ist (iError).
Wenn ein (String-)Parameter die Standardlänge überschreitet, muss die Länge des Parameters vorher gesetzt werden, so dass FireDac das verarbeiten kann. Die folgende Procedure soll ein Insert in die Protokoll
DB ausführen:
Delphi-Quellcode:
procedure TfrmMain.p_Proto(sProtoTxt, sProtoSQL, sForm :
String; iError : Byte);
{-----------------------------------------------------------------------------------------------------------------------
Protokoll schreiben
-----------------------------------------------------------------------------------------------------------------------}
var
iTxt : Integer;
iSql : Integer;
bError : Boolean;
begin
iTxt := 0;
iSql := 0;
iTxt := LENGTH(sProtoTxt);
iSql := LENGTH(sProtoSql);
ShowMessage('
Textlänge ' + IntToStr(iTxt) + #13 +
'
SQL-Länge ' + IntToStr(iSql));
dm1.qryProto.ParamByName('
sText').Size := iTxt;
dm1.qryProto.ParamByName('
sText').AsString := sProtoTxt;
dm1.qryProto.ParamByName('
sSql').Size := iSql;
dm1.qryProto.ParamByName('
sSql').AsString := sProtoSql;
dm1.qryProto.ParamByName('
sForm').AsString := sForm;
dm1.qryProto.ParamByName('
sVersion').AsString := sDelphiVer + '
' + sVersion + '
' + sVerDat;
dm1.qryProto.ParamByName('
bErrKz').AsBoolean := bError;
dm1.qryProto.ExecSQL;
end;
Da der Protokolltext (sProtoText) und das
SQL-Statement (sProtoSQL) häufig zu lang als Parameter sind, stelle ich die aktuelle Länge der beiden Felder fest und übergebe diese in die Size. Der SchowMessage ist nur dazu da, das ist die ermittelte Längenwerte kontrollieren kann. Trotzdem kommt die Fehlermeldung
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt ProdImp.exe ist eine
Exception der Klasse EFDException mit der Meldung '[FireDAC][Phys][
ODBC]-345. Daten zu groß für Variable [STEXT]. Maximale Länge = [24], tatsächliche Länge = [272] Hinweis: Setzen Sie TFDParam.Size auf einen größeren Wert' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Ich verstehe es nicht, da ich sicher bin, dass ich das schon mal so gemacht habe.
Was mache ich falsch, wenn ich in sText = 272 und in sSQL = 475 Zeichen lange Text übergeben will?