- 締切済み
ADOからAccess固有のSQLを使うに
お世話になります。 現在困っていることがありますが、Accessのフォームで作った簡易システムの保守および機能追加を行っているのですが、Accessの固有のSQL(独自のクロス集計関数やワイルドカードが%ではなく、*になる等)をADOから呼び出すとデータが取り出せません。 固有形式のSQLを使っているクエリを使うとデータ数が0になっていたので、原因はすぐ分かりました。 しかしすでに構築されているSQLをすべて直すのは少し現実的ではなく、バグを誘発する、クロス集計関数が使えないなどの理由で当然のごとく却下されました。 AccessのVBAを使ってコーディングしてる方は、Access固有SQLをプログラムで使う(または使っているクエリを参照する)場合、どのような方法を使っているのでしょうか? どうぞよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- bin-chan
- ベストアンサー率33% (1403/4213)
#1です。 勉強不足でした。すみません。 > このことから”ADO経由ではAccess固有のSQL及びそれを使用したクエリを正しく実行できない”、 > と仮定したのですが が正しいです。 ACCESS Clubさんにずばりのトピックがありました。 直接リンク貼るのはまずそうなので キーワード「access ado ワイルドカード 2003」でググってください。 先頭に「No7996.ADOを使用したワイルドカード検索について」がくるはずです。
- bin-chan
- ベストアンサー率33% (1403/4213)
> ADOから呼び出すとデータが取り出せません。 相手はローカルのアクセスファイル(MDB or AccDB)ではなさそうですね。 何のDBですか?(Oracleとか、SQLServerとか、PostgreSQLとか) > クロス集計関数が使えないなどの理由で当然のごとく却下されました。 「Accessのフォームで作った簡易システム」をアップサイジングしている途中? 問題解決したい土俵はどこですか? ODBCで接続してしまえば良いのでは? > どのような方法を使っているのでしょうか? 「レコードセットとして開く」でしょうね。
補足
ご回答ありがとうございます。 > 相手はローカルのアクセスファイル(MDB or AccDB)ではなさそうですね。 いえ、ローカルのMDB(Access2000形式)です。 クエリのSQLは 「SELECT * FROM テーブルA WHERE カラム1 LIKE '*_*'」 などのように通常のSQL(ANSI SQLでしたっけ?)とはちょっと違います。 普通に書くと 「SELECT * FROM テーブルA WHERE カラム1 LIKE '%_%'」 ですよね。 > 「レコードセットとして開く」でしょうね。 そうですよね。 ですが、例えば先ほどのクエリをクエリAとして登録した場合 ---------------------------------------------- Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim sql As String '接続 Set cn = CurrentProject.Connection 'レコードセットを取得 Set rs = New ADODB.Recordset sql = "SELECT * FROM クエリA" rs.Open sql, cn, adOpenKeyset, adLockOptimistic (以下略) ------------------------------------------------ でレコードセットで取得しようとすると、見事に件数0で取得されてしまいます。 sql = "SELECT * FROM テーブルA WHERE カラム1 LIKE '%_%'" に変えて実行すると期待する結果が取得できます。 このことから”ADO経由ではAccess固有のSQL及びそれを使用したクエリを正しく実行できない”、 と仮定したのですが、レコードセットとして皆さんは普通に開けているのでしょうか? 宜しくお願いいたします。
補足
レスポンスが遅くなってすいません。 別件で留守にしていました。 記事を見ました。 ということはADODB経由でAccess形式のSQLを使用しているクエリは使えない、という事でしょうか? 注:ここでいうクエリというのはSQLそのものではなく、Accessのオブジェクトの”クエリ”です。 また、ANSI形式との相違も何となくわかりました。 参考URL:http://office.microsoft.com/ja-jp/access-help/HA001231436.aspx