0

すべてのテーブルの名前を配列内の外部データベースに格納するプロシージャを作成しました。その理由は、最終的に、どのテーブルを再リンクする必要があるかを判断するための参照点としてこれを使用するためです。

以下のコードは、合計13 個のテーブルを返します。

For Each tb In db.TableDefs

    If Left(tb.Name, 4) <> "MSys" Then
        'Store these accepted table names in an array
        astrTableNames(intArryPosition) = tb.Name
        intArryPosition = intArryPosition + 1
    End If

Next tb

それらの名前を配列に格納します。配列を印刷したときの結果のリストを次に示します。

1: DispenseStaging
2: DispenseSummary_All
3: DrugBrand
4: NDC
5: Programs
6: StateCodes
7: StoreInfo
8: tblCompany
9: tblGetProgramDispense
10: Users
11: Users1
12: Version
13: Zipcodes

ここに問題があります-データベースを開くと、テーブルが4つしかありません。リンクなどへの参照はありません。

では、これらのテーブルは実際にはどこから来ているのでしょうか? これは、それらがかつてそこにあったがその後削除されたが、参照がまだそこにあるということですか?

ありがとう

PSこれは、配列を印刷するために使用している手順です。

'Procedure to print the contents of a string array
 Public Sub PrintArrayContents(ArryStrg() As String)

    Dim i As Integer

    For i = LBound(ArryStrg) To UBound(ArryStrg)
        Debug.Print i & ": "; ArryStrg(i)
    Next i

End Sub
4

3 に答える 3

1

これらのテーブルは、リンクが壊れているか、ガベージ テーブルとリンク テーブルが同時に存在するため、ガベージ テーブルまたはリンク テーブルである可能性があり、UI に表示されません。
DB で「コンパクト化と修復」を試して (最初に DB ファイルをバックアップしてください!)、関数を再実行して、同じ結果セットが得られるかどうかを確認してください。その場合は、テーブルのプロパティを読んで、テーブルがどこに属し、テーブルが何であるか (リンク テーブルまたはベース テーブル) を把握してください。LastUpdated、Updatable、SourceTableName、おそらく RecordCount プロパティをチェックして、変人に関する情報を取得してください :)
それでも何が起こっているのかがわからない場合は、まずシステム テーブルを読んで、「余分なテーブル」のメタデータ (例: MSysObjects) を見つけます。次に、これらのテーブルに対してクエリを実行してみてください。
私は疑いますが、いくつかのテーブルが単に「隠されている」可能性があります(アクセスなので:P)。ナビゲーション ペインで「非表示のテーブルを表示」のオン/オフを切り替えることができます。

調査結果をお返しください。結果が非常に気になります。

于 2013-05-03T13:26:14.003 に答える
0

MS Access 2003 をカバーするためにこの回答を追加すると思いました。非表示のオブジェクトを表示するには、次の手順を実行します。

  1. ツール
  2. オプション
  3. [表示] タブを選択します
  4. 表示オプションの下で、「隠しオブジェクト」オプションをチェックします

これで、データベース内の非表示のテーブルなどが表示されるはずです。

于 2013-06-14T13:39:16.153 に答える