Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQLite select geht nicht (https://www.delphipraxis.net/198618-sqlite-select-geht-nicht.html)

Dr. Jack 19. Nov 2018 12:02

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:
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][Phys][SQLite] ERROR: near "and": syntax error

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

DeddyH 19. Nov 2018 12:12

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?

mkinzler 19. Nov 2018 12:13

AW: SQLite select geht nicht
 
Zudem fehlt die Grundabfrage. Es get mit ' and ...' los.

hhcm 19. Nov 2018 12:16

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.

p80286 19. Nov 2018 12:19

AW: SQLite select geht nicht
 
Da fehlt ein "Select"!
Delphi-Quellcode:
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));
Gruß
K-H

Dr. Jack 19. Nov 2018 12:21

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));
...

hhcm 19. Nov 2018 12:25

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

Jasocul 19. Nov 2018 12:28

AW: SQLite select geht nicht
 
Zitat:

Zitat von Dr. Jack (Beitrag 1418424)
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

Zitat:

Zitat von Dr. Jack (Beitrag 1418429)
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));
...

Dein Command-Text sagt, dass es kein Flüchtigkeitsfehler war, sondern tatsächlich fehlt(e).
Mach doch mal sowas, bevor das Statement ausgeführt wird:
Delphi-Quellcode:
main.qryproducts.SQL.SaveToFile(<DeinDateiname>);
Danach schaust dir das Statement an oder führst es manuell aus. Dann siehst du vermutlich genauer, was da schief läuft.

Dr. Jack 19. Nov 2018 12:36

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

hhcm 19. Nov 2018 12:40

AW: SQLite select geht nicht
 
Ich hab´s kurz ausprobiert. Funktioniert auch wunderbar in SQLite.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:31 Uhr.
Seite 1 von 3  1 23      

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