Access 2003 および Access 2002 でリンク テーブル用に SQL Server への DSN レス接続を作成する方法

文書翻訳 文書翻訳
文書番号: 892490 - 対象製品
この資料は Microsoft Access データベース (.mdb) についてのみ記述したものです。

難易度 : 高。高度なコーディング能力、相互運用性、およびマルチユーザー環境の経験が必要です。
すべて展開する | すべて折りたたむ

目次

はじめに

この資料では、Microsoft Access を使用して、リンク テーブル用に Microsoft SQL Server へのデータ ソース名 (DSN) を使用しない接続を作成する方法について説明します。この接続は、DSN レス接続とも呼ばれています。この資料に含まれているサンプル コードは、Microsoft Office Access 2003 および Microsoft Access 2002 で使用できます。

詳細

Microsoft Access では、DSN を使用して SQL Server のリンク テーブルを作成できます。しかし、データベースを別のコンピュータに移動した場合、移動先のコンピュータで DSN を再作成する必要があります。この手順は、複数のコンピュータ上で実行する必要がある場合に問題となる可能性があります。この手順が正しく実行されないと、リンク テーブルが DSN を見つけられず、SQL Server に接続できなくなることがあります。

データ ソース ダイアログ ボックスで DSN をハード コーディングせずに SQL Server テーブルへのリンクを作成するときは、以下の方法のいずれかを使用して、SQL Server への DSN レス接続を作成します。

方法 1 : CreateTableDef メソッドを使用する

CreateTableDef メソッドを使用すると、リンク テーブルを作成できます。このメソッドを使用するには、新しいモジュールを作成し、以下の AttachDSNLessTable 関数を追加します。
'//Name     :   AttachDSNLessTable
'//Purpose  :   Create a linked table to SQL Server without using a DSN
'//Parameters
'//     stLocalTableName: Name of the table that you are creating in the current database
'//     stRemoteTableName: Name of the table that you are linking to on the SQL Server database
'//     stServer: Name of the SQL Server that you are linking to
'//     stDatabase: Name of the SQL Server database that you are linking to
'//     stUsername: Name of the SQL Server user who can connect to SQL Server, leave blank to use a Trusted Connection
'//     stPassword: SQL Server user password
Function 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
        '//Use trusted authentication if stUsername is not supplied.
        stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes"
    Else
        '//WARNING: This will save the username and the password with the linked table information.
        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 Function

AttachDSNLessTable_Err:
    
    AttachDSNLessTable = False
    MsgBox "AttachDSNLessTable encountered an unexpected error: " & Err.Description

End 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
            '// All is okay.
        Else
            '// Not okay.
        End If
    End Sub
    : 複数のリンク テーブルを Access データベースに追加する場合、プログラム ロジックをそれに合わせて調整する必要があります。

方法 2 : DAO.RegisterDatabase メソッドを使用する

DAO.RegisterDatabase メソッドを使用すると、AutoExec マクロまたはスタートアップ フォームに DSN 接続を作成できます。このメソッドを使用しても、DSN 接続の要件がなくなることはありませんが、DSN 接続をコードで作成することが問題の解決に役立ちます。このメソッドを使用するには、新しいモジュールを作成し、以下の CreateDSNConnection 関数を追加します。
'//Name     :   CreateDSNConnection
'//Purpose  :   Create a DSN to link tables to SQL Server
'//Parameters
'//     stServer: Name of SQL Server that you are linking to
'//     stDatabase: Name of the SQL Server database that you are linking to
'//     stUsername: Name of the SQL Server user who can connect to SQL Server, leave blank to use a Trusted Connection
'//     stPassword: SQL Server user password
Function 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
        '//Use trusted authentication if stUsername is not supplied.
        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
        
    '// Add error checking.
    CreateDSNConnection = True
    Exit Function
CreateDSNConnection_Err:
    
    CreateDSNConnection = False
    MsgBox "CreateDSNConnection encountered an unexpected error: " & Err.Description
    
End Function
: RegisterDatabase メソッドが再び呼び出されると、DSN が更新されます。

CreateDSNConnection 関数を呼び出すには、AutoExec マクロ、またはスタートアップ フォームの Form_Open イベントに、それぞれ以下のサンプルのようなコードを追加します。
  • AutoExec マクロを使用する場合、CreateDSNConnection を呼び出して、RunCode アクションからの以下のようなパラメータを渡します。
        CreateDSNConnection ("(local)", "pubs", "", "")
    
  • スタートアップ フォームを使用する場合、Form_Open イベントに、以下のサンプルのようなコードを追加します。
    Private Sub Form_Open(Cancel As Integer)
        If CreateDSNConnection("(local)", "pubs", "", "") Then
            '// All is okay.
        Else
            '// Not okay.
        End If
    End Sub
: この方法では、DSN 名として myDSN を使用して、Access データベースに SQL Server のリンク テーブルが既に作成されていることを前提としています。

プロパティ

文書番号: 892490 - 最終更新日: 2007年1月16日 - リビジョン: 1.2
この資料は以下の製品について記述したものです。
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
キーワード:?
kbprogramming kbconfig kbdatabase kbhowto kbinfo KB892490
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com