プロが教えるわが家の防犯対策術!

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間にわたって、レコードを渡す、いい方法はないですか?

A 回答 (3件)

>set Module1.rst=me.Me.RecordsetClone



すみません。me が 1つ余計でした。

set Module1.rst=Me.RecordsetClone

です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/03/26 07:22

> set Module1.rst=me.recordset



これを

set Module1.rst=me.Me.RecordsetClone

と、してみて下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/03/25 00:02

こんにちは。

maruru01です。

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

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

ユーザー定義型というのは使ったことがないので、ちょっと挑戦してみますが、それって、いわゆる「クラスを作る」ようなものですか?

お礼日時:2003/03/24 18:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A