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

Office 2003 のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Office 2003 のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

この資料は 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 passwordFunction 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 FunctionAttachDSNLessTable_Err:        AttachDSNLessTable = False    MsgBox "AttachDSNLessTable encountered an unexpected error: " & 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        '// All is okay.    Else        '// Not okay.    End IfEnd 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 passwordFunction 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 FunctionCreateDSNConnection_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 IfEnd Sub
: この方法では、DSN 名として myDSN を使用して、Access データベースに SQL Server のリンク テーブルが既に作成されていることを前提としています。

ACC2002 ACC2003 Jet ODBC SQL Server VB VBA
プロパティ

文書番号:892490 - 最終更新日: 01/16/2007 05:10:39 - リビジョン: 1.2

Microsoft Office Access 2003, Microsoft Access 2002 Standard Edition

  • kbprogramming kbconfig kbdatabase kbhowto kbinfo KB892490
フィードバック