2011-09-16 27 views
1

私のAccess 2010 VBAコードでは、DoCmd.OpenQueryの結果に応じてテーブルを作成する場合と作成しない場合があります。私は設定可能な "ON ERROR"ブランチを引き起こすレコード数を調べることができますが、私はそれほど目新しい方法を探していませんでした。助言がありますか?テーブルが作成されているかどうかを確認する方法を教えてください。

+2

あなたはそれはあなたが他の人の時間と解決するための努力を認めることが表示されますと、将来的にあなたを助けるかもしれない、答えの左にあるチェックボックスのアウトラインをクリックして、1を受け入れたとしてHansUpの答えをマークすると、あなたの技術的な問題 –

答えて

3

あなたが何を求めているのか分かりません。

DCount()を使用して、SELECTクエリによって返される行の数を判断できます。

Debug.Print DCount("*","YourQueryName") 

問題は、テーブルが存在するかどうかを判断される代わりに場合は、テーブル定義コレクション内のテーブル名を確認することができます。このステートメントは、存在する場合はテーブルの名前を返し、存在しない場合はトラップ可能なエラーをスローします。

Debug.Print CurrentDb.TableDefs("YourTableName").Name 

あなたはテーブル定義コレクションを反復処理し、あなたが名前を見つけた場合Forループから抜け出すためには... Nextループ使用することができ、エラーをトラップ回避したい場合。

また、SELECTクエリを使用して、MSysObjectsシステムテーブルのテーブル名を検索することもできます。

SELECT MSysObjects.[Name], MSysObjects.[Type] 
FROM MSysObjects 
WHERE 
    (((MSysObjects.[Name])="YourTableName") 
    AND ((MSysObjects.[Type])=1)); 

このクエリは、現在のデータベースのネイティブAccessテーブルとしてテーブル名をチェックします。その名前で別のAccessデータベース(Type = 4)またはODBCデータソース(Type = 6)からリンクされたテーブルがある場合は、WHERE句を変更します。

SELECT MSysObjects.[Name], MSysObjects.[Type] 
FROM MSysObjects 
WHERE 
    (((MSysObjects.[Name])="YourTableName") 
    AND ((MSysObjects.[Type]) In (1, 4, 6))); 

MSysObjectを照会する場合は、値を変更しないでください。また、Access 2007ユーザーの中には、MSysObjectの読み取り権限エラーが発生していると聞きました。クエリの代わりにDCount()を使用すると、最初の問題を回避できます。

Debug.Print DCount("*","MSysObjects","[Name]='YourTableName' AND [Type] In (1, 4, 6)") 
+0

HansUpへ:ありがとう。問題はテーブルが存在するかどうかであり、あなたのソリューションは私のために働くかどうかでした。私は感謝します。 –

関連する問題