Как создать подключение к SQL Server без имени источника данных для связанных таблиц в Access

Поддержка Office 2003 завершена

8 апреля 2014 г. корпорация Майкрософт прекратила поддержку Office 2003. Это повлияло на обновления программного обеспечения и параметры безопасности. Узнайте, что это значит для вас и какие меры по безопасности можно предпринять.

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

Данная статья применима только к базам данных Microsoft Access (.accdb and .mdb).
ВВЕДЕНИЕ
Статья описывает создание подключения к Microsoft SQL Server для связанных таблиц в Microsoft Access без использования имени источника данных (DSN). Такое подключение также известно как подключение без DSN. Примеры, содержащиеся в статье, относятся к Microsoft Office Access 2007, Microsoft Office Access 2003 и к Microsoft Access 2002.
Дополнительная информация
В Microsoft Access можно использовать имя источника данных для создания таблиц, связанных с SQL Server, но при перемещении базы данных на другой компьютер будет необходимо заново создать на этом компьютере имя источника данных. Это может вызвать затруднения, если таких компьютеров несколько. Если процедура выполнена неправильно, то связанные таблицы не смогут определить имя источника данных. Следовательно, связанные таблицы не смогут подключиться к SQL Server.

Когда необходимо создать подключение к таблице SQL Server, но не нужно жестко программировать имя источника данных в диалоговом окне Источники данных, используется один из следующих способов создания подключения к SQL Server без DSN.

Способ 1: Использование метода CreateTableDef

Метод CreateTableDef позволяет создать связанную таблицу. Для использования этого метода необходимо создать новый модуль и добавить к нему функцию AttachDSNLessTable.
'//Имя     :   AttachDSNLessTable'//Назначение  :   Создание связанной с SQL Server таблицы без использования DSN'//Параметры'//     stLocalTableName: Имя таблицы, которая создается в текущей базе данных'//     stRemoteTableName: Имя таблицы, которая связыватся с базой данных на SQL Server'//     stServer: Имя SQL Server, с которым осуществляется связывание'//     stDatabase: Имя базы данных SQL Server, с которой организуется связь'//     stUsername: Имя пользователя, который может подключаться к SQL Server, оставьте пустым для доверенного подключения'//     stPassword: Пароль пользователя SQL ServerFunction AttachDSNLessTable(stLocalTableName As String, stRemoteTableName As String, stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String)    On Error GoTo AttachDSNLessTable_Err    Dim td As TableDef    Dim stConnect As String        For Each td In CurrentDb.TableDefs        If td.Name = stLocalTableName Then            CurrentDb.TableDefs.Delete stLocalTableName        End If    Next          If Len(stUsername) = 0 Then        '//Если stUsername не предоставлено, использовать доверенную проверку подлинности.        stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes"    Else        '//ПРЕДУПРЕЖДЕНИЕ: Вместе с информацией о связанной таблице сохраняется имя пользователя и его пароль.        stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword    End If    Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)    CurrentDb.TableDefs.Append td    AttachDSNLessTable = True    Exit FunctionAttachDSNLessTable_Err:        AttachDSNLessTable = False    MsgBox "В AttachDSNLessTable произошла неожиданная ошибка: " & Err.DescriptionEnd Function
Для вызова функции AttachDSNLessTable добавьте код, аналогичный одному из приведенных ниже примеров кода в макросе AutoExec или в событии формы автозапуска Form_Open:
  • При использовании макроса AutoExec вызовите функцию AttachDSNLessTable, а затем передайте параметры, аналогичные параметрам в действии RunCode.
        AttachDSNLessTable ("authors", "authors", "(local)", "pubs", "", "")
  • При использовании формы автозапуска добавьте код, схожий с событием формы автозапуска Form_Open.
    Private Sub Form_Open(Cancel As Integer)    If AttachDSNLessTable("authors", "authors", "(local)", "pubs", "", "") Then        '// Всё в порядке.    Else        '// Есть проблемы.    End IfEnd Sub
    Примечание Необходимо несколько изменить логику программирования при добавлении к базе данных Access более чем одной связанной таблицы.

Способ 2: Использование метода DAO.RegisterDatabase

Метод DAO.RegisterDatabase позволяет создать подключение с именем источника данных в макросе AutoExec или в форме автозапуска. Хотя этот способ не отменяет требования подключения с именем источника данных, он позволяет решить проблему создания подключения с именем источника данных в коде. Для использования этого метода необходимо создать новый модуль и добавить к нему приведенную ниже функцию CreateDSNConnection.
'//Имя     :   CreateDSNConnection'//Назначение  :   Создание имени источника данных для связывания таблиц с SQL Server'//Параметры'//     stServer: Имя SQL Server, с которым организуется связь'//     stDatabase: Имя базы данных SQL Server, с которой огранизуется связь'//     stUsername: Имя пользователя, который может подключаться к SQL Server. Оставьте пустым для доверенного подключения'//     stPassword: Пароль пользователя SQL ServerFunction CreateDSNConnection(stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String) As Boolean    On Error GoTo CreateDSNConnection_Err    Dim stConnect As String        If Len(stUsername) = 0 Then        '//Если stUsername не предоставлено, использовать доверенную проверку подлинности.        stConnect = "Description=myDSN" & vbCr & "SERVER=" & stServer & vbCr & "DATABASE=" & stDatabase & vbCr & "Trusted_Connection=Yes"    Else        stConnect = "Description=myDSN" & vbCr & "SERVER=" & stServer & vbCr & "DATABASE=" & stDatabase & vbCr     End If        DBEngine.RegisterDatabase "myDSN", "SQL Server", True, stConnect            '// Добавить проверку ошибок.    CreateDSNConnection = True    Exit FunctionCreateDSNConnection_Err:        CreateDSNConnection = False    MsgBox "В CreateDSNConnection произошла неожиданная ошибка: " & Err.Description    End Function
Примечание Если метод RegisterDatabase вызывается снова, то имя источника данных обновляется.

Для вызова функции CreateDSNConnection добавьте код, аналогичный одному из приведенных ниже примеров кода в макросе AutoExec или в событии формы автозапускаForm_Open:
  • При использовании макроса AutoExec вызовите функцию CreateDSNConnection, а затем передайте параметры, аналогичные параметрам в действии RunCode.
        CreateDSNConnection ("(local)", "pubs", "", "")
  • При использовании формы автозапуска добавьте код, аналогичный событию формы автозапуска Form_Open.
    Private Sub Form_Open(Cancel As Integer)    If CreateDSNConnection("(local)", "pubs", "", "") Then        '// Всё в порядке.    Else        '// Есть проблемы.    End IfEnd Sub
Примечание В этом способе предполагается, что уже созданы связанные с SQL Server таблицы в базе данных Access с использованием «myDSN» в качестве имени источника данных.
ACC2002 ACC2003 Jet ODBC SQL Server VB VBA
Свойства

Номер статьи: 892490 — последний просмотр: 12/29/2007 10:26:29 — редакция: 1.5

Microsoft Office Access 2007, Microsoft Office Access 2003, Microsoft Access 2002 Standard Edition

  • kbprogramming kbconfig kbdatabase kbhowto kbinfo KB892490
Отзывы и предложения