![]() |
Datenbank: sqlite • Version: 10.1 • Zugriff über: firedac
SQLite select geht nicht
Hallo zusammen,
ich habe von MSSQL auf die SQLite DB umgestellt, jedoch funktionieren jetzt einige select-Anweisungen nicht, die aber bereite in MSSQL funktionierten. Woran kann das liegen?
Delphi-Quellcode:
[FireDAC][Phys][SQLite] ERROR: near "and": syntax error
procedure TfrmGettingStarted.BitBtn5Click(Sender: TObject);
var Column: TListColumn; Item: TListItem; i:Integer; begin if not main.dbMain.Connected then Exit; main.qryproducts.FetchOptions.AutoClose := False; main.qryproducts.SQL.Clear; for i := 1 to Length(edit12.text) do if not (edit12.text[i] in ['0'..'9']) then begin main.qryproducts.SQL.Add(' and fam_db.name like '); main.qryproducts.SQL.Add(QuotedStr(#37+edit12.text+#37)); main.qryproducts.SQL.Add(' and fam_db.menge like '); main.qryproducts.SQL.Add(QuotedStr(#37+edit13.text+#37)); //einheit main.qryproducts.SQL.Add(' and fam_db.einheit_kurz like '); main.qryproducts.SQL.Add(QuotedStr(#37+edit14.text+#37)); //dafo main.qryproducts.SQL.Add(' and fam_db.dafo_kurz like '); main.qryproducts.SQL.Add(QuotedStr(#37+edit15.text+#37)); //hersteller main.qryproducts.SQL.Add(' and fam_db.hersteller_lang like '); main.qryproducts.SQL.Add(QuotedStr(#37+edit16.text+#37)); main.qryproducts.SQL.Add('order by fam_db.name asc, fam_db.menge asc'); main.qryproducts.SQL.Add('ORDER_BY fam_db.name, (cast(menge as integer)) ASC'); main.qryproducts.Open; // main.qryproducts.ExecSQL; end else begin //pzn main.qryproducts.SQL.Add('SELECT *'); main.qryproducts.SQL.Add('FROM fam_db') ; main.qryproducts.SQL.Add(' WHERE fam_db.nr_pzn like ') ; main.qryproducts.SQL.Add(QuotedStr(#37+edit12.text+#37)); main.qryproducts.Open; end; listview2.Items.Clear; while not main.qryproducts.Eof do begin saveitemdata( main.qryproducts.fieldbyname('nr_pzn').asString, main.qryproducts.fieldbyname('name').asString, main.qryproducts.fieldbyname('menge').asString, main.qryproducts.fieldbyname('einheit_kurz').asString, main.qryproducts.fieldbyname('dafo_kurz').asString, main.qryproducts.fieldbyname('hersteller_lang').asString ,main.qryproducts.fieldbyname('n_bez').asString ,main.qryproducts.fieldbyname('bestand').asString, main.qryproducts.fieldbyname('listen_vk').asString ); main.qryproducts.Next; end; end; FireDAC Executor Error The application performed an incorrect operation with the database. ------------------------------------------- Message text: near "and": syntax error Error code: 00001 Error kind: Other Server object: Command text offset: 2 ------------------------------------------- Command text: and fam_db.name like '%aspirin%' and fam_db.menge like '%%' and fam_db.einheit_kurz like '%%' and fam_db.dafo_kurz like '%%' and fam_db.hersteller_lang like '%%' order by fam_db.name asc, fam_db.menge asc ORDER_BY fam_db.name, (cast(menge as integer)) ASC Command parameters: ------------------------------------------- Exception class name: ESQLiteNativeException FireDAC error code: 1600 FireDAC object name: main.qryProducts |
AW: SQLite select geht nicht
Was geschieht, wenn Du Deine Abfrage parametrisierst und das ORDER_BY (scheint eine Art Makro zu sein) einmal weglässt?
|
AW: SQLite select geht nicht
Zudem fehlt die Grundabfrage. Es get mit ' and ...' los.
|
AW: SQLite select geht nicht
Ich würde sagen, dass dies selbst bei MSSQL nicht funktioniert hat. Wenn ich das richtig lese fängt der SQL Befehl mit
and fam_db.name like an. Da fehlt was. |
AW: SQLite select geht nicht
Da fehlt ein "Select"!
Delphi-Quellcode:
Gruß
if not (edit12.text[i] in ['0'..'9'])
then begin main.qryproducts.SQL.Text:='Select irgendwas from irgendeinetabelle '+ 'where irgendeinFeld=irgendwas '; main.qryproducts.SQL.Add(' and fam_db.name like '); main.qryproducts.SQL.Add(QuotedStr(#37+edit12.text+#37)); K-H |
AW: SQLite select geht nicht
stimmt, das war allerdings ein Flüchtigkeitsfehler. Es geht so los:
...
Delphi-Quellcode:
...
main.qryproducts.SQL.Add('Select name from fam_db where fam_db.name like') ;
main.qryproducts.SQL.Add(QuotedStr(#37+edit12.text+#37)); main.qryproducts.SQL.Add(' and fam_db.menge like '); main.qryproducts.SQL.Add(QuotedStr(#37+edit13.text+#37)); |
AW: SQLite select geht nicht
Schau dir vor dem öffnen des Querys mal den Inhalt an. Da du nicht mit Parametern arbeitest sollte dort das komplette Statement zu sehen sein.
Code:
main.qryproducts.SQL.Text
|
AW: SQLite select geht nicht
Zitat:
Zitat:
Mach doch mal sowas, bevor das Statement ausgeführt wird:
Delphi-Quellcode:
Danach schaust dir das Statement an oder führst es manuell aus. Dann siehst du vermutlich genauer, was da schief läuft.
main.qryproducts.SQL.SaveToFile(<DeinDateiname>);
|
AW: SQLite select geht nicht
Danke für den Tip mit der Ausgabe. Funktioniert wunderbar im MSSQL...
Select * from fam_db where fam_db.name like '%aspirin%' and fam_db.menge like '%%' and fam_db.einheit_kurz like '%%' and fam_db.dafo_kurz like '%%' and fam_db.hersteller_lang like '%%' order by fam_db.name asc, fam_db.menge asc |
AW: SQLite select geht nicht
Ich hab´s kurz ausprobiert. Funktioniert auch wunderbar in SQLite.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 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