Announcement

Collapse
No announcement yet.

ADO MS-SQL ORACLE

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO MS-SQL ORACLE

    Hallo zusammen,<BR>
    ich habe eine DB-Appl. geschrieben, die über <B> ADO </B>und den OLE-DB Treiber auf einen <B>MS-SQL 2000 Server</B> zugreift.
    Außerdem soll die Anwendung in der Lage sein (durch Austausch des Providers) auf einen <B>ORACLE 9.x Server</B> zuzugreifen. Mit dem <B>MS-ORACLE-Treiber</B> funktioniert dies auch problemlos. Aufgrund neuer Anforderungen (BLOB..) muß ich nun auf den <B>ORACLE-OLE-DB </B>Treiber zurückgreifen. Hier erhalte ich aber leider bei einem einfachen select schon einen <B>EOLEException-Error</B> mit Zeichenfolgen wie zB. @MS ,?? oder auch eine leere Fehlermeldung.
    Durch Löschen und Neuanlegen einer ADODataSet-Komponente konnte ich teilweise (wenn auch aufwendig) den Fehler wegbekommen. Dies funktioniert aber leider auch nicht bei allen Tables !?

    Kann sich einer dieses Verhalten erklären ?,<BR>
    Vielleicht Herr Kosch ???

    Konfiguration:
    Delphi 7 Enterprise, ADO 2.8
    Windows XP prof.

    Gruß,<BR>
    Bernd

  • #2
    Ich würde dir empfehlen, auf Oracle nicht über ADO zuzugreifen, sondern direkt mit nativen Komponenten wie <a href="http:/crlab.com/odac/">Oracle Data Access Components</a> oder <a href="http://www.allroundautomations.nl/doa.html">Direct Oracle Access</a>. Damit sparst Du dir einiges an Fehlern/Problemen, da für Oracle der ADO-Treiber auch nur einer von hundert Möglichkeiten ist (und da M$ ja eh schon ADO.NET-Propagiert) auch nicht sehr wichtig ist. Diese Native-Komponenten sind nur auf Oracle zugeschnitten und unterstützen auch alle möglichen Oracle-Erweiterungen

    Comment


    • #3
      Genau dies (Zwei Appl., je eins für MS-SQL/ORACLE) wollte ich ja aber durch ADO vermeiden ! Einfach den Provider wechseln und mit gleicher Applikation weitermachen...
      Soviel zur Theorie.
      Eigentlich habe ich die SQL-Abfragen incl. Datentypen auf den kleinsten gemeinsamen Nenner gebracht. Dennoch stolpere ich über die beschriebenen Fehler

      Comment


      • #4
        > Genau dies (Zwei Appl., je eins für MS-SQL/ORACLE) wollte ich ja aber durch ADO vermeiden ! Einfach den Provider wechseln und mit gleicher Applikation weitermachen... Soviel zur Theorie.

        Die Theorie wird auch schon aufgrund der Unterschiede im SQL-Dialekt scheitern.

        Aber wenn Du dein Programm auf TDataset-Schnittstelle aufsetzt kommst Du auch damit zurecht, ohne alles auf ADO zu setzen. Selbst haben wir MS-SQL/MySQL und Oracle - jeweils mit nativer Anbindung - im Einsatz. Das Stichwort ist hier das Bridge-Pattern

        Comment


        • #5
          Tja, das Problem ist nicht der Provider, sondern die Datentypen, die der Provider liefert.

          Integer Werte werden unter Oracle als Numeric angelegt und wenn man im DataSet die Felder bereits zu Designtime angelegt hat, dann tritt ein Fehler auf. Ein Integerfeld ist eben kein Numericfeld.

          Andererseits gibt es ansonsten keine Probleme, Ich habe eine Anwendung die nur mit ADO MS-SQL, Oracle und Sybase unterstützt, wobei beide Oracleprovider funktionieren

          Comment


          • #6
            Diese Punkte sind für mich alle soweit nachvollziehbar...
            <P>
            Wobei sich aber zwei Fragen ergeben:</P>
            <P>
            Warum funktioniert bei mir der MS-ORACLE-Treiber ohne Probleme und der ORACLE-Treiber nicht ?</P>
            <P>
            Wie kann man mit Feldern vernünftig umgehen (Zuweisungen, Eigenschaften etc.), ohne sie zur Designtime anzulegen ?</P>
            <P&gt

            Comment


            • #7
              Sorry, war etwas unterwegs ...

              Prinzipiell spreche ich alle Felder auf die klassische Weise mit

              DataSet.FieldByName( <ColumnName ).As<DataType> an.

              Interessanterweise habe ich dann auch keine Probleme ein Oracle-Float Wert als Integer auszulesen und auch die Zuweisung klappt problemlos.

              Generell ist der Oracle eigene Treiber um längen besser als der von MS, da dieser nur für die Zeit, als Oracle ADO noch ignoriert hat, benötigt wurde.

              Michae

              Comment

              Working...
              X