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