• 締切済み

異なるフォームに属する関数間でACCESSのレコードセットを受け渡しする。

msAccess2000のVBAコードの質問です。 元々、全てを理解しているわけではないのにVBAコードを書いているのが無茶なんですが、無茶を承知でプログラミングしています。 あるクエリの結果を、あるフォームで帳票表示しています。この帳票の一レコードにボタンをつけて、クリックイベントで、そのレコードを取得しようとしています。フォームはこの後、閉じられた後、呼び出された親にその、レコードを渡したいのです。 フォームは、親フォームのボタンクリックイベントから、DoCmd.Openformメソッドによって呼び出されるので、戻り値は使えません。 しょうがないので、広域変数rst(DAO.Recordset型)で、受け渡そうと思ったのですが、recordset型は、どうやら参照のようで、フォーム(クエリ?)を閉じると、レコードが壊れてしまうようなのです。 Module1で、 public rst as DAO.recordset として、 Private Sub コマンド34_Click() set Module1.rst=me.recordset ' この中では、rst.fields(*)で、フィールドの値を使えるのですが・・・ END Sub 呼び出した親フォームでは、module1.rst.fields(*)を使用できません。 質問は二つあります。 1)広域変数rstは、上記のような宣言・使用法で問題ないですか? 2)sub またはfunction間にわたって、レコードを渡す、いい方法はないですか?

みんなの回答

  • ryuu001
  • ベストアンサー率61% (46/75)
回答No.3

>set Module1.rst=me.Me.RecordsetClone すみません。me が 1つ余計でした。 set Module1.rst=Me.RecordsetClone です。

KAZUMI2003
質問者

お礼

結果的にいうと、うまくいきませんでした。 HELPにかいてあるようにコピーが作られれば、いけそうな気がしたのですが、 やはり、親フォームに戻った時点で、rstの内容が壊れてしまいました。 さらに、調査しつづけてみます。 ありがとうございました。

  • ryuu001
  • ベストアンサー率61% (46/75)
回答No.2

> set Module1.rst=me.recordset これを set Module1.rst=me.Me.RecordsetClone と、してみて下さい。

KAZUMI2003
質問者

お礼

ありがとうございます。 明日、いや今日になりましたが、会社に行ったらさっそく試してみます。 うまくいきましたら、またご報告いたします。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 レコードの各フィールドの値を、それぞれグローバル変数に格納して渡せばいいのではないでしょうか。 変数は、フィールド数分用意してもいいですし、コードの見易さを考慮して、ユーザー定義型を使用してもいいでしょう。

KAZUMI2003
質問者

お礼

早速のお返事、ありがとうございます。 今、実機ではグローバルでレコードのIDを、配列で管理しています。そして、もう一度そのIDで、DLOOKUPしているのです。 でも、これでは配列の管理をしなければならないし、レコードの数(複数のレコードを扱いたいので)もいくつにしていいか悩みどころだし、その点Recordset型を使えれば、そういった部分を全部Recordsetオブジェクトに任せられると思っているのです。 ユーザー定義型というのは使ったことがないので、ちょっと挑戦してみますが、それって、いわゆる「クラスを作る」ようなものですか?

関連するQ&A