「'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 にしていたが、インデックスが壊れていた。