2009-03-12 13 views
2

ich mit Access 2003.MS-Access-ODBC-Verbindung zu Oracle für SQL

zu einer Oracle-Datenbank zu verbinden bin versucht, mag ich eine ODBC-Verbindung verwenden, und ich will es so einrichten, dass der Benutzer doesn‘ t müssen ein Passwort eingeben.

Eines der Probleme, die ich allerdings habe meine SQL-Abfrage verwendet INTERFACE.Products und Access sieht die Zeit und denkt, dass ich versuche, eine Datei zu öffnen. IE Interface.MDB, wenn das ein Teil meiner SQL-Abfrage ist.

Option Compare Database 

Function OracleConnect() As Boolean 

    Dim ws As Workspace 
    Dim db As Database 
    Dim LConnect As String 
    Dim myQuery As String 
    Dim myRS As Recordset 


    On Error GoTo Err_Execute 

    LConnect = "ODBC;DSN=Oracle;UID=user;PWD=password;" 

    'Point to the current workspace 
    Set ws = DBEngine.Workspaces(0) 

    'Connect to Oracle 
    Set db = ws.OpenDatabase("", False, True, LConnect) 

    myQuery = "Select * from INTERFACE.Products" 

    Set rst = db.OpenRecordset(myQuery) 


    rst.Close 
    db.Close 


    Exit Function 

Err_Execute: 
    MsgBox MsgBox("Error Number: " & Err.Number & " Message: " & Err.Description) 

End Function 

Antwort

3

Könnten Sie versuchen, so etwas wie:

Set rst = db.OpenRecordset(mQuery, dbOpenSnapshot, dbSQLPassThrough) 

Dies würde die Abfrage wörtlich auf die Oracle-Datenbank nur senden.

Im Access documentation für OpenRecordset Sie diese Notiz finden:

Wenn Sie einen Recordset öffnen in einem Microsoft Access-Arbeitsbereich und nicht angeben, eine Art, erstellt OpenRecordset einen tabellenartigen Recordset.

Dies kann die Ursache für den Fehler sein, den Sie bekommen.

In der Regel würde ich vorschlagen, in Ihren Parametern immer explizit zu sein OpenRecordset: das Standardverhalten ist nicht immer konsistent und es kann seltsame Fehler erzeugen.

ich über Ihr Design nicht sicher bin, sondern eine Möglichkeit, die Dinge ein wenig leichter zu machen für Sie einfach sein kann zu verknüpften Tabellen in Access erstellen.
In diesem Fall würden Sie in der Lage Tabelle zu schreiben Abfragen gegen Ihre INTERFACE.Products Oracle als ob, wenn ein lokaler Products Tisch waren.
Es würde Ihnen auch ersparen, die Verbindungen selbst verwalten zu müssen.

0

Das Re-Cord-Set, das Sie erstellen, muss eine Abfrage verwenden, die mit Access SQL geschrieben wird. Die Tabelle muss eine Access-Tabelle sein (eine Tabelle, die in der MDB definiert ist). Dies kann eine lokale Tabelle oder eine verknüpfte Tabelle sein. Eine Access-Tabelle kann kein "." (Punkt) in seinem Namen. Wenn Sie die Oracle-Tabelle INTERFACE.Products in Access verknüpfen, wäre es INTERFACE_Products (Access wird ungültige Zeichen im Namen der fernen Datenbanktabelle durch "_" ersetzen), sofern Sie es nicht in Access umbenannt haben. So Ihre Abfrage sollte „select * from INTERFACE_Products“

ist Es ist möglich, einen Re-Cord mit Oracle SQL zu erstellen, aber das muss mit einer Pass-Through-Abfrage erstellt werden.