- 締切済み
ACCESSのVBAで
Dim rcd As New ADODB.Recordset Sql = "SELECT * FROM 社員テーブル" rcd.Open Sql, CurrentProject.Connection If rcd.EOF Then Else 社員コード = rcd!社員コード 社員名称 = rcd!社員名称 end if のような記述で、Sqlのところをテーブルからのselectではなくクエリからデータの取得って出来るのでしょうか?(sqlのところがクエリ名になる) よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Te-Sho
- ベストアンサー率52% (247/472)
#2です。 クエリがどのような物か書いていなかったので一般的な使用方法を記載しました。 クエリの抽出パラメータにビルドメニューからオブジェクトを直接指定した場合にSQLを見るとWhere句にVBAのオブジェクト参照の文字列がそのまま入ってしまっていると思います。 クエリを直接実行する場合は上手くやってくれるのですが、Recordsetを直接SQLでオープンする場合、DAOでもADOでもこの部分がSQLエラーとなってしまうようです。 その場合は、3つほど方法があるとおもいます。 SQLとして変数が渡せればいいので 1.クエリの抽出条件を取り払ってしまい、Sql = Sql & " where 列名 = " & オブジェクト など自分で抽出部分のSQLを書いてしまう。 2.SQLのパラメータとしてパラメータクエリを書いてしまう。 3.共通モジュールに引き渡しようの値を返却するFunctionモジュールを作成しSQL内では関数を参照するようにする(SQLに書かれた内部関数はSQL内で呼び出してくれるようです)。 方法が有ると思います。 私は1の方法でゴリゴリ書いてしまいますが... 2,3の方法はODBC経由になった場合やASP用にSQLを変更したときに影響が出そうなために個人的には使っていません。動かなかったらすいません。
- Te-Sho
- ベストアンサー率52% (247/472)
SQLをクエリから取得したらどうでしょうか? Public dbs As Database Public qdf As QueryDef Set dbs = CurrentDb Set qdf = dbs.QueryDefs("クエリ名") Sql = qdf.SQL
FROM句をクエリ名に換えるだけで済むのでは? 試しに、クエリをソースとして別のクエリ(目的に沿ったもの)を作成してみて、そのSQL表示を見てみれば確認できますよ。
お礼
ありがとうございます とりあえず出来たのですが、クエリの中に条件を指定していると駄目でした(form!xxxxxとaccessのフォームの項目を条件にすると)