Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Exception bei leerem Result (https://www.delphipraxis.net/152590-exception-bei-leerem-result.html)

himitsu 29. Jun 2010 07:42

AW: Exception bei leerem Result
 
Delphi-Quellcode:
if UL.DSQLExecute(trans, stmt, SQL_DIALECT, nil) then
  while UL.DSQLFetch(DB, trans, stmt, 1, sqlda) do
    Writeln(format('%s %s %s', [sqlda.AsString[0], sqlda.AsString[1], sqlda.AsString[2]]));
Ich kenn diese Komponente(nsammlung) zwar auch nicht, aber was passiert denn hierbei?
(ich vermute mal DSQLExecute hat auch irgendeinen prüfbaren Rückgabewert)

PS: Gibt es eventuell irgendwo sowas wie einstellbare Optionen, bei dieser Komponente?
Wo man also einstellen kann, ob z.B. DSQLFetch eine Exception wirft oder nur False liefert.

idefix2 29. Jun 2010 09:47

AW: Exception bei leerem Result
 
Ich habe jetzt das Problem einmal im progdigy Forum geposted.

Die Klasse TUIBLibrary hat mehrere execute Methoden, die sich in den zu übergebenden Parametern unterscheiden.
Execute hat nur einen TParams Parameter, während Execute2 einen TParams und einen TResult Parameter hat. Ich war deshalb der Meinung, dass ich Execute2 verwenden muss, wenn ich ein Result erwarte - möglicherweise liegt da der Fehler, weil das Beispielprogramm verwendet execute und nicht execute2, und bekommt das Ergebnis im TParams zurück. Allerdings gibt es beim Beispielprogramm nicht gleichzeitig input und output Parameter. Ich werde jetzt in der Richtung weitersuchen, vielleicht komme ich doch noch drauf, wie es richtig geht :)
Ich hatte gehofft, dass irgendwer hier diese Library verwendet und die Lösung weiss, aber so verbreitet scheint sie doch nicht zu sein.


DSQLExecute ist eine procedure und hat keinen Rückgabewert. Das angeführte Codeschnipsel ist einem UIB Beispielprogramm entnommen, leider finde ich dort kein Beispiel, das einem SQL-Befehl Input Parameter übergibt und dann ein Resultset zurückgeliefert bekommt, sondern nur Beispiele mit SQL-Befehlen mit Parametern ohne Resultset und solche mit fixem SQL-Befehl mit Resultset, aber dafür ohne Parameter.

idefix2 3. Jul 2010 08:08

AW: Exception bei leerem Result
 
Hallo, das Problem ist gelöst.

Die Firebird API kennt zwei verschiedene Execute Methoden, execute und execute2, und execute2 war die falsche :).

Execute ist für Queries, die beliebig viele (zwischen 0 und n) Ergebniszeilen liefern, und hat keinen Result Parameter, weil die Ergebniszeilen danach mittels fetch der Reihe nach geholt werden müssen.
Execute2 ist für Queries, die genau eine Zeile als Ergebnis zurückliefern, und dieser Wert wird in der Result Variablen übergeben. Wenn es kein Ergebnis gibt, löst execute2 eine Exception aus.

Das Ganze ist, wie so vieles andere, nirgends richtig dokumentiert oder zumindest nicht so leicht zufinden, aber im progdigy Forum habe ich die Erklärungen bekommen. Der Hintergrund dazu ist im Firebird API Guide nachzulesen, wenn man dort gründlich danach sucht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 Uhr.
Seite 2 von 2     12   

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