1

背景情報:
10 を超える (そして増加している) リンクされたテーブルを含む ms access 2010 データベースを取得しました。ソースは「ダーティ」であり、追加のコードを含む挿入クエリを使用してそれらをクリーンアップし、後でパフォーマンスを向上させるためにインデックスを付けてローカルテーブルにレコードを保存します。ローカル テーブルは、最初に削除クエリで空にされます。挿入クエリはAfter Insert: LogEvent、USysApplicationLog のローカル テーブルにデータ マクロと共に記録されます。データ マクロは USysApplicationLog に大量のレコードを生成しますが、挿入ごとにテーブルごとに 1 つで十分です。未解決の問題ですが、現時点ではそれほど重要ではありません。

ローカル テーブルは、接尾辞「-local」が付いたリンク テーブルと同じ名前を持ちます。
例: csvMachines / cvsMachines-local、csvCustomers / csvCustomers-local など。

現時点では、手動ですべてをチェックし、すべてのクエリを実行しています。しかし、これをさらに自動化する方法を探しています。

ローカル テーブルでデータベースを使用する前に、次のことを確認します。

  • ローカル テーブルは最新
    であり、USysApplicationLog および UDF 関数を照会してソースの変更日を確認することで、この種をカバーしています。
  • ローカルテーブルはここで私の質問の理由で満たされています

次の作業クエリを組み合わせるスマートな方法 (sql、vba、または udf) を探しています

SELECT MSysObjects.NAME AS LinkedTableName
    ,[LinkedTableName] & "-local" AS LocalTableName
FROM MSysObjects
WHERE (((MSysObjects.DATABASE) IS NOT NULL));

単純なSELECT count(*)ローカル テーブル名ごと。

以下を試しましたが、Access は LocalTableName をテーブルとして見つけることができません。

SELECT MSysObjects.NAME AS LinkedTableName
    ,[LinkedTableName] & "-local" AS LocalTableName
    ,(
        SELECT count(*)
        FROM [LocalTableName]
        ) AS LocalTableRecordCount
FROM MSysObjects
WHERE (((MSysObjects.DATABASE) IS NOT NULL));

Create table - dynamic name of tableおよびMS Access query with dynamic from statementなどの古い同様の質問を見ましたが、私の状況でそれらのソリューションを実装する方法がわかりませんでした。

4

2 に答える 2

2

FROMAccessでは、実行時にデータ ソースの名前を指定できません。その機能をサポートしていないだけです。

この質問には VBA タグがあるため、テーブル名をループしてそれぞれのレコード数を取得する手順を検討することになるでしょう。

テーブル名ごとに…

strSelect = "SELECT Count(*) FROM " & LocalTableName
MsgBox CurrentDb.OpenRecordset(strSelect)(0)

それともTableDef.RecordCount物件を見て...

MsgBox CurrentDb.TableDefs(LocalTableName).RecordCount
于 2013-10-10T16:15:52.967 に答える
1

別の問題の解決策を探していたところ、Access Helpでこの質問に対する別の答えを見つけました。expression.DCount(Expr, Domain, Criteria)

私の状況の作業クエリ:

SELECT MSysObjects.NAME AS LinkedTableName
    ,[LinkedTableName] & "-local" AS LocalTableName
    ,DCount("*", [LinkedTableName] & "-local") AS LocalTableRecordCount
FROM MSysObjects
WHERE (((MSysObjects.DATABASE) IS NOT NULL));
于 2013-10-11T08:32:41.037 に答える