![]() |
Datenbank: MS SQL • Version: 2016 • Zugriff über: FireDax
Problem mit FireDac Parameter.Size
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:
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
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; --------------------------- 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? |
AW: Problem mit FireDac Parameter.Size
Liste der Anhänge anzeigen (Anzahl: 1)
So, der Umbau auf:
Delphi-Quellcode:
hat auch nichts gebracht.
with dm1.qryProto.Params[0] do begin
Name := 'sText'; ParamType := ptInput; DataType := ftString; Size := iTxt; Value := sProtoTxt; end; with dm1.qryProto.Params[1] do begin Name := 'sSql'; ParamType := ptInput; DataType := ftString; Size := iSql; Value := sProtoSql; end; Aber: Wenn ich im OI an den Parametern das Feld "Datengröße" fülle, dann funktioniert das sehr wohl. |
AW: Problem mit FireDac Parameter.Size
Das Phänomen hatte ich früher auch schon einmal. Was geschieht, wenn Du vorher testhalber die Size auf 0 setzt?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz