AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken TFDQuery -> Parameter in LIKE-Anweisung führt bei zu großer Länge zu Exception
Thema durchsuchen
Ansicht
Themen-Optionen

TFDQuery -> Parameter in LIKE-Anweisung führt bei zu großer Länge zu Exception

Ein Thema von AuronTLG · begonnen am 24. Feb 2020 · letzter Beitrag vom 25. Feb 2020
Antwort Antwort
Benutzerbild von MEissing
MEissing

Registriert seit: 19. Jan 2005
Ort: Egelsbach
1.384 Beiträge
 
Delphi 12 Athens
 
#1

AW: TFDQuery -> Parameter in LIKE-Anweisung führt bei zu großer Länge zu Exception

  Alt 24. Feb 2020, 11:45
Wie sieht den den Query Parameter aus?

Code:
 object FDQuery1: TFDQuery
    Left = 640
    Top = 216
    ParamData = <
      item
        Name = 'Test'
        DataType = ftString
        ParamType = ptInput
        Size = 12
      end>
  end
Matthias Eißing
cu://Matthias.Eißing.de [Embarcadero]
Kein Support per PN
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.360 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TFDQuery -> Parameter in LIKE-Anweisung führt bei zu großer Länge zu Exception

  Alt 24. Feb 2020, 12:21
Ich hab mal schnell getestet...
Delphi-Quellcode:
  FDQuery2.Prepare;
  FDQuery2.Params[0].Size := 100;
  FDQuery2.Params[0].AsString := '%123456tttttttfff';
  FDQuery2.Open;
Im Debugger ist der Size des Param vor dem Open noch 100.
Das Feld bei mir ist 10.
Nach dem Open kommt dennoch der Fehler, dass nur 10 erlaubt ist...

Hier scheint FireDac restriktiver zu agieren als andere Komponenten.

[EDIT]
Allerdings ist bei mir FDQuery2.Params[0].Size nach dem Prepare korrekt auf 10 gesetzt.
Damit habe ich den Wert, den ich brauche!

Folgendes geht bei mir nun:
Delphi-Quellcode:
procedure TFrmMain.cxButton2Click(Sender: TObject);
begin
  FDQuery2.Prepare;
  FDQuery2.Params[0].AsString := Copy('%123456tttttttfff', 1, FDQuery2.Params[0].Size);
  FDQuery2.Open;
end;
Frank
Angehängte Grafiken
Dateityp: jpg debugger.jpg (32,3 KB, 16x aufgerufen)
Frank Reim

Geändert von dataspider (24. Feb 2020 um 12:35 Uhr)
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
326 Beiträge
 
Delphi 12 Athens
 
#3

AW: TFDQuery -> Parameter in LIKE-Anweisung führt bei zu großer Länge zu Exception

  Alt 24. Feb 2020, 13:55
So, ich habe einen Workaround gefunden, mit dem ich höchstwahrscheinlich gut leben kann:
Ich hole mir die Größe der Stringfelder einfach vorab mittels einer TFDMetaInfoQuery und überspringe die Suchschritte, bei denen das Datenfeld kleiner ist als der Suchbegriff. Damit ist das Problem gelöst und anscheinend sogar Performance gewonnen, da die Query schlanker ist und weniger Parameter gesetzt werden.


Ich hatte es vorher nochmal mit dem Prepare versucht, aber irgendwie wollte das bei mir nicht so richtig.
Von daher werde ich diese Lösung hier jetzt nochmal bisschen durchtesten, aber soweit scheint es hervorragend zu funktionieren.
  Mit Zitat antworten Zitat
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: TFDQuery -> Parameter in LIKE-Anweisung führt bei zu großer Länge zu Exception

  Alt 24. Feb 2020, 21:39
So, ich habe einen Workaround gefunden, mit dem ich höchstwahrscheinlich gut leben kann:
Ich hole mir die Größe der Stringfelder einfach vorab mittels einer TFDMetaInfoQuery ...
Das scheint mir eine sichere, wenn auch aufwendige Lösung zu sein. Ich hatte das Problem auch mal (weiss aber nicht mehr, mit welcher DB und welchen Komponenten). Mir half damals folgendes
Code:
SELECT * FROM BLUB WHERE TEST||'' LIKE :TEST
Zur Performance kann ich jetzt nichts sagen, die ist aber je nach Ausdruck und Qualität des Query-Optimizers aber eh bescheiden.
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
326 Beiträge
 
Delphi 12 Athens
 
#5

AW: TFDQuery -> Parameter in LIKE-Anweisung führt bei zu großer Länge zu Exception

  Alt 25. Feb 2020, 08:14
Es geht. Das Ganze ist war für eine eigene Klasse, die automatisiert Komfortsuchen bereitstellt, d.h. die MetaInfoQuery arbeitet nur einmal am Anfang beim Initialisieren und nicht mehr bei der Suche selbst.
Ginge es um beliebige spontane Suchanfragen, wäre das definitiv zu viel Aufwand.
  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 10:12 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