●概要●
リンクテーブルには、リンク先とは関係の無い独自の名前を付けることが可能です。
この関数は、そのように独自の名前が付けられたリンクテーブルのオリジナル名を取得します。
●サンプルコード●
以下のファンクションプロシージャを、標準モジュールに記述します。
'【引数説明】
'LinkTableName :ローカルMDB内でリンクテーブルにつけている名前
' 省略した場合には全てのリンクテーブル名を取得する
Public Function GetOriginalName(Optional LinkTableName As String = "" _
) As Variant
Dim DB As DAO.Database
Dim Tdf As DAO.TableDef
Dim aryOriginalName() As String '動的配列
Dim i As Integer '配列カウンタ
'初期処理
On Error GoTo Func_Err:
Set DB = CurrentDb
ReDim aryOriginalName(0)
'引数が省略された場合(全テーブルを検査)
If LinkTableName = "" Then
For Each Tdf In CurrentDb.TableDefs
'リンクテーブルの場合
If Tdf.Attributes > 536870911 Then
'配列の再宣言
i = UBound(aryOriginalName) + 1
ReDim Preserve aryOriginalName(i)
'リンク先テーブル名取得
aryOriginalName(i) = Tdf.SourceTableName
End If
Next
'関数に値代入
GetOriginalName = aryOriginalName
'引数が省略されなかった場合
Else
Set Tdf = DB.TableDefs(LinkTableName)
'指定テーブルがリンクテーブルで無い場合
If Tdf.Attributes < 536870911 Then
GetOriginalName =""
GoTo Func_Exit
End If
GetOriginalName = Tdf.SourceTableName
End If
Func_Exit:
Set Tdf = Nothing
Exit Function
Func_Err:
MsgBox "Error Number : " & Err.Number & vbCrLf & Err.Description
GoTo Func_Exit:
End Function
●動作確認●
リンクテーブルのオリジナル名を取得するためには、TableDefオブジェクトのSourceTableNameを使用します。
また、このサンプル関数は、引数の有無によって戻り値の型が変わりますので、使用時には注意が必要です。引数がある場合には一つのテーブル名を返すのみですが、省略した場合には複数のテーブル名を配列として返します。
ですから引数を省略した場合は、戻り値をVariant型の変数で配列ごと受け取ってあげる必要があります。
リンクテーブルを作成しておき、以下のコードを標準プロシージャに記述し、実行して下さい。
'○ 引数を省略した場合(全テーブルを検査する)
Private Sub test1()
Dim i As Integer 'ループカウンタ
Dim Var As Variant '配列格納用Variant変数
'Variant型の変数に、戻り値の配列をまとめて代入
Var = GetOriginalName
'戻り値の配列の添え字の上限を取得し、テーブル名を表示
For i = 1 To UBound(Var)
Debug.Print Var(i)
Next
End Sub
'○ 引数を省略しない場合
Private Sub test2()
Debug.Print GetOriginalName("顧客マスタ")
End Sub
前者の確認サンプルは、MDB内のリンクテーブルのオリジナル名を、イミディエイトウィンドウにすべて列挙します。リンクテーブルが無かった場合には、何も表示されません。
後者のサンプルは、[顧客マスタ]テーブルがリンクテーブルかどうかを調べ、そうであればオリジナル名を、そうでないならEmptyを返します。
●備考●
Access2000の場合、デフォルトではDAOに参照設定されていません。
Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。
その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOのチェックを持ってきて下さい。