みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

AccessでSQL*PlusのようにSQLの結果を表示させたい

SQLでUPDATE, DELETE, INSERTのような結果セットを返さない場合は、
DoCmd.RunSQL?で済みますが、結果セットを返す場合は、どのようにすればよいのでしょうか?
やりたいことは、AccessでSQL*Plusやpsqlのように抽出した結果を一覧に表示させるか、フォームに結果を表示させたいです。

テキストボックスに入力したSQLを
クエリオブジェクト?(仮にクエリ1という名前にします)に書き込み
それをフォームのRecordSourceにクエリ1をセットする方法が使えれば
単にRecordSourceにSQLを直接書くより早い気がするのですが、
皆さんはどのようにしていますか。

投稿日時 - 2007-09-22 12:07:02

QNo.3366510

困ってます

質問者が選んだベストアンサー

こんちにわ!

こんな感じはいかがですか?
public function test
dim DB as DAO.Database
dim RS as DAO.Recordset
dim strSQL as string 'SQL文格納用
dim strWork as string 'レコード格納用
dim intcnt as integer 'フィールド数カウント用

set DB = CurrentDB
 '適当にテーブル名や条件いれてください
strSQL = "SELECT " & _
"* " & _
"FROM " & _
"テーブル名 " & _
"WHERE " & _
"条件;"
set RS = DB.Recordset(strsql,dbopendynaset)

'//レコードが終わるまでまわす
do until rs.eof

  '初期化
strWork = ""

  '各フィールドの値をカンマで区切ります。最初の文字はカンマになってしまいますがゆるしてください。
for intcnt = 0 rs.recordcount - 1
strWork = strWork & "," & rs.fields(intcnt)
next
'イミディエイトウィンドウに表示
debug.print strwork
  '次のレコードへ
rs.movenext  
loop

 DB.close:set db = nothing
 RS.close:set rs = nothing
end function

これでイミディエイトウィンドウに表示されると思いますが、レコード数が多いと表示しきれないかも?
そういうとき私は、クエリのSQLビューでSQL文作成してからプログラム組みます。

※大文字、小文字の区別が・・・みにくかったらごめんなさい
※せっかくインデントつけたのに反映されないですね・・・

投稿日時 - 2007-09-23 17:11:00

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

こんばんは、まだ見ておられるでしょうか?
私は
>SQL*Plusやpsqlのように
↑については明るくないのですが、
>皆さんはどのようにしていますか
との事なので私のやり方を。

単に一覧のデータが欲しい場合や動作テスト時にはイミディエイトに
Set dbs = CurrentDb
strSQL = "ほにゃらら"
Set rst = dbs.OpenRecordset(strSQL)
Do Until rst.EOF
Debug.Print rst!フィールド名その1,rst!フィールド名その2
rst.MoveNext
Loop
rst.Close

非連結表形式フォームに表示させたい時などは

Me.RecordSource = "ほにゃらら"
Me.フォームのコントロール1.ControlSource = "フィールド名その1"
Me.フォームのコントロール2.ControlSource = "フィールド名その2"
のような感じです。

>テキストボックスに入力したSQLを
って事なら上記"ほにゃらら"の部分を変数で持たせてやればよろしいかと思います。
あくまでも私の場合と言うことで、参考になれば幸です。

投稿日時 - 2007-09-23 01:45:39

あなたにオススメの質問