Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   auf Query-Inhalt kann nach ExecSQL zugegriffen werden (https://www.delphipraxis.net/205973-auf-query-inhalt-kann-nach-execsql-zugegriffen-werden.html)

hoika 5. Nov 2020 17:44

Datenbank: Firebird • Version: 2.01 • Zugriff über: IBDAC

auf Query-Inhalt kann nach ExecSQL zugegriffen werden
 
Hallo,
ich habe hier ein merkwürdiges Problem.

Delphi-Quellcode:
var
  Q: TQuery;
  ID: Integer;
begin
  ...
  Q.SQL.Text:= 'SELECT Gen_ID(G_Generator_ID,1) FROM RDB$Database ';
  Q.ExecSQL;
  ID := Q.Fields[0].AsInteger;
Und das klappt !!!
Das müsste doch Open statt ExecSQL sein.
Ist das irgendein Cache?

Bernhard Geyer 5. Nov 2020 17:51

AW: auf Query-Inhalt kann nach ExecSQL zugegriffen werden
 
Die Query wird vermutlich immer versuchen ein Resultset anzufordern, auch bei ExecSQL.

hoika 5. Nov 2020 17:56

AW: auf Query-Inhalt kann nach ExecSQL zugegriffen werden
 
Hallo,
naja, das ist "doof".
Warum will ich z.B. bei einem Update ein Result-Set?

Nun ja, ich bin bloß bei einem Code-Review drüber gestolpert.

Vielleicht wird ja im IBDAC nach GEN_ID gescannt,
das kann ich mir aber nicht vorstellen.

himitsu 5. Nov 2020 18:29

AW: auf Query-Inhalt kann nach ExecSQL zugegriffen werden
 
Eigentlich wäre ich auch davon ausgegangen, dass beim ExecSQL/Execute kein ResultSet runtergeladen wird,
also nur "Ausführen" und fertig, im Gegensatz zum Open bzw. Active=True.

:gruebel:



Dachte beim PgQuery zum PgScript wäre der einzige Unterschied, dass PgScript vorher den SQL.Text an den ; aufteilt und dann mehrere Queries einzeln ausführt,
aber dass ansonsten Beides beim Execute/ExecSql gleich arbeitet, also nie das ResultSet runterlädt.

Beim Open/Active wird zumindestens immer ein ResultSet verlangt, sonst knallt es dort.
PgQuery hat hier sogar einen Bug, dass es dann, wenn das SELECT mit Spalten ohne "Wert", das Query doppelt ausführt ... so dauert
Delphi-Quellcode:
SELECT pg_sleep(5)
beim Open/Active plötzlich 10 Sekunden. :stupid:
Schön auch beim Ausführen von Funktionen, wenn die drinnen dann alles doppelt machen ... hochzählen, insert usw., was dann knallt

hoika 5. Nov 2020 19:08

AW: auf Query-Inhalt kann nach ExecSQL zugegriffen werden
 
Hallo,
ja, das dachte ich auch.
Aber ist nicht so, zumindestens in meiner IBDAC-Version.

jobo 5. Nov 2020 20:16

AW: auf Query-Inhalt kann nach ExecSQL zugegriffen werden
 
Ich habe dunkel in Erinnerung, dass es mit SP zu tun haben könnte.
Die haben u.U. Out Parameter. Und da ist vielleicht irgendso eine komische Mechanik drin, die das dann in ein Resultset tütet.
Vielleicht betrifft das auch so "stink normale" Daten wir "Rows Affected" beim Update.

Hab ich aber vielleicht auch nur geträumt.

hoika 5. Nov 2020 20:59

AW: auf Query-Inhalt kann nach ExecSQL zugegriffen werden
 
Hallo,
Zitat:

Rows Affected
Ja, wenn man eine Update-Query z.B. im IBExpert ausführt gibt es ja auch eine "xx rows updated/affected"-Meldung.
Dann holt der liebe Holger ;) bestimmt auch vom FB irgendwie selber.

tsteinmaurer 5. Nov 2020 21:16

AW: auf Query-Inhalt kann nach ExecSQL zugegriffen werden
 
Steht zumindest in der IBDAC Doku https://www.devart.com/ibdac/docs/de....execute().htm ziemlich klar, dass ein ExecSQL auf einem SELECT ein Open durchführt.

hoika 5. Nov 2020 21:23

AW: auf Query-Inhalt kann nach ExecSQL zugegriffen werden
 
Hallo,
hm Thomas der Link geht zu Execute und nicht ExecSQL.

Aber könnte die Lösung sein.

tsteinmaurer 5. Nov 2020 21:50

AW: auf Query-Inhalt kann nach ExecSQL zugegriffen werden
 
Ja, sorry. Vergessen zu erwähnen: ExecSQL macht das selbe wie Execute.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 Uhr.
Seite 1 von 2  1 2      

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