AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken ADO.Open wirft exception falls IsEmpty
Thema durchsuchen
Ansicht
Themen-Optionen

ADO.Open wirft exception falls IsEmpty

Ein Thema von HJay · begonnen am 10. Dez 2015 · letzter Beitrag vom 11. Dez 2015
Antwort Antwort
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#1

ADO.Open wirft exception falls IsEmpty

  Alt 10. Dez 2015, 15:21
Datenbank: MSSQL • Version: ? • Zugriff über: ADO
Code:
  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
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")

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?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: ADO.Open wirft exception falls IsEmpty

  Alt 10. Dez 2015, 15:53
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.
  Mit Zitat antworten Zitat
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#3

AW: ADO.Open wirft exception falls IsEmpty

  Alt 10. Dez 2015, 16:09
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.
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#4

AW: ADO.Open wirft exception falls IsEmpty

  Alt 10. Dez 2015, 16:28
keine Ergebnismenge != leere Ergebnismenge
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: ADO.Open wirft exception falls IsEmpty

  Alt 10. Dez 2015, 16:30
Also, das ist erstmal merkwürdig.

Ein select * from tabelle where 1 = 2 liefert eine leere Ergebnismenge und funktioniert mit Open.

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?
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: ADO.Open wirft exception falls IsEmpty

  Alt 10. Dez 2015, 16:44
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?
Gruß, Jo
  Mit Zitat antworten Zitat
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#7

AW: ADO.Open wirft exception falls IsEmpty

  Alt 11. Dez 2015, 10:40
keine Ergebnismenge != leere Ergebnismenge
Ich denke, diese Anmerkung wird letztlich zielführend sein. Mir war der Unterschied so nicht bewusst. Der DB-Administrator überprüft die Stored procedure.

Danke für Eure Kommentare!
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: ADO.Open wirft exception falls IsEmpty

  Alt 11. Dez 2015, 13:42
Der DB-Administrator überprüft die Stored procedure.
Es würde mich interessieren, wie das Ergebnis davon aussieht.
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 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