ChrisDaHub Geschrieben 5. Juni 2002 Geschrieben 5. Juni 2002 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! Gruß Chris :cool: Zitieren
Jaraz Geschrieben 5. Juni 2002 Geschrieben 5. Juni 2002 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 Zitieren
Olli_Master Geschrieben 5. Juni 2002 Geschrieben 5. Juni 2002 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 ...) Zitieren
Olli_Master Geschrieben 5. Juni 2002 Geschrieben 5. Juni 2002 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. Zitieren
ChrisDaHub Geschrieben 5. Juni 2002 Autor Geschrieben 5. Juni 2002 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 Zitieren
Olli_Master Geschrieben 5. Juni 2002 Geschrieben 5. Juni 2002 Kommt die gleiche Meldung auch bei dbDriverPrompt? Außerdem kann das Passwort bei Oracle meines Wissens nach nicht per ODBC übergeben werden. Zitieren
ChrisDaHub Geschrieben 5. Juni 2002 Autor Geschrieben 5. Juni 2002 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: Zitieren
Olli_Master Geschrieben 5. Juni 2002 Geschrieben 5. Juni 2002 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? Zitieren
BlearSun Geschrieben 5. Juni 2002 Geschrieben 5. Juni 2002 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 Zitieren
Olli_Master Geschrieben 6. Juni 2002 Geschrieben 6. Juni 2002 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 Zitieren
BlearSun Geschrieben 6. Juni 2002 Geschrieben 6. Juni 2002 Sorry, so war das nicht gemeint. Wollte nur darauf hinweisen, war wirklich nicht bös gemeint! :confused: Zitieren
ChrisDaHub Geschrieben 6. Juni 2002 Autor Geschrieben 6. Juni 2002 Hi, hmm... jetzt fehlt mir noch der Servicename... Ist nicht zufällig der selbe wie der DSN-Name? Chris;-) Zitieren
Olli_Master Geschrieben 6. Juni 2002 Geschrieben 6. Juni 2002 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? Zitieren
ChrisDaHub Geschrieben 7. Juni 2002 Autor Geschrieben 7. Juni 2002 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 Zitieren
Olli_Master Geschrieben 7. Juni 2002 Geschrieben 7. Juni 2002 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 ) Zitieren
ChrisDaHub Geschrieben 7. Juni 2002 Autor Geschrieben 7. Juni 2002 Der bringt mir immernoch diesen Laufzeitfehler *heul* chris Zitieren
Olli_Master Geschrieben 7. Juni 2002 Geschrieben 7. Juni 2002 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. Zitieren
Empfohlene Beiträge
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.