![]() |
Datenbank: MSSQL • Version: ? • Zugriff über: ADO
ADO.Open wirft exception falls IsEmpty
Code:
Der SQL-Befehl ist fehlerfrei. Wenn die Abfrage eine Ergebnismenge zurückliefert, klappt alles einwandfrei. Wenn aber keine Datensätze zurückgegeben weden, gibt es eine entsprechende Exception bei myADO.Open ("CommandText liefert keine Ergebnismenge")
myADO := TADOQuery.Create(nil);
myADO.ConnectionString := ACS; myADO.Prepared := True; myADO.SQL.Clear; myADO.SQL.Add(ASQL); myADO.Open; // exception, falls kein Dataset if not myADO.IsEmpty then begin ... end Kann man die ADO-Komponente so einstellen, dass keine Exception bei leeren Datenmengen auftritt? Wozu ist die Funktion IsEmpty gedacht, wenn doch ohnehin vorher eine Exception auftritt? |
AW: ADO.Open wirft exception falls IsEmpty
Open funktioniert nur, wenn es sich um eine Select-Statement (also eine Abfrage) handelt. Bei Insert, Update... (also allen Manipulationen der Daten...) kommt besagte Fehlermeldung, man muss hier ExecSQL verwenden.
Eigentlich bekomme ich bei ADO.Open auch bei einer leeren Ergebnismenge keine Fehlermeldung bzw. es tritt keine Exception auf. Zeig' uns bitte mal ein SQL-Statement, bei dem der Fehler auftritt, eventuell ist da ja was zu erkennen. |
AW: ADO.Open wirft exception falls IsEmpty
Es handelt sich um eine Stored Procedure, die an sich tadellos läuft und auf die ich keinen Einfluss habe. Wenn man sie in einer DB-Oberflöche aufruft, dann löuft sie ganz normal durch und liefert entweder Datensätze oder eben auch nicht.
Mich wundert eben, dass myADO.Open eine Exception wirft, wenn die Ergebnismenge leer ist. |
AW: ADO.Open wirft exception falls IsEmpty
keine Ergebnismenge != leere Ergebnismenge
|
AW: ADO.Open wirft exception falls IsEmpty
Also, das ist erstmal merkwürdig.
Ein
SQL-Code:
liefert eine leere Ergebnismenge und funktioniert mit Open.
select * from tabelle where 1 = 2
Die leere Datenmenge ansich kann also nicht das Problem sein. Meine Vermutung wäre in diesem Fall: Die Stored Procedure liefert, wenn sie keine Ergebnisse liefern kann, keine leere Ergebnismenge sondern entweder nichts oder sonst irgendwas anderes. Kannst Du uns diese Prozedure mal zeigen oder herausbekommen, was sie zurück gibt, wenn keine Ergebnismenge zurückgegeben werden kann? |
AW: ADO.Open wirft exception falls IsEmpty
Auch wenn Du keinen Einfluss auf die SP hast, hast Du vielleicht Einblick in den Code und kannst sie auf Ihr Rückgabeverhalten testen. Enthält die SP selbst vielleicht auch Exception Handling (mit Fehlerunterdrückung) und gibt im Fehlerfall was ganz anderes zurück als im Normalfall?
Also was zeigt ein SQL Werkzeug, wenn es die leere Datenmenge zurückgibt. Vielleicht einfach NULL oder eine Record Struktur, wenn ja, welche Typen? Kann ADO bzw. der Treiber, den Du verwendest damit umgehen? Ist der Treiber aktuell? Welcher? |
AW: ADO.Open wirft exception falls IsEmpty
Zitat:
Danke für Eure Kommentare! |
AW: ADO.Open wirft exception falls IsEmpty
Zitat:
Ich hatte erst vor wenigen Tagen einen Effekt in java, dass ein Select mit json Typ Konvertierung bei einem bestimmten Wert aussteigt. Der Server macht dazu zwar das log voll, aber der Effekt im Dataset ist lediglich eine ungewöhnlich kleine Datenmenge, eben bis zu der Stelle, wo sich die Daten nicht konvertieren lassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 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 by Thomas Breitkreuz