MS-Access ODBC Соединение с Oracle для SQL - PullRequest
2 голосов
/ 13 марта 2009

Я пытаюсь подключиться к базе данных Oracle с помощью Access 2003.

Я хочу использовать соединение ODBC и настроить его так, чтобы пользователю не нужно было вводить пароль.

Одной из проблем, с которыми я сталкиваюсь, является то, что мой sql-запрос использует INTERFACE.Products, и Access видит точку и думает, что пытается открыть файл. IE Interface.MDB, когда это часть моего 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

Ответы [ 2 ]

3 голосов
/ 13 марта 2009

Не могли бы вы попробовать что-то вроде:

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

Это просто отправило бы дословно запрос в базу данных Oracle.

В документации Access для OpenRecordset вы найдете эту заметку:

Если вы открываете набор записей в рабочей области Microsoft Access и не указываете тип, OpenRecordset создает набор записей табличного типа.

Это может быть источником ошибки, которую вы получаете.

Как правило, я бы рекомендовал всегда указывать в ваших параметрах OpenRecordset: поведение по умолчанию не всегда согласовано и может вызывать странные ошибки.

Я не уверен в вашем дизайне, но один способ немного упростить вам задачу - это просто создать связанные таблицы в Access.
В этом случае вы сможете писать запросы к вашей таблице INTERFACE.Products Oracle, как если бы вы были локальной таблицей Products.
Это также избавит вас от необходимости самостоятельно управлять соединениями.

0 голосов
/ 04 мая 2013

Набор записей, который вы создаете, должен использовать запрос, написанный с помощью Access SQL. Таблица должна быть таблицей доступа (таблица, определенная в mdb). Это может быть локальная таблица или связанная таблица. Таблица доступа не может иметь "." (точка) в его названии. Если бы вы связали таблицу Oracle INTERFACE.Products в Access, это было бы INTERFACE_Products (Access заменит недопустимые символы в имени таблицы удаленной базы данных на «_»), если вы не переименовали его в Access. Таким образом, ваш запрос должен быть «Выбрать * из INTERFACE_Products»

Можно создать набор записей с использованием Oracle SQL, но его необходимо создать с помощью сквозного запроса.

...