リンクテーブルには、リンク先とは関係の無い独自の名前を付けることが可
能です。
この関数は、そのように独自の名前が付けられたリンクテーブルのオリジナ
ル名を取得します。
● サンプル ●
以下のファンクションプロシージャを、標準モジュールに記述します。
'【引数説明】
'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の
チェックを持ってきて下さい。
|