Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Probleme mit TADOQuery wenn zuviele Spalten? (https://www.delphipraxis.net/160101-probleme-mit-tadoquery-wenn-zuviele-spalten.html)

Jumpy 27. Apr 2011 16:24

Datenbank: Oracle • Version: 10g • Zugriff über: ADO

Probleme mit TADOQuery wenn zuviele Spalten?
 
Hallo,

ich habe in Delphi6 eine Anwendung erstellt, mit der man auf unsere DB zugreifen kann.
Jetzt hat sich gezeigt, dass es bei einer einzigen Tabelle Probleme gibt.

Die aussagekräftige Fehlermeldung lautet: Unbekannter Fehler!

Die Tabelle ist recht breit, ca. 170 Spalten. Vllt. liegt es daran?

Habe zum Testen ein Mini-Projekt gebaut: DBGrid-TDataSource-TADOQuery
(Rechner mit XP, 32bit)

Ist das Select-Statement auf einige Spalten beschränkt, klappt es:
Select Sp1, Sp2 From Tabellenname

Will ich aber alle Spalten haben, kommt diese tolle Fehlermeldung.
Select * From Tabellenname


Habe dann das Mini-Projekt auf unserer VM (Win7, 64bit) in Delphi2010 nachgebaut, SQL-Statements funktionieren hier beide! Keine Fehlermeldung.

Ich vermute, dass es irgendwie an der ADO-Komponente liegt. Ist die in D6 anderes als in D10? Was könnte es noch sein? Könnte es auch am Rechner liegen?


Edit: Noch als ich obiges geschriben habe, ist mit eingefallen, dass ich die Frage, ob es am Rechner liegt selber klären kann. Habe beide exe, die von D6 und die von D10 erzeugte, auf meinem armen kleinen alten XP Rechner laufen lassen. Bei beiden kam die Fehlermeldung. Bei exe funktionieren aber in der Win7-VM problemlos und auch mein ursprüngliches Programm läuft da fehlerfrei.
Fragt sich nur, was kann es genau sein? (Obwohl die VM 64 bit ist, wird doch mit 32 bit Treibern gearbeitet, soweit ich weiß).

shmia 27. Apr 2011 18:01

AW: Probleme mit TADOQuery wenn zuviele Spalten?
 
Hast du mal geschaut, was in der Errors Collections drinsteht?
http://www.delphipraxis.net/24671-ad...-anzeigen.html

jobo 27. Apr 2011 18:38

AW: Probleme mit TADOQuery wenn zuviele Spalten?
 
Schau Dir auch mal die Feldtypen an.
Nicht alles was mit irgendeinem anderen Treiber reingekommen ist, kommt mit ADO wieder raus. Übliche Verdächtige sind z.B. Datumsfelder mit sehr großen/kleinen Werten.
Ich würd zur groben Prüfung mal ein Select bauen mit allen Spalten außer Date Spalten.

Welcher Oracle Treiber? Der von Oracle oder der von MS oder .. ?

Bernhard Geyer 27. Apr 2011 20:34

AW: Probleme mit TADOQuery wenn zuviele Spalten?
 
Zitat:

Zitat von jobo (Beitrag 1097242)
Welcher Oracle Treiber? Der von Oracle oder der von MS oder .. ?

Der von MS ist schrott und seit 1/2 endlich offziell von MS abgekündigt.

Für Oracle-Zugriff würde ich eh den direkten Zugriff verwenden wie ihn Devart bietet.

Jumpy 27. Apr 2011 22:09

AW: Probleme mit TADOQuery wenn zuviele Spalten?
 
@shmia:
Werde ich morgen auf der Arbeit mal ausprobieren, wußte nicht das sowas geht. e.message war alles was ich bisher kannte :oops:

@jobo:
Feldtypen kann ich auch mal gucken. Ist bei 170 Feldern aber ein Angang. Komisch aber das es bei einer Maschine funzt, bei der anderen aber nicht.

Treiber natürlich von Oracle, wobei auf dem Rechner, wo es funzt ist 11g drauf, auf dem wo es nicht geht irgendwas mit Ora92 (ist das dann 9i oder so). Könnte natürlich ein Grund sein, warum es mal geht, mal nicht.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1097253)
Für Oracle-Zugriff würde ich eh den direkten Zugriff verwenden wie ihn Devart bietet.

Was ist denn direkter Zugriff? Ich bin ja schon froh, dass ich ADO benutzen soll und nicht die BDE (was man so hört).

@all: Danke schon mal für die Anregungen. Werd morgen mal weiter dran rumtüffteln.

Bernhard Geyer 27. Apr 2011 22:39

AW: Probleme mit TADOQuery wenn zuviele Spalten?
 
Zitat:

Zitat von Jumpy (Beitrag 1097280)
Treiber natürlich von Oracle, wobei auf dem Rechner, wo es funzt ist 11g drauf, auf dem wo es nicht geht irgendwas mit Ora92 (ist das dann 9i oder so). Könnte natürlich ein Grund sein, warum es mal geht, mal nicht.

Das ist sehr wahrscheinlich der Grund. Deshalb ist es so problematisch sich auf soche Treiber zu verlassen. Bei MS kann man wenigstens davon ausgehen das die Windows-Updates dafür sorgen das fast alle Rechner ähnlich aktuellen Treiberstand haben.


Zitat:

Zitat von Bernhard Geyer (Beitrag 1097253)
Was ist denn direkter Zugriff? Ich bin ja schon froh, dass ich ADO benutzen soll und nicht die BDE (was man so hört).

Direkter Zugriff = Keine (evtl. Fehlerhafte) Zwischenschicht:

Aktueller Weg:

Anwendung -> ADOExpress -> ADO -> OLE DB Provider von Oracle -> NETx-Treiber -> DB

Direkter Weg

Anwendung -> DevArt-Kompos -> DB

bzw. falls man auf den Net-Provider aufsetzen will

Anwendung -> DevArt-Kompos -> NETx-Treiber -> DB

Wo weren sich wohl vermutlich wenige Fehler verstecken?

Jumpy 2. Mai 2011 09:32

AW: Probleme mit TADOQuery wenn zuviele Spalten?
 
Hallo, mal ein Update zur Lage der Nation...

Zitat:

Zitat von Bernhard Geyer (Beitrag 1097285)
Aktueller Weg:
Anwendung -> ADOExpress -> ADO -> OLE DB Provider von Oracle -> NETx-Treiber -> DB

Ich benutze mit ODBC ja glaub ich noch eine Schicht mehr, oder zumindest einen anderen Provider. Hab mir nochmal den Connection-String angeschaut, da ist der Provider MSDASQL.1 (MS OLE DB Provider for ODBC Drivers). Dann noch der ODBC-Treiber als weitere Schicht?

Hab nun testweise mal auf ODBC verzichtet und benutze nun direkt den Oracle Provider for OLE DB und gehe damit direkt an die Datenbank und siehe da, es geht.
D.h. es scheint wirklich am ODBC-Treiber zu liegen, dass es mal geht (neuer Treiber) und mal nicht (alter Treiber).

Desweiteren habe ich auch durch mühevolles rumraten herausgefunden, dass nicht, wie zunächst vermutet, die "Breite" der Tabelle schuld ist, sondern ein Datenfeld vom Typ Long. Habe daraufhin weitere Tabellen mit Long-Datentypen gefunden, die auch Ärger machen. Leider können wir daran nichts ändern.
Ach ja, die Einstellung "Force Long retrival" oder so ähnl., die man dem ODBC-Treiber mitgeben kann, hat auch nicht geholfen.

Über kurz oder lang werden wir also wohl auf neue ODBC_Treiber wechseln müssen (da wir sowieso bald neuere Oracle Clients brauchen, kommt das sowieso irgendwann).
Nochbesser wäre wie du gesagt hast, sicher der native Zugriff, aber dazu muss noch viel Überzeugungsarbeit geleistet werden.

Danke, aber auf jeden Fall für die Tips

Bernhard Geyer 2. Mai 2011 09:36

AW: Probleme mit TADOQuery wenn zuviele Spalten?
 
Zitat:

Zitat von Jumpy (Beitrag 1098222)
..., da ist der Provider MSDASQL.1 (MS OLE DB Provider for ODBC Drivers).

Über kurz oder lang werden wir also wohl auf neue ODBC_Treiber wechseln müssen (da wir sowieso bald neuere Oracle Clients brauchen, kommt das sowieso irgendwann).

Der obige Eintrag weist auf einen MS-Treiber hin. Und dieser wird nicht aktualisiert wenn man den Oracle-Client aktualisiert.
Da MS diesen abgekündigt hat wird diese über kurz oder lang gar nicht mehr ausgeliefert, sprich: Dein Programm startet gar nicht mehr.

jobo 2. Mai 2011 10:27

AW: Probleme mit TADOQuery wenn zuviele Spalten?
 
Zitat:

..LONG.. leider können wir daran nichts ändern..
Da hilft Dir vermutlich mittelfristi auch ein toller Third Party Treiber nicht unbedingt weiter. LONG soll nicht mehr verwendet werden, der Typ wird nur noch aus Kompatibilitätsgründen unterstützt.

LOB ist angesagt.

Jumpy 2. Mai 2011 10:59

AW: Probleme mit TADOQuery wenn zuviele Spalten?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1098224)
Zitat:

Zitat von Jumpy (Beitrag 1098222)
..., da ist der Provider MSDASQL.1 (MS OLE DB Provider for ODBC Drivers).

Über kurz oder lang werden wir also wohl auf neue ODBC_Treiber wechseln müssen (da wir sowieso bald neuere Oracle Clients brauchen, kommt das sowieso irgendwann).

Der obige Eintrag weist auf einen MS-Treiber hin. Und dieser wird nicht aktualisiert wenn man den Oracle-Client aktualisiert.
Da MS diesen abgekündigt hat wird diese über kurz oder lang gar nicht mehr ausgeliefert, sprich: Dein Programm startet gar nicht mehr.

"MS OLE DB Provider for ODBC Drivers", so hab ich das verstanden, ist das MS-Ding, um ODBC-Datenquellen ansusprechen. "Ding" weil ich nicht weiß, was es wirklich ist, beim Erstellen einer Connection hab ich es unter dem Punkt Provider ausgewählt.

Es ist aber nicht der ODBC-Treiber, sondern wie gesagt der Provider für den Treiber, oder so?

In unserer modernen Maschiene wird (zumindest dem Namen nach) der selber Provider benutzt und da funktioniert es ja. Das einzige was da anders ist, ist halt der ODBC-Treiber, der dann von diesem Provider angesprochen/benutzt wird.

Ich gehe daher schon davon aus, das ein Oracle-Client-Wechsel zusammen mit einem ODBC-Treiber-Wechsel das Problem zumindest kurzfristig löst.

In allen anderen Punkten habt ihr natürlich recht, das das alles nicht das Wahre ist, aber diese Entscheidungen liegen über meiner Gehaltsstufe (wie eigentlich alles, da ich ja nur der Azubi bin ;-) ).

@jobo: s.o. Hinzukommt noch, dass die DB eigentlich zu einer Fremdsoftware gehört, die halt aus welchen Gründen auch immer noch Long-Datentypen benutzt. Das ist öfters schon bemängelt worden, aber ich glaube die Hersteller trauen sich da nicht so ran. Wahrsch. weil keiner weiß, wo es lles knallt, wenn man da mal was ändert. Stichwort Software-Evolution.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 Uhr.
Seite 1 von 2  1 2      

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