Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Access97 als Frontend für Oracle

Empfohlene Antworten

Veröffentlicht

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:

Hallo,

für sowas habe ich immer Toad benutzt.

Findest du hier.

Normalerweise reicht die Free Toad Variante die es auch auf der Seite gibt.

Gruß Jaraz

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 ...)

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.

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:

Kommt die gleiche Meldung auch bei

dbDriverPrompt?

Außerdem kann das Passwort bei Oracle meines Wissens nach nicht per ODBC übergeben werden.

Hi,

ja - dann auch.

Er will zwar dann als erstes eine Manuelle Auswahl der Quelle, aber der Fehler kommt immernoch.

Das mit dem Passwort ist no Problem. Das pfunzt.

un jetz?!?

chris :confused:

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?

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

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

Sorry, so war das nicht gemeint.

Wollte nur darauf hinweisen, war wirklich nicht bös gemeint!

:confused:

Hi,

hmm... jetzt fehlt mir noch der Servicename...

Ist nicht zufällig der selbe wie der DSN-Name?

Chris;-)

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?

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

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 )

Der bringt mir immernoch diesen Laufzeitfehler *heul*

chris

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.