AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Problem mit FireDac Parameter.Size
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit FireDac Parameter.Size

Ein Thema von rokli · begonnen am 21. Apr 2021 · letzter Beitrag vom 21. Apr 2021
Antwort Antwort
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
299 Beiträge
 
Delphi 10.4 Sydney
 
#1

Problem mit FireDac Parameter.Size

  Alt 21. Apr 2021, 09:15
Datenbank: MS SQL • Version: 2016 • Zugriff über: FireDax
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?
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
299 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Problem mit FireDac Parameter.Size

  Alt 21. Apr 2021, 12:14
So, der Umbau auf:

Delphi-Quellcode:
      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;
hat auch nichts gebracht.

Aber: Wenn ich im OI an den Parametern das Feld "Datengröße" fülle, dann funktioniert das sehr wohl.
Miniaturansicht angehängter Grafiken
2021-04-21-13_11_22-firedac-abfrageeditor-%5Bqryproto%5D.png  
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Problem mit FireDac Parameter.Size

  Alt 21. Apr 2021, 13:21
Das Phänomen hatte ich früher auch schon einmal. Was geschieht, wenn Du vorher testhalber die Size auf 0 setzt?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz