次の方法で共有


TableDef.RefreshLink メソッド (DAO)

適用対象: Access 365、Access 2021、Access 2019、Access 2016

リンク テーブルの接続情報を更新します (Microsoft Access ワークスペースのみ)。

構文

。RefreshLink

TableDef オブジェクトを表す変数。

注釈

リンク テーブルの接続情報を変更するには、対応する TableDef オブジェクトの Connect プロパティをリセットし、RefreshLink メソッドを使用して情報を更新します。 RefreshLink メソッドを使用しても、リンク テーブルのプロパティと Relation オブジェクトは変更されません。

リンク テーブルを表す TableDef オブジェクトに関連付けられたすべてのコレクションにこの接続情報を反映するには、各コレクションで Refresh メソッドを使用する必要があります。

Access 365 バージョン 2403 以降では、RefreshLink メソッドは既存のテーブル インデックスを保持します。 以前に RefreshLink メソッドを実行した後に主キーが失われるリンク テーブルがあり、RefreshLink の後にインデックスを明示的に再作成するコードを追加した場合、エラー 3283 "主キーは既に存在します" になります。

この例では、 RefreshLink メソッドを使用して、リンク テーブルの接続が、あるデータ ソースから別のデータ ソースに変更された後に、リンク テーブルのデータを更新します。 このプロシージャを実行するには、RefreshLinkOutput プロシージャが必要です。

Sub RefreshLinkX() 
 
 Dim dbsCurrent As Database 
 Dim tdfLinked As TableDef 
 
 ' Open a database to which a linked table can be 
 ' appended. 
 Set dbsCurrent = OpenDatabase("DB1.mdb") 
 
 ' Create a linked table that points to a Microsoft 
 ' SQL Server database. 
 Set tdfLinked = _ 
 dbsCurrent.CreateTableDef("AuthorsTable") 
 
 ' Note: The DSN referenced below must be configured to 
 ' use Microsoft Windows NT Authentication Mode to 
 ' authorize user access to the Microsoft SQL Server. 
 tdfLinked.Connect = _ 
 "ODBC;DATABASE=pubs;DSN=Publishers" 
 tdfLinked.SourceTableName = "authors" 
 dbsCurrent.TableDefs.Append tdfLinked 
 
 ' Display contents of linked table. 
 Debug.Print _ 
 "Data from linked table connected to first source:" 
 RefreshLinkOutput dbsCurrent 
 
 ' Change connection information for linked table and 
 ' refresh the connection in order to make the new data 
 ' available. 
 
 ' Note: The DSN referenced below must be configured to 
 ' use Microsoft Windows NT Authentication Mode to 
 ' authorize user access to the Microsoft SQL Server. 
 tdfLinked.Connect = _ 
 "ODBC;DATABASE=pubs;DSN=NewPublishers" 
 tdfLinked.RefreshLink 
 
 ' Display contents of linked table. 
 Debug.Print _ 
 "Data from linked table connected to second source:" 
 RefreshLinkOutput dbsCurrent 
 
 ' Delete linked table because this is a demonstration. 
 dbsCurrent.TableDefs.Delete tdfLinked.Name 
 
 dbsCurrent.Close 
 
End Sub 
 
Sub RefreshLinkOutput(dbsTemp As Database) 
 
 Dim rstRemote As Recordset 
 Dim intCount As Integer 
 
 ' Open linked table. 
 Set rstRemote = _ 
 dbsTemp.OpenRecordset("AuthorsTable") 
 
 intCount = 0 
 
 ' Enumerate Recordset object, but stop at 50 records. 
 With rstRemote 
 Do While Not .EOF And intCount < 50 
 Debug.Print , .Fields(0), .Fields(1) 
 intCount = intCount + 1 
 .MoveNext 
 Loop 
 If Not .EOF Then Debug.Print , "[more records]" 
 .Close 
 End With 
 
End Sub