まりふのひと

指定したmdb,テーブルにリンクするモジュール

'AOIndex'は、このテーブルのインデックスではありません」のエラーが出るようになって開けなくなった mdb。[ファイル]メニューからのリンクは出来ないが、connect コマンドでのリンクは幸い出来るので、専用のモジュールを作った。

'概要:指定したmdb, テーブル名にリンクする
'内容:mdbはダイアログボックスで、テーブル名はInputBoxで入力する。
'  :リンクする前のテーブルを削除するので、リンクに失敗すると前回リンクで来たテーブルは
'  :無くなっていることになる。
'必須:DAO, Get_FileName(), Delete_aObject()
'履歴:07.01.10 初版
'経緯:「'AOIndex'は、このテーブルのインデックスではありません」でmdbを開けない事態が発生。
'  :修復もできない‥‥が、Connect は出来ることから作成。
Function Connect_Manual() As Boolean
On Error GoTo Err_Connect_Manual
Dim mbTitle As String
Dim DBS As dao.Database, TDF As dao.TableDef
Dim i As Long
Dim DestMDB As String, DestTable As String, strFilter As String
Dim DestTBL As Variant

    mbTitle = MYObjName & "/Connect_toMDBbyTable"
    Connect_Manual = False
    strFilter = "Access MDB ファイル(*.mdb)" + Chr$(0) + ";*.mdb" + Chr$(0) + ""
    DestMDB = Get_FileName("リンクmdbの指定", "", strFilter)
    If DestMDB = "" Then Exit Function
    
    STRAns = InputBox$("リンクするテーブル名を入力してください。" & vbCrLf _
            & "複数ある時は、半角カンマで切ります。", "リンクテーブル名入力", DEFTable)
    If STRAns = "" Then Exit Function
    DestTBL = Split(STRAns, ",", -1, vbTextCompare)
    Set DBS = CurrentDb
    For i = 0 To UBound(DestTBL)
        DestTable = DestTBL(i)
        Call Delete_aObject(DestTable)
        Set TDF = DBS.CreateTableDef(DestTable)
        TDF.Connect = ";DATABASE=" & DestMDB
        TDF.SourceTableName = DestTable
        DBS.TableDefs.Append TDF
    Next
    TDF.RefreshLink
    Connect_Manual = True

Exit_Connect_Manual:
    Set DBS = Nothing
    Exit Function

Err_Connect_Manual:
    MsgBox "テーブルのリンクに失敗しました。" & vbCrLf & vbCrLf _
        & " ■自テーブル名=" & DestTable & vbCrLf _
        & " ■元MDB=" & DestMDB & vbCrLf _
        & " ■元テーブル名=" & DestTable & vbCrLf & vbCrLf _
        & Err.Number & "/" & Err.Description, vbCritical, mbTitle
    Resume Next
End Function

これを使って開けない mdb にリンク,テーブルをデザインで見ていて気が付いた。

  • 1っのテーブル
  • オートナンバー型の項目を Primary Key にしていたが、インデックスが壊れていた