Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi OleException bei Select auf Spalte mit Datentyp Date (https://www.delphipraxis.net/96848-oleexception-bei-select-auf-spalte-mit-datentyp-date.html)

sirius 31. Jul 2007 20:32

Datenbank: Oracle • Version: 9.0.1 • Zugriff über: ADO

OleException bei Select auf Spalte mit Datentyp Date
 
Ich habe eine Datenbank in der in einer Tabelle Zeiten drinstehen. Diese Spalte ist vom Datentyp "Date". Jetzt würde ich gerne so eine Zeit auslesen (reinschreiben funktioniert problemlos). Das Auslesen wünschte ich mir so:
Delphi-Quellcode:
with ZQuery.SQL do begin
  clear;
  add('Select');
  add('min('+cdatum+') as k,');
  add('max('+cdatum+') as g');
  add('from '+cdbt+cdatum);
end;
DoActive(zquery); //zquery.active:=true
if zquery.isempty then modalresult:=mrabort;
mindate:=trunc(ZQuery.fieldbyname('k').AsFloat);
maxdate:=trunc(ZQuery.fieldbyname('g').AsFloat);
Hinter Doactive steht nur ein "Zquery.active:=true;" mit Exceptionbehandlung. Es ist egal, ob ich den Ausdruck direkt hinschreibe oder in dieser Methode. Der Fehler ist derselbe.
Achja und die Konstanten sind Strings mit folgendem Inhalt
cDatum='DATUM'
cdbt='DBT_'
Wenn ich active auf true setze kommt eine EOleException mit der Message: "Es gibt keine weiteren Ergebnisse."
Über die BDE lief das alles früher mal ohne Probleme/Exception.

Nach ausgezupften Haaren und langem Suchen (Diese Meldung ergibt doch gute 2,5 Ergebnisse bei Google) habe ich diese Lösung gefunden:
Delphi-Quellcode:
with ZQuery.SQL do begin
  clear;
  add('Select');
  add('min('+cdatum+'-to_date(''31/12/1899'',''DD/MM/YYYY'')) as k,');
  add('max('+cdatum+'-to_date(''31/12/1899'',''DD/MM/YYYY'')) as g');
  add('from '+cdbt+cdatum);
end;
DoActive(zquery);
if zquery.isempty then modalresult:=mrabort;
mindate:=trunc(ZQuery.fieldbyname('k').AsFloat);
maxdate:=trunc(ZQuery.fieldbyname('g').AsFloat);
Nun finde ich die Lösung nicht so ganz zufriedenstellend. Ich weis nun nicht, ob es an dem OLE DB-Treiber liegt (der Connectionstring ist "Provider=OraOLEDB.Oracle.1;Persist Security Info=True;Data Source=TestDB") oder an den ADO-Kompos. Die Query ist übrigens mit einer ADOConnection verbunden.

Ansonsten läuft alles einwandfrei (mit der Datenbank)

Noch ne Sache: Wenn diese Exception aufgetreten ist, dann kann einer meiner Threads (der in regelmäßigen Abständen eine andere Tabelle überprüft und seine eigenen ADO-Instanzen hat) plötzlich die einfachste Abfrage nicht mehr (ein select auf ein Number- und ein VarChar- Feld) das sonst, parallel zu allen anderen Sachen immer funktioniert. Der wirft auch ne Exception.

Vielleicht kennt das Problem jemand und ich habe nur die ADO-Kompos in die falsche Hand genommen.

Danke im Vorraus!

Bernhard Geyer 31. Jul 2007 20:36

Re: OleException bei Select auf Spalte mit Datentyp Date
 
Meine Erfahrungen bei Oracle-DB-SW ist das winzige Versionsunterschiede DB, Net-Client, ... zu gewaltigen Problemen führen können.
Ich empfehle dir z.B. Native Kompos wie von Core Labs zu verwenden und ADO links liegen zu lassen.

sirius 31. Jul 2007 20:56

Re: OleException bei Select auf Spalte mit Datentyp Date
 
Das wären dann die "Oracle Data Access components". (bei mir für Delphi 7)

Werd ich demnächst mal ausprobieren.
Zitat:

In Direct mode, ODAC connects to Oracle directly without using Oracle client software. In this mode, ODAC requires only TCP/IP support, and lets you build really thin database applications.
Bedeutet dies, ich muss auf dem Client-PC nix mehr installieren? Nur die Exe drauf und ab gehts?

Aber vielleicht hat ja trotzdem noch jemand auf das ADO-Problem eine Antwort.

Bernhard Geyer 31. Jul 2007 21:53

Re: OleException bei Select auf Spalte mit Datentyp Date
 
Zitat:

Zitat von sirius
Bedeutet dies, ich muss auf dem Client-PC nix mehr installieren? Nur die Exe drauf und ab gehts?

Ja. Und damit hat man nur noch 3 Fehlerquellen:

Eigene App, Core Labs Compos, Oracle DB

im Gegensatz zu ADO:

Eigene App, ADOExpress, ADO, OLE DB-Provider (Oracle), Oracle DB

wobei ich vor allem die Oracle-Teile erfahrungstechnisch nicht gerade sehr Fehlerfrei sind.

sirius 1. Aug 2007 15:43

Re: OleException bei Select auf Spalte mit Datentyp Date
 
Hmmm, na ganz alleine scheint die Exe dann doch nicht zu gehen. Zumindest beim ersten TEst konnte ich ih nicht überreden die bpl's selber mitzunehmen. :gruebel:

aber, das hat sich erstmal. In diesem Projekt ist die Begeisterung nicht grad hoch gewesen $200 auszugeben. Unis sind halt immer pleite. Naja, mal sehen, vielleicht im nächsten Projekt.

Jetzt muss ich mich erstmal mit ADO rumschlagen.

Bernhard Geyer 1. Aug 2007 16:20

Re: OleException bei Select auf Spalte mit Datentyp Date
 
Mußt du den bei Zeos bei Oracle über ADO gehen? Wird hier nicht der NET-Client unterstützt?

sirius 1. Aug 2007 16:36

Re: OleException bei Select auf Spalte mit Datentyp Date
 
Zitat:

Zitat von Bernhard Geyer
Zeos bei Oracle

:gruebel:
Ich habe bisher noch nix mit Zeos am Hut gehabt. Oder denkst du, weil es "ZQuery" heist, ist es Zeos? Also das "Z" steht für Ziel und ist ein TADOQuery.

Bernhard Geyer 1. Aug 2007 20:35

Re: OleException bei Select auf Spalte mit Datentyp Date
 
Zitat:

Zitat von sirius
Zitat:

Zitat von Bernhard Geyer
Zeos bei Oracle

:gruebel:
Ich habe bisher noch nix mit Zeos am Hut gehabt. Oder denkst du, weil es "ZQuery" heist, ist es Zeos?

Genau
Zitat:

Zitat von sirius
und ist ein TADOQuery.

Also noch viel Glück mit ADO. Micht reicht schon die vielen Fehler in Oracle-SW ohne ADO/OLE DB.

p80286 25. Jan 2012 09:56

AW: OleException bei Select auf Spalte mit Datentyp Date
 
Den Fehler kann ich z.B. so provozieren:
Code:
select * from Name,Adresse where name='Rumpelstielzchen'
Ok Rumpelstielzchen sollte es geben, aber dann geht die Luzie ab.
Ich habe den Eindruck, daß "Es gibt keine weiteren Ergebnisse" auf einen Bufferoverflow oder ähnliches hindeutetet, weil es zu viele Datensätze in der Ergebnismenge gibt

Gruß
K-H

Bernhard Geyer 25. Jan 2012 10:00

AW: OleException bei Select auf Spalte mit Datentyp Date
 
Zitat:

Zitat von p80286 (Beitrag 1147489)
Den Fehler kann ich z.B. so provozieren:
Code:
select * from Name,Adresse where name='Rumpelstielzchen'
Ok Rumpelstielzchen sollte es geben, aber dann geht die Luzie ab.
Ich habe den Eindruck, daß "Es gibt keine weiteren Ergebnisse" auf einen Bufferoverflow oder ähnliches hindeutetet, weil es zu viele Datensätze in der Ergebnismenge gibt

Gruß
K-H

WOW. 4 Jahre alten Thread aufwärmen.

Hast du alle Oracle-Treiber auf aktuellen Stand? Gehst du auch über die fehlerhaften MS-Oracle-ADO-Treiber auf die DB los?
Wir konnten im Studium mit fehlerhaften SQL-Statement das ganze Uni-Netz wegen Fehler in einem Oracle-Treiber lahm legen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:42 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