Probleme mit ADO
-
Wenn ich mein Projekt auf meinem Entwicklungsrechner ausführe, dann klappt alles einwanfrei.
Meine Anwendung greift über ADO-Query auf eine Oracle-Datenbank zu und liest dann zur Laufzeit entsprechende Daten aus der DB aus.
Kleine Erläuterung:
ich erzeuge dynamisch Checkboxen je nach Einträgen aus gewissen DB-Tabellen. Dazu gehe ich folgendermassen vor: ich stelle den SQL-Befehl zusammen, führe die Abfrage aus, erzeuge die Checkboxen und schliesse die Abfrage wieder. Dies wiederholt sich dann so ca. 10-15 mal.Wenn ich nun die Anwendung auf einem anderen PC ausführe, dann funktionieren meine Abfragen nicht mehr.
Es werden immer nur die Einträge von der ersten DB-Tabelle angezeigt. Die anderen Einträge dadagen werden nicht erzeugt.
Es erscheint dann die folgende Fehlermeldung:
"Entwerder BOF oder EOF" ist TRUE, oder der aktuelle Datensatz wurde gelöscht. Der angeforderte Vorgang benötigt einen aktuellen Datensatz."
Ich habe mich über diese Fehlermeldung schlau gemacht und herausgefunden, dass dies nichts anderes bedeutet, als dass ich versucht habe, auf einen nicht existenten Datensatz zuzugreifen.
Schön und gut, aber warum funktioniert es dann auf meinem Entwicklungsrechner ohne Probleme.
Ich vermute, dass es irgendetwas mit dem Timeout zu tun haben könnte bzw. die ADOQuery nach dem "Close()" nicht wieder geöffnet werden kann.Ich habe auf dem Entwicklungsrechner Win2000 SP1 und MDAC 2.5 SP1 installiert.
Die Testrechner waren: WinNT SP5 und MDAC 2.6 RTM, Win2000 SP1 und MDAC 2.7 RTM.Des weiteren habe ich die Anwendung auf einem WinNT SP6 und MDAC 2.1 neu erstellt und ausgeführt ohne Probleme.
Daher frage ich mal ins Forum, ob jemand auch schon mal solche Probleme mit den ADO-Komponenten hatte?
-
Habe jetzt mal die MDAC 2.7 installiert und jetzt bekomme ich auch zur Laufzeit auf meinem Entwicklungsrechner die Fehlermeldungen.
Hab das Problem auch schon eingegrenzt:
Beim Aufruf von ADQQuery->Close() erscheint die Fehlermeldung
Nur warum funktioniert der Aufruf noch, wenn ich die MDAC 2.5 habe?!
Hat sich da wo möglich was in der ADO-API geändert?Hier mal der Code-Abschnitt:
try { // hole Daten aus Tabelle Table1 ADOTempAbfrage->Close(); ADOTempAbfrage->SQL->Clear(); ADOTempAbfrage->SQL->Add("SELECT * FROM table1"); ADOTempAbfrage->SQL->Add("ORDER BY col1"); ADOTempAbfrage->Prepared = true; ADOTempAbfrage->Open(); // schreibe neue Checkboxen // (hier werden anhand des Steuerelements, des Query-Objekts, // 2 Spaltenbezeichnern, einem Trennzeichen und einer Kennung // die Checkboxen mit entsprechenden Namen und Bezeichnungen erzeugt) ErzeugeAuswahlCheckBoxen(MyScrollBox, ADOTempAbfrage, "col1", "col2", " - ", "MyKey"); ADOTempAbfrage->Close(); // <- hier tritt die Exception auf } catch(...) { }
-
Für alle, die ähnliche Probleme haben:
Das Problem lässt sich dadurch lösen, indem man das ADO Express Update von der Borland-Homepage installiert.
Dies scheint wohl ein bekannter Fehler ab der MDAC 2.6 zu sein.