Добавление связанной таблицы в Access 2003 с сохранением информации о соединении ODBC в MDB - PullRequest
0 голосов
/ 27 апреля 2010

У меня есть база данных MDB Access 2003, где все таблицы существуют как связанные таблицы в SQL Server 2005. Файл MDB содержит всю информацию ODBC, которая указывает на правильный SQL Server и учетные данные для входа в систему (доверенное соединение).

Что я хотел бы сделать, так это добавить новую связанную таблицу в файл MDB, однако я не уверен, как определить информацию о соединении ODBC. Когда я пытаюсь добавить новую связанную таблицу, мне постоянно предлагают найти или создать файл DSN. Я не хочу создавать новую запись DSN на каждом компьютере, скорее я хотел бы, чтобы вся эта информация хранилась в самом файле Access MDB.

В существующей базе данных я могу "навести курсор" на имена таблиц и посмотреть информацию о соединении ODBC в качестве всплывающей подсказки. Все, что мне нужно сделать, это добавить еще одну связанную таблицу, используя ту же информацию о соединении.

У меня есть доступ к SQL Server, с которым связаны таблицы. Я уже создал новую таблицу, которую хотел добавить. Мне просто нужно найти способ ссылки на него.

Ответы [ 3 ]

2 голосов
/ 28 апреля 2010

Для чего это стоит, я ленивый.Я держу DSN на своем компьютере разработчика и использую его для создания новых связанных таблиц.Затем я запускаю код Дуга Стила, чтобы преобразовать ссылки в соединения dsnless перед распространением внешнего интерфейса конечным пользователям.

1 голос
/ 27 апреля 2010

Вы можете использовать строку подключения из существующей таблицы или сделать что-то вроде:

''This is a basic connection string, you may need to consider password and so forth
cn = "ODBC;DSN=TheDSNName;Trusted_Connection=Yes;APP=Microsoft Office 2010;DATABASE=TheDatabaseName;"

Есть несколько подключенных таблиц:

sLocalName = "TABLE_SCHEMA" & "_" & "TABLE_NAME"

With CurrentDb
    If DLookup("Name", "MSysObjects", "Name='" & sLocalName & "'") <> vbNullString Then
        If .TableDefs(sLocalName).Connect <> cn Then
            .TableDefs(sLocalName).Connect = cn
            .TableDefs(sLocalName).RefreshLink
        End If
    Else
        ''If the table does not have a unique index, you will neded to create one
        ''if you wish to update.
        Set tdf = .CreateTableDef(sLocalName)
        tdf.Connect = cn
        tdf.SourceTableName = "TABLE_NAME"
        .TableDefs.Append tdf
        .TableDefs.Refresh
    End If
End With

Это создаст окно сообщения, если таблица не имеет уникального индекса

  DoCmd.TransferDatabase acLink, "ODBC Database", cn, acTable, "TABLE_NAME", sLocalName
0 голосов
/ 27 апреля 2010

Я смог успешно добавить таблицу и хотел подробно описать шаги здесь.

  1. Я добавил новую таблицу, нажав «Создать» в Access и выбрав «Таблица ссылок»
  2. При появлении запроса в диалоговом окне «Связать файл» я выбрал ODBC из списка типов файлов
  3. Я создал новый элемент DSN (используется только для начальной ссылки на таблицу)
  4. Продолжайте создавать DSN, и вы будете следовать процессу связывания с таблицей, созданной в SQL Server
  5. Таблица должна отображаться в Access

Затем я создал следующую подпрограмму в модуле кода. По сути, он просматривает все ваши таблицы в Access, которые имеют соединения ODBC, и устанавливает правильную информацию о соединении ODBC в определениях таблиц. Вы можете удалить созданный ранее DSN, поскольку он больше не нужен.

Public Sub RefreshODBCLinks()

    Dim connString As String
    connString = "ODBC;DRIVER=SQL Server Native Client 10.0;" & _
             "SERVER=<SQL SERVER NAME>;UID=<USER NAME>;" & _
             "Trusted_Connection=Yes;" & _
             "APP=<APP NAME>;DATABASE=<DATABASE NAME>"

    Dim db As DAO.Database
    Dim tb As DAO.TableDef
    Set db = CurrentDb
    For Each tb In db.TableDefs
    If Left(tb.Connect, 4) = "ODBC" Then
        tb.Connect = connString
        tb.RefreshLink
        Debug.Print "Refreshed ODBC table " & tb.Name
    End If
    Next tb
    Set db = Nothing

End Sub

ПРИМЕЧАНИЕ ... Чтобы выполнить вышеупомянутую подпрограмму, я просто набрал ее имя в "непосредственных" окнах в модуле кода доступа. Вы также можете создать макрос, который выполняет эту подпрограмму, а затем всякий раз, когда вы создаете новую таблицу, вы можете просто запустить макрос.

Спасибо "Remou" за ответ и помощь!

P.S. Если вас интересует APP=<APP NAME> в строке подключения и для чего она нужна, ознакомьтесь с этой статьей. http://johnnycoder.com/blog/2006/10/24/take-advantage-of-application-name/

...