HOME > 即効テクニック > AccessVBA > データベース・データ保護 > リンクテーブルのオリジナル名を取得する

即効テクニック

データベース・データ保護

リンクテーブルのオリジナル名を取得する

(Access 97)
●概要●
リンクテーブルには、リンク先とは関係の無い独自の名前を付けることが可能です。
この関数は、そのように独自の名前が付けられたリンクテーブルのオリジナル名を取得します。

●サンプルコード●
以下のファンクションプロシージャを、標準モジュールに記述します。

'【引数説明】
'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のチェックを持ってきて下さい。