バグ #: 8808 (コンテンツメンテナンス)バグ #: 232596 (OfficeNet)この資料は、Access データベース (.mdb) にのみ適用されます。中程度: 基本的なマクロ、コーディング、および相互運用性のスキルが必要です。
現象
Access クエリを XML ドキュメントにエクスポートし、抽出条件にアスタリスク (*) などの Microsoft Jet ワイルドカード文字がクエリに含まれている場合、データは XML ドキュメントにエクスポートされません。したがって、結果の XML ドキュメントにはデータが含まれていません。Access を使用して同じクエリを実行すると、クエリは正しく機能します。
原因
この現象は、XML にエクスポートするときに発生します。XML では、ActiveX データ オブジェクト (ADO) を使用してデータベースからデータを照会します。Access クエリで Jet 固有のワイルドカード文字を使用すると、クエリはレコードを返しません。この問題は、ADO が米国規格協会 (ANSI) 92 のワイルドカード文字のみを認識するために発生します。
回避策
この問題を回避するには、以下のいずれかの方法を使用します。
方法 1
クエリを書き直して、Jet 固有のワイルドカード文字を ANSI 92 ワイルドカード文字に置き換えることができます。たとえば、元のクエリは* ワイルドカード文字を使用して次のようになります。
SELECT Customers.CustomerIDFROM CustomersWHERE (((Customers.CustomerID) Like "A*"));
クエリは次のように書き換えることができます。
SELECT Customers.CustomerIDFROM CustomersWHERE (((Customers.CustomerID) Like "A%"));
メモAccess データベースが ANSI 92 互換用に構成されていない場合、Access から書き換えられたクエリを実行しても、データは返されません。ただし、書き換えられたクエリに基づいてエクスポートされた XML ドキュメントは、期待される結果を返します。
方法 2
クエリの条件にワイルドカード文字が含まれていないように、クエリを書き直すことができます。たとえば、元のクエリは* ワイルドカード文字を使用して次のようになります。
SELECT Customers.CustomerIDFROM CustomersWHERE (((Customers.CustomerID) Like "A*"));
クエリは次のように書き換えることができます。
SELECT Customers.CustomerIDFROM CustomersWHERE Left(CustomerID,1) = "A";
方法 3
XML ドキュメントにデータをエクスポートするときに、オブジェクトに既存のフィルタを適用するかどうかを指定できます。クエリの条件にワイルドカード文字を指定する代わりに、必要な条件 ("A*" など) と同等のフィルタ文字列を含むフィルタを作成し、XML のエクスポート処理中にこのフィルタを適用できます。これを行うには、Access のバージョンに応じて、次の手順を実行します。
アクセス 2003
-
ノースウィンド サンプル データベースを開きます。
-
[挿入]メニューの [クエリ]をクリックします。
-
[新しいクエリ]ダイアログ ボックスで [デザイン ビュー]をクリックし、[OK] をクリックします。
-
[表示]メニューの[SQL ビュー]をクリックします。
-
クエリウィンドウで、次のクエリを貼り付けます。
SELECT Customers.CustomerIDFROM Customers;
メモクエリの条件が削除されていることがわかります。したがって、クエリにはワイルドカード文字が含まれていません。
-
[ファイル] メニューの [保存] をクリックします。
-
[名前を付けて保存]ダイアログ ボックスの [クエリ名]ボックスにQuery1と入力し、[OK] をクリックします。
-
[表示]メニューの [データシート ビュー]をクリックします。
-
[レコード]メニューの [フィルタ]をポイントし、[フィルタ/並べ替えの編集]をクリックします。
-
[フィールド]ボックスの一覧の [得意先コード]をクリックします。
-
[得意先コード]の [抽出条件]ボックスに、次のコードを貼り付けます。
Like "A*"
-
[フィルタ]メニューの [フィルタ/並べ替えの適用]をクリックします。
-
[ファイル] メニューの [保存] をクリックします。
-
[ファイル] メニューの [閉じる] をクリックします。
-
データベースウィンドウで、[クエリ]をクリックします。
-
[Query1]を右クリックし、[エクスポート]をクリックします。
-
[クエリ 'Query1' のエクスポート先]ダイアログ ボックスで、[ファイルの種類]ボックスの一覧の[XML]をクリックし、[エクスポート]をクリックします。
-
[XML のエクスポート]ダイアログ ボックスで、[その他のオプション]をクリックします。
-
[XML のエクスポート]ダイアログ ボックスで、[データ]タブを選択します。[エクスポートするレコード]の [既存のフィルタを適用する] チェック ボックスをオンにし、[OK]をクリックします。
アクセス 2007
-
ノースウィンド サンプル データベースを開きます。
-
[作成]タブの [クエリ デザイン]をクリックし、[閉じる]をクリックします。
-
[デザイン]タブの [結果]グループの[SQL ビュー]をクリックします。
-
クエリウィンドウで、次のクエリを貼り付けます。
SELECT Customers.[First Name]FROM Customers;
メモクエリの条件が削除されていることがわかります。したがって、クエリにはワイルドカード文字が含まれていません。
-
[Officeボタン]をクリックし、[保存]をクリックします。
-
[名前を付けて保存]ダイアログ ボックスの [クエリ名]ボックスにQuery1と入力し、[OK] をクリックします。
-
[ホーム]タブの [ビュー]で [表示]をクリックし、[データシート ビュー]をクリックします。
-
[ホーム]タブの [並べ替えとフィルタ]で[詳細設定]をクリックし、[フィルタ/並べ替えの編集]をクリックします。
-
[フィールド]ボックスの一覧の [名] をクリックします。
-
[名] の[抽出条件]ボックスに、次のコードを貼り付けます。
Like "A*"
-
[ホーム]タブの [並べ替えとフィルタ]で[詳細設定]をクリックし、[フィルタ/並べ替えの適用]をクリックします。
-
[Officeボタン]をクリックし、[保存]をクリックします。
-
[Query1]を右クリックし、[エクスポート]をポイントします。
-
[XML のエクスポート]ダイアログ ボックスで、[その他のオプション]をクリックします。
-
[XML のエクスポート]ダイアログ ボックスで、[データ]タブをクリックします。
-
[エクスポートするレコード]で、[既存のフィルタを適用する] オプションを選択し、[OK] をクリックします。
-
[エクスポート - XML ファイル]ダイアログ ボックスで、[閉じる]をクリックします。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
詳細情報
Access 2003 で問題を再現する手順
-
ノースウィンド サンプル データベースを開きます。
-
[挿入]メニューの [クエリ]をクリックします。
-
[新しいクエリ]ダイアログ ボックスで、[デザイン ビュー]を選択し、[OK] をクリックします。
-
[表示]メニューの[SQL ビュー]をクリックします。
-
クエリウィンドウで、次のクエリを貼り付けます。
SELECT Customers.CustomerIDFROM CustomersWHERE (((Customers.CustomerID) Like "A*"));
-
[ファイル]メニューの[上書き保存] をクリックします。
-
[名前を付けて保存]ダイアログ ボックスの [クエリ名]ボックスにQuery1と入力します。
-
[ファイル] メニューの [閉じる] をクリックします。
-
[Query1]を右クリックし、[エクスポート]をクリックします。
-
[クエリ 'Query1' のエクスポート先... ] ダイアログ ボックスで、[ファイルの種類]ボックスの一覧の[XML]をクリックし、[エクスポート]をクリックします。
-
[XML のエクスポート]ダイアログ ボックスで、[OK]をクリックして、XML 関連のファイルを既定の場所に保存します。
-
エクスポートした XML ファイルを開きます。指定したクエリに基づくエクスポートされた XML ファイルにレコードが含まれていないことがわかります。
参照情報
ANSI 92 構文の詳細については、Office アシスタントでansi SQL クエリ モードについて入力し、[検索]をクリックしてください。