Moin,
Ich habe eine Suche, die per
SQL-Anweisung in mehreren Feldern nach einem Suchbegriff sucht.
Um Ärger mit Sonderzeichen etc zu vermeiden, wollte ich diese
SQL-Anweisung auf Parametergebrauch umstellen, bin dabei jedoch auf ein Problem gestoßen:
Nehmen wir an, es gibt in der Datenbank ein Feld "TEST", was ein VARCHAR(5) ist.
Führe ich die
SQL-Anweisung
Code:
SELECT * FROM BLUB WHERE TEST LIKE '%1234567890%'
aus, so liefert das zwar nichts zurück, funktioniert aber problemlos.
Mache ich das ganze jedoch so,
Code:
SELECT * FROM BLUB WHERE TEST LIKE :TEST
Query.Params.ParamByName('TEST').DataType := ftString;
Query.Params.ParamByName('TEST').AsString := '%1234567890%
So wird folgender Fehler ausgegeben:
Zitat:
[FireDAC][Phys][
FB]-345. Daten zu groß Variable [TEST]. Maximale Länge = [5], tatsächliche Länge = [12] Hinweis: Setzen sie TFDParam.Size auf einen größeren Wert
Mache ich das Ganze so,
Code:
SELECT * FROM BLUB WHERE TEST LIKE '%'||:TEST||'%'
Query.Params.ParamByName('TEST').DataType := ftString;
Query.Params.ParamByName('TEST').AsString := '1234567890
, so passiert dasselbe.
Setze ich manuell die Size des Parameters, so wird stattdessen diese Fehlermeldung geworfen:
Zitat:
[FireDAC][Phys][
FB]Dynamic
SQL Error
SQL error code = -303
arithmetic
exception, numeric overflow, or string truncation string right truncation
Es gäbe einen Workaround, nämlich per Copy den Parameter nur mit der maximalen Länge des Feldes zu besetzen, doch das würde ich gerne vermeiden, da ich zum Auslesen der Datenfeldgröße nämlich eine offene
Query bräuchte, welche unnötig Rechenzeit frisst.
Meine Frage daher: Kennt jemand das Problem bzw hat eine Lösung dafür?