Zum Inhalt springen

Access97 als Frontend für Oracle


ChrisDaHub

Empfohlene Beiträge

Hallo,

sorry, dass ich schon wieder einen Thread öffne, irgendwie kommt es mir aber so vor, als würde mich hier keiner verstehen.

Ich versuch es nochmal:

Ich möchte mit Access97 über ODBC auf eine RIEßENGROßE Oracle-Datenbank zugreifen. Da die Access-Interne Jet-Engine die Datenmenge nicht packt, und der Oracle-SQL-Server sowieso schneller ist, möchte ich mit DAO arbeiten.

D.H. Access ist nur der "Client", welcher eine SQL-Anweisung an die Oracle Datenbank schickt, die Antwort abwartet und diese dann z.B. auf dem Bildschirm anzeigt.

Ich habe hier schon ohne Ende Lösungen bekommen, bei allen war aber immer die Jet-Engine aktiviert.

Vielleicht kann mir jetzt jemand helfen......

PROFIS - meldet euch! :rolleyes:

Gruß

Chris :cool:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei Verwendung von Access --> Oracle liegen die Performanceprobleme hauptsächlich am ODBC-Treiber. Zumindest bei Oracle 8.0.x und früher. Ab 8.1 ist es besser geworden.

Frage: Wenn du DAO benutzen möchtest, warum nimmst du dann Access als Frontend - so wie ich mir das vorstelle musst du dann auf die ganzen Access-Funktionalitäten verzichten und nur VBA-Code schreiben.

[korrigiert mich, wenn das falsch ist]

Soweit ich weiss ist es mit Access nicht möglich Remote-Tabellen unter Verwendung von DAO zu verknüpfen (von dem Installationsaufwand der Anwendung und der Inkompatibilität mancher Datentypen mal ganz abgesehen).

Wäre VB ne Alternative? Da hat man die Wahl zwischen JET, ODBC, ADO / DAO.

(Oder gleich Java + JDBC ...)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schau dir mal die Access(97)-Hilfe zu den Themen Workspaces und Connections an. Die Beispiele sind recht hilfreich. Da wird meist unterschieden zwischen JET und ODBCDirect.

Der erste Schritt:

' ODBCDirect Workspace-Objekt erstellen.

Dim wrkODBC As Workspace

Set wrkODBC = CreateWorkspace("NewODBCWorkspace", "Admin", "", dbUseODBC)

Der zweite Schritt:

' Connection-Objekt mit den zusätzlichen

' Informationen aus der Verbindungszeichenfolge

' öffnen. Wenn die Informationen unzureichend sind,

' sollte ein Fehler aufgefangen und nicht das

' Dialogfeld des ODBC-Treiber-Managers angezeigt

' werden.

MsgBox "Connection1 öffnen..."

Set conPubs = wrkODBC.OpenConnection("Connection1", dbDriverNoPrompt, , "ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

Und hier wirds lustig - leider ist das Beispiel für SQL-Server. Für Oracle müssen spezielle Änderungen gemacht werden. Auf jeden Fall muss erst mal eine DSN angelegt werden. Eventuell muss in der fertigen Anwendung das Passwort bei der 1.Verbindung eingegeben werden.

Hoffe das hilft.

Link zu diesem Kommentar
Auf anderen Seiten teilen

so... und was mach ich hier falsch???

strTest = InputBox("Bedingung eingeben", "Eingabe")

Set WS = CreateWorkspace("ODBC1", "Admin", "", dbUseODBC)

Set db = WS.OpenConnection("PROD", dbDriverNoPrompt, , "ODBC;DATABASE=PROD;UID=pdv22;PWD=pass;DSN=PROD")

Da bleibt er immer mit dem Laufzeitfehler 3146: "ODBC-Aufruf fehlgeschlagen" hängen.

Chris :rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Folgende Einstellungen funzen für Oracle ODBC 8.01.73 (8.1.7)

Voraussetzungen:

1. Du Hast Oracle Net8 auf deinem Rechner mit Verbindung zur Datenbank. Und natürlich die Oracle ODBC-Treiber.

2. %ORACLE_HOME%\network\admin\tnsnames.ora enthält Eintrag für die Datenbank (ServiceName)

3. Du kannst dich unter Verwendung dieses Namens mit der DB verbinden. (z.B. mt SQL-PLUS)

ACHTUNG: Passwort muss pro Verbindung eingegeben werden (leider).


'Verbindung zu einer Oracle 8.1.7 DB via ODBC

Public Function TestODBC()


    'Deklaration

    Dim wrk As DAO.Workspace

    Dim con As DAO.Connection

    Dim rs As DAO.Recordset

    Dim sSQL As String, sServiceName As String, sConnect As String, sUserName As String


    'Parameter festlegen

    sUserName = "scott"

    sServiceName = "Hier Datenbankname/Servicename eingeben"


    'DSN muss angepasst werden:

    sConnect = "ODBC;DSN=ora_scott;UID=" & sUserName & ";DBQ=" & sServiceName

    sSQL = "select * from scott.emp"


    'Zuerst das Workspace

    Set wrk = CreateWorkspace("MyODBCWorkspace", "Admin", "", dbUseODBC)


    '==> Jetzt können wir die ODBC-Verbindung öffnen

    Set con = wrk.OpenConnection("MyConnection", , , sConnect)


    '==> Nun das Recordset öffnen

    Set rs = con.OpenRecordset(sSQL, dbOpenDynamic)

    Debug.Print rs.Fields(0), rs.Fields(1)


    'Und nun aufräumen

    rs.Close

    con.Close

    wrk.Close

    Set rs = Nothing

    Set con = Nothing

    Set wrk = Nothing


End Function


Alles klar?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Olli_Master

Folgende Einstellungen funzen für Oracle ODBC 8.01.73 (8.1.7)



'Verbindung zu einer Oracle 8.1.7 DB via ODBC

Public Function TestODBC()


    'Deklaration

    Dim wrk As DAO.Workspace

    Dim con As DAO.Connection

    Dim rs As DAO.Recordset

    Dim sSQL As String, sServiceName As String, sConnect As String, sUserName As String


    'Parameter festlegen

    sUserName = "scott"

    sServiceName = "Hier Datenbankname/Servicename eingeben"


    'DSN muss angepasst werden:

    sConnect = "ODBC;DSN=ora_scott;UID=" & sUserName & ";DBQ=" & sServiceName

    sSQL = "select * from scott.emp"


    'Zuerst das Workspace

    Set wrk = CreateWorkspace("MyODBCWorkspace", "Admin", "", dbUseODBC)


    '==> Jetzt können wir die ODBC-Verbindung öffnen

    Set con = wrk.OpenConnection("MyConnection", , , sConnect)


    '==> Nun das Recordset öffnen

    Set rs = con.OpenRecordset(sSQL, dbOpenDynamic)

    Debug.Print rs.Fields(0), rs.Fields(1)


    'Und nun aufräumen

    rs.Close

    con.Close

    wrk.Close

    Set rs = Nothing

    Set con = Nothing

    Set wrk = Nothing


End Function


Nur als Hinweiss, Deine Funktion hat kein Rückgabewert. Wenn du kein Rückgabewert brauchst, solltest du dann lieber Subs verwenden.

Mfg

blear

Link zu diesem Kommentar
Auf anderen Seiten teilen

Toller Tipp! Passend zum Thema und sehr hilfreich.

Natürlich fehlt noch eine Fehlerbehandlung für ODBC-Runtime-Fehler. So ergibt sich dann der Rückgabewert. Außerdem müssten die vordefinierten Variablen in Funktionsparameter umgewandelt werden, damit die Funktion ihren Zweck erfüllt.

Aber daum ging es gar nicht.

Besser?


'Verbindung zu einer Oracle 8.1.7 DB via ODBC

Sub TestODBC()


[...]


End Sub

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Service-Name (auch TNS Service Name oder Net8 Service Name genannt) wird bei der Einreichtung der DNS mit angegeben.

----------------

Außerdem sollte auf deinem Rechner eine Datei:

%ORACLEHOME%\network\admin\tnsnames.ora

geben. Da sind alle Servicenamen eingetragen. Wenn nicht kannst du keine Verbindung zur Datenbank aufbauen!

Bei einer Oracle-Client Installation wird ein GUI-Tool zur Konfiguration der Verbindungen installiert.

Net8 Configuration Assistant

(oder Net8 Easy Config)

Der erstellt diese Einträge.

----------------

Check noch mal, ob du alle Bedingungen erfüllst:

1. Oracle Client-Installation ist vorhanden (inkl. Net8)

2. Verbindung zur Datenbank ist möglich (via SQLPLUS)

3. ODBC-Treiber ist installiert.

4. Du kannst im Access die Tabellen über "Verknüpfen" einbinden

Wenn das alles funzt, dann klappt auch der ODBC-Aufruf via VBA.

Hilft das?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Funktioniert alles.... mit Verknüpfung etc.....

Hier ist der Eintrag in die TNSNAMES.ORA:

PROD.world =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS =

(COMMUNITY = tcp.world)

(PROTOCOL = TCP)

(Host = 170.60.66.70)

(Port = 1521)

)

)

(CONNECT_DATA = (SID = PROD)

)

)

Was ist jetzt da der Servicename?

DSN-Name ist PROD - oder???

Chris

Link zu diesem Kommentar
Auf anderen Seiten teilen

DSN-Name ist frei wählbar (unter ODBC-Datenquellen)

Service-Name ist PROD

(bzw. PROD.world)

Du kannst es auch so machen, das der DSN gleich dem Service-namen ist. Das ist vollkommen egal.


    sConnect = "ODBC;DSN=PROD;UID=pdv22;DBQ=PROD"

Wichtig ist das DBQ=PROD

wenn das nicht geht, dann mal "DBQ=PROD.WORLD" ausprobieren.

Jetzt sollte es aber klappen.

Zur Not kannst du dir auch die Eigenschaften der "Verknüpften Tabelle" ansehen. (ich glaube das ist der Eintrag: CurrentDB.TableDefs("Tabellenname").Connect )

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also - nochmal ganz langsam!

Verknüpfe noch mal ein paar Tabellen auf die altbewährte Methode. Dann führe mal folgenden VBA-Code aus:


'Ausgabe der Connect-Eigenschaft aller verknüpften Tabellen

Public Sub Test()

    Dim tdf As TableDef

    For Each tdf In CurrentDb.TableDefs

        If Not IsNull(tdf.Connect) Then MsgBox tdf.Connect

    Next tdf

End Sub

Die Ausgabe gibt genau den Connect-String aus, den du für die jeweilige Datenbank benötigst.

Nur mal zur Info:

Welche Version vom ODBC-Treiber hast du installiert? Und welche Datenbankversion verwendet ihr?

Versuchs mal und sag Bescheid, ob's klappt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...