Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   FB2, IBDAC, Select mit IN preparen ? (https://www.delphipraxis.net/177713-fb2-ibdac-select-mit-preparen.html)

hoika 22. Nov 2013 14:26

Datenbank: FB • Version: 2 • Zugriff über: IBDAC

FB2, IBDAC, Select mit IN preparen ?
 
Hallo #,

folgende Query soll optimiert werden.

Select Id,Name From IdName
Where Id In(:Ids)

Das Ids steht für beliebige Werte.

Problem:
Das Prepare klappt, das ParamByName bringt keine Fehlermeldung,
beim Open sehe ich im SQL-Monitor aber, dass er das :Ids nicht ersetzt hat.

Ein Bug von IBDAC (Version 3.10.10) ?

mkinzler 22. Nov 2013 14:56

AW: FB2, IBDAC, Select mit IN preparen ?
 
Nein, FB unterstützt dass in dieser Form nicht.

Mikkey 22. Nov 2013 15:15

AW: FB2, IBDAC, Select mit IN preparen ?
 
Zitat:

Zitat von mkinzler (Beitrag 1237077)
Nein, FB unterstützt dass in dieser Form nicht.

Ich glaube auch nicht, dass das irgendein DBMS unterstützt, wie sollte denn auch der Wert, der da als Parameter gesetzt wird, interpretiert werden?

mit

Code:
... IN (:P1, :P2, :P3 ..., :Pn)
würde ein Schuh draus, das müsste eigentlich immer funktionieren.

hoika 22. Nov 2013 15:15

AW: FB2, IBDAC, Select mit IN preparen ?
 
Hallo,

und warum klappt es unter IBExpert ?


Heiko

mkinzler 22. Nov 2013 15:21

AW: FB2, IBDAC, Select mit IN preparen ?
 
Möglicherweise ersetzt dann IBExpert den Parameter durch den Wert/Inhalt.

In diesem Fall könnte die Makrofunktion von IBDAC helfen

hoika 22. Nov 2013 16:03

AW: FB2, IBDAC, Select mit IN preparen ?
 
Hallo,

ich schaue die mir mal an.
Zur Not baue ich halt ein paar OR's.


Heiko

FBrust 22. Nov 2013 17:34

AW: FB2, IBDAC, Select mit IN preparen ?
 
Hallo,

wahrscheinlich funktioniert das IN-Statement nicht in Kombination mit Parametern.

Hast Du mal versucht, den SQL-String zuerst zu erstellen und dann der Query zuzuweisen?

Also ungefähr so:

Delphi-Quellcode:
SQL := 'Select Id,Name From IdName Where Id in (' + IntToStr(ID1) + ',' + InttoStr(ID2) + ....usw uaf + ')';

query.SQL.Text := SQL;
Ist jetzt nicht getestet, ich denke schon, dass Firebird mit dem IN-Statement klar kommt, aber die Formatierung ist dann anders.

Gruß
Frank

hoika 23. Nov 2013 08:12

AW: FB2, IBDAC, Select mit IN preparen ?
 
Hallo,

das hattest du falsch verstanden.
Das IN klappt ja, nur wird es in einer Schleife benutzt
(Es sind ~1000 IDs, FB macht da irgendwann schlapp,
weil das SQL-Statement zu groß wird).


Heiko

tsteinmaurer 23. Nov 2013 10:25

AW: FB2, IBDAC, Select mit IN preparen ?
 
Hallo,

Firebird hat ein ~ 64K Limit eines SQL Statements bzw. auch ein Limit von ca. 1499 Elementen in einem IN Operator. D.h. irgendein Limit könnte hier bei dir aufschlagen.

Du könntest über eine GTT gehen. Dort deine IDs insertieren und darauf das SQL mit dem IN oder einem JOIN darauf los lassen.

T.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr.

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