MS Access データベースのすべてのテーブルとその行数をグリッド ビューで一覧表示したいと考えています。次のようにクエリを使用しています。
SELECT MSysObjects.Name, CLng(DCount('*',[name])) AS RecordCount
FROM MSysObjects WHERE (((MSysObjects.Type)=1)
AND (MSysObjects.Name NOT LIKE 'MSys*'))
ORDER BY MSysObjects.Name;
MS Access Query ペインでは、これは問題なく機能します。しかし、.NET で OleDbCommand オブジェクトを介してクエリを実行すると、クエリによって結果セットが生成されますが、MSysNavPaneGroupCategories を含むデータの行が取得されます。この行は、次のことを試みると常にエラーをスローします。
DataRow row = null;
do
{
row = dt.NewRow();
row["TableName"] = (string)dr["Name"];
row["RecordCount"] = (int)dr["RecordCount"]; // Fails here when dr["Name"]==MSysNavPaneGroupCategories
dt.Rows.Add(row);
} while (dr.Read());
エラーメッセージは次のとおりです。
System.InvalidOperationException が処理されませんでした。
プロバイダは Int32 値を特定できませんでした。たとえば、行が作成されたばかりで、Int32 列の既定値が使用できず、コンシューマーがまだ新しい Int32 値を設定していません。ソース="System.Data"
したがって、私の回避策は、TEMPテーブルを作成し、代わりにそこから読み取ることです(または、列のデフォルト値を設定します...これにより、エラーは克服されますが、結果セットに不正なテーブルが含まれます)。
何が起きてる?MSysNavPaneGroupCategories は、結果セットに含まれていないはずです。
MSysNavPaneGroupCategories システム テーブルに関する情報はあまりありません。
この URLは、MSysNavPaneGroupCategories が 3 つのシステム テーブルの 1 つであることを示しています。
ナビゲーション ペイン内のすべてのコンテンツを定義します。
.. Access 2007 で。
Microsoft Office Access 2007 の新機能であるナビゲーション ウィンドウは、すべてのデータベース オブジェクト (データベース オブジェクト: Access データベースには、テーブル、クエリ、フォーム、レポート、ページ、マクロ、 Access プロジェクトには、フォーム、レポート、ページ、マクロ、モジュールなどのオブジェクトが含まれています)、レポートを実行したり、テーブルに直接データを入力したりします。
... Access 2007 で。
このテーブルが Access 2007 の機能であるのに Access 2K データベース テーブル リストに表示されるのはなぜですか? また、条件に一致しないクエリに表示されるのはなぜですか?