Access でリンク テーブルのSQL Serverへの DSN レス接続を作成する方法
高度な機能: 高度なコーディング、相互運用性、マルチユーザー スキルが必要です。
この記事は、Microsoft Access データベース (.accdb または .mdb) にのみ適用されます。
概要
この記事では、データ ソース名 (DSN) を使用しない Microsoft Access のリンク テーブルの Microsoft SQL Server への接続を作成する方法について説明します。 DSN レス接続とも呼ばれます。
詳細
DSN を使用して、Microsoft Access でリンクされたSQL Server テーブルを作成できます。 ただし、データベースを別のコンピューターに移動する場合は、そのコンピューターに DSN を再作成する必要があります。 この手順は、複数のコンピューターで実行する必要がある場合に問題が発生する可能性があります。 この手順が正しく実行されないと、リンク テーブルで DSN が見つからない可能性があります。 そのため、リンク テーブルがSQL Serverに接続できない場合があります。
SQL Server テーブルへのリンクを作成するが、[データ ソース] ダイアログ ボックスで DSN をハードコーディングしない場合は、次のいずれかの方法を使用して、DSN レス接続を作成してSQL Server。
方法 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
CreateTableDef メソッド パラメーターの詳細については、「 Database.CreateTableDef メソッド (DAO)」を参照してください。
AttachDSNLessTable 関数を呼び出すには、Auto-Exec マクロまたはスタートアップ フォーム Form_Open イベントの次のいずれかのコード例に似たコードを追加します。
Auto-Exec マクロを使用する場合は、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 メソッドを使用すると、Auto-Exec マクロまたはスタートアップ フォームで 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 関数を呼び出すには、Auto-Exec マクロまたはスタートアップ フォーム Form_Open イベントで、次のいずれかのコード例に似たコードを追加します。
Auto-Exec マクロを使用する場合は、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リンク テーブルを既に作成していることを前提としています。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示