2009-03-12 8 views
2

Je suis en train de se connecter à une base de données Oracle avec Access 2003.MS-Access connexion ODBC à Oracle pour SQL

Je veux utiliser une connexion ODBC et je veux le configurer de sorte que l'utilisateur n » t besoin d'entrer un mot de passe.

L'un des problèmes que je rencontre est que ma requête sql utilise INTERFACE.Products et Access voit la période et pense que j'essaie d'ouvrir un fichier. IE Interface.MDB, quand c'est une partie de ma requête sql.

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 

Répondre

3

Pourriez-vous essayer quelque chose comme:

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

Ce serait tout simplement envoyer la requête textuellement à la base de données Oracle.

Dans le Access documentation pour OpenRecordset vous trouverez cette note:

Si vous ouvrez un Recordset dans un espace de travail Microsoft Access et vous ne spécifiez pas un type, OpenRecordset crée un Recordset de type table.

Ceci peut être la source de l'erreur.

En règle générale, je suggère de toujours être explicite dans vos paramètres à OpenRecordset: le comportement par défaut n'est pas toujours cohérent et il peut générer des erreurs étranges.

Je ne suis pas sûr de votre conception, mais une façon de vous faciliter la tâche est de créer simplement des tables liées dans Access.
Dans ce cas, vous pouvez écrire des requêtes sur votre table Oracle INTERFACE.Products comme s'il s'agissait d'une table locale Products.
Cela vous éviterait également d'avoir à gérer les connexions vous-même.

0

Le jeu d'enregistrements que vous créez doit utiliser une requête écrite avec Access SQL. La table doit être une table Access (une table définie dans le mdb). Cela peut être une table locale ou une table liée. Une table Access ne peut pas avoir un "." (point) dans son nom. Si vous liez la table Oracle INTERFACE.Products dans Access, ce sera INTERFACE_Products (Access remplacera les caractères non autorisés dans le nom de la table de base de données distante par "_") sauf si vous l'avez renommé dans Access. Votre requête doit donc être "Select * from INTERFACE_Products"

Il est possible de créer un jeu d'enregistrements à l'aide d'Oracle SQL, mais cela doit être créé avec une requête Pass-Through.

Questions connexes