![]() |
Datenbank: mysql • Version: 1 • Zugriff über: ZeosLib7
SQL Parameter werden nicht ausgefüllt ..
Hallo ..
ich verstehe es nicht :-( Ich versuche gerade ein Problem zu lösen - da die zu suchenden Texte einen Bindestrich beinhalten - deswegen baue ich mir Parameter.. und hoffe SO das Problem zu beseitigen Aber wenn ich mir mein nicht funktionierendes SQL Statement ausgeben lassen will - sehe ich, dass die Parameter als Text drinnen stehen - und nicht die Werte. Der SQL-TEXT was bei meiner Procedure rauskomme .. die Parameter werden nicht augefüllt sondern dargestellt??? Zitat:
Delphi-Quellcode:
UniMainModule.n_MATERIAL.SQL.Clear;
UniMainModule.n_MATERIAL.SQL.Append('SELECT * FROM klassifizierung where ((`Materialkurztext` LIKE ''% :matname %'') OR (`Materialnummer` LIKE ''% :matnummer %'')) ORDER BY `' + my_Fieldname_m + '`' + sortierreihenfolge + ' LIMIT ' + inttostr(mainform.datenbank_limit) + ' OFFSET ' + inttostr(mein_limit_m)); UniMainModule.n_MATERIAL.Params.Clear; UniMainModule.n_MATERIAL.Params.CreateParam(ftString, 'matname', ptInput); UniMainModule.n_MATERIAL.Params.CreateParam(ftString, 'matnummer', ptInput); UniMainModule.n_MATERIAL.ParamByName('matname').Value := sql_filter_m; UniMainModule.n_MATERIAL.ParamByName('matnummer').Value := sql_filter_m; UniLabel55.Caption:= UniMainModule.n_MATERIAL.SQL.Text; UniMainModule.n_MATERIAL.Open; Info: n_MATERIAL ist ein TZQuery Hat jemand eine Idee wo der Fehler liegt? |
AW: SQL Parameter werden nicht ausgefüllt ..
Parameter werden erst bei der Ausführung mit Werten belegt, daher siehst Du die Parameternamen. Allerdings lässt sich der Code erheblich kürzen, wie wäre es denn so?
Delphi-Quellcode:
Ich selbst würde es ja noch anders machen, aber so sollte es IMO funktionieren.
UniMainModule.n_MATERIAL.SQL.Text := 'SELECT * FROM klassifizierung where ((`Materialkurztext` LIKE :matname) OR (`Materialnummer` LIKE :matnummer)) ORDER BY `' + my_Fieldname_m + '`' + sortierreihenfolge + ' LIMIT ' + inttostr(mainform.datenbank_limit) + ' OFFSET ' + inttostr(mein_limit_m);
UniMainModule.n_MATERIAL.ParamByName('matname').AsString := '%' + sql_filter_m + '%'; UniMainModule.n_MATERIAL.ParamByName('matnummer').AsString := '%' + sql_filter_m + '%'; |
AW: SQL Parameter werden nicht ausgefüllt ..
Die Idee hinter SQL-Parametern ist, dem Server ein parametrisiertes SQL zu schicken und dann die Parameterwerte in einem separaten Call nachzureichen. Das erlaubt, dieselbe SQL-Anweisung mit unterschiedlichen Parametern auszuführen, ohne sie jedesmal neu interpretieren und optimieren zu müssen. Insofern suchst du die SQL-Anweisung mit aufgelösten Parametern innerhalb deines Programms vergebens. Das von dir beobachtete Verhalten ist vollkommen korrekt so.
|
AW: SQL Parameter werden nicht ausgefüllt ..
Deine Parameter stehen im SQL-Statement als Text drin und nicht als Parameter. Dadurch existieren deine Parameter quasi nicht.
Falsch:
Code:
Richtig:
Select * from Tabelle where Feld like '% :Parameter %'
Code:
Ich würde aber auch eher den Ansatz von DeddyH verfolgen, also die Wildcards beim Parameter mit anzugeben.
Select * from Tabelle where Feld like '%' + :Parameter + '%'
|
AW: SQL Parameter werden nicht ausgefüllt ..
Moin...:P
Zitat:
1. Das SQL ist QT technisch zu kompliziert. :zwinker: So ist es übersichtlicher...
Delphi-Quellcode:
Die Parameter werden automatisch angelegt. Die Hochkommata werden nicht benötigt...außer bei blöden Namen. :roll:
Format(UniMainModule.n_MATERIAL.SQL.Text := 'SELECT * FROM klassifizierung where (Materialkurztext LIKE :matname) OR (Materialnummer LIKE :matnummer) ORDER BY %s %s LIMIT %s OFFSET %s', [my_Fieldname_m, sortierreihenfolge, inttostr(mainform.datenbank_limit), inttostr(mein_limit_m)];
UniMainModule.n_MATERIAL.ParamByName('matname').AsString := '%' + sql_filter_m + '%'; UniMainModule.n_MATERIAL.ParamByName('matnummer').AsString := '%' + sql_filter_m + '%'; UniMainModule.n_MATERIAL.Open; 2. Der Parameter mit "LIKE" ist falsch. #6/#7 PS: Das nächse Mal laßt ihr mir eine Chance...:stupid: |
AW: SQL Parameter werden nicht ausgefüllt ..
Bei einer einfachen OR-Verknüpfung werden auch die Klammern nicht benötigt :wink:. Und wenn man schon Format einsetzt, kann man für ganze Zahlen auch gleich %d nehmen und muss nicht erst umwandeln.
|
AW: SQL Parameter werden nicht ausgefüllt ..
Zitat:
Delphi-Quellcode:
Format(UniMainModule.n_MATERIAL.SQL.Text := 'SELECT * FROM klassifizierung where (Materialkurztext LIKE :matname) OR (Materialnummer LIKE :matnummer) ORDER BY %s %s LIMIT %d OFFSET %d', [my_Fieldname_m, sortierreihenfolge, mainform.datenbank_limit, mein_limit_m];
|
AW: SQL Parameter werden nicht ausgefüllt ..
SUPER.. Vielen Dank
Funktioniert jetzt .. und ist von überschüssigen Klammern und Co befreit Danke |
AW: SQL Parameter werden nicht ausgefüllt ..
Zitat:
Delphi-Quellcode:
zu werden:
Format
Delphi-Quellcode:
UniMainModule.n_MATERIAL.SQL.Text := Format('SELECT * FROM klassifizierung where Materialkurztext LIKE :matname OR Materialnummer LIKE :matnummer ORDER BY %s %s LIMIT %d OFFSET %d', [my_Fieldname_m, sortierreihenfolge, mainform.datenbank_limit, mein_limit_m];
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 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