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

Access2007のサブフォームのRequeryで悩んでいます。。

Aメインフォーム
Bサブフォーム埋め込みコントロール
Cサブフォーム
リストボックスう

AにBを貼り付けBのソースオブジェクトにCを指定しています。
Cは帳票形式です

リストボックスをクリックしたら、
CのRecordSourceにSQLを挿入し、
CをRequeryしていますが、全くRequery出来ていない模様なのです。。

B.SourceObject="C"も試したのですが、全く思った通りのデータが抽出されません。
B.Form.Requery
Me.B.Form.Requery
どれも試して駄目でした。

CのRecordSourceに直接SQLを貼り付けたら思った通りに出ますが、
Requeryが機能していない気がします。
実行結果は、数件対象データはあるのに、Cの中身は空になります。。。

正しくRequeryする方法、もしくは違うやり方があればご教授頂けないでしょうか?

A 回答 (6件)

1)


当初のは、コンパイルエラー、実行時エラーもなかったということでしょうか?。

2)
例えば、
単体での実行はうまくいくけど、
メニューからボタン押下するなどでは実行するとうまくいかない、とか、
そこだけ見ても間違っていないようだが
ほかとの絡みでうまく動かない、というのはよくある話です。

ACCESSの不具合で片づけてもいいですけど、
時間の余裕あれば追及してもいいのではないでしょうか?。
    • good
    • 0
この回答へのお礼

1)エラーは全く出ておりません。。。

2)時間が許すならば追及してみます!
ただ、過去の不具合が出ている時(Requeryされない)、単体レベルではありました。
他のフォームVBAでは、間違いのソース等々存在はしておりました。
今度サブフォームを作成する場合は、徐々にプログラムを構築し、じっくり調べてみます。

どうもありがとうございました!

お礼日時:2010/08/30 18:46

オブジェクトの適切な破棄が


行なわれていなければ当然ながら
プロセスが残ったり、メモリリークを
起こしたり、あるいはオブジェクトの
初期化が行なわれていなかったりで
不審な動作をすることがあります。

そのような時は、まず全てのエラートラップを
コメントアウトし、丸裸の状態でコードを動かします。
必要な場合はメッセージボックスやテキストボックス
などを使って、レコードソースやランタイムでのSQLの
内容やデータを取得して、データが正常にオブジェクト間
でやり取りが行なわれているか確認します。
取り出したランタイムのSQLでクエリを作り、実行してみて、
Nullがないかなどの確認をしたりします。Option Explicitだけは
必ず表示しておきます。
あるいは、不必要なリンク子フィールド、親フィールドが
不用意にランタイム時に張られていないかなどの監視も
メッセージボックスやテキストボックスに表示して監視し、
張られていたら削除するコードを入れたりします。
必要ならば、実行時のプロパティを必要なだけ取得します。

このような、ところです。
    • good
    • 0
この回答へのお礼

丁寧な書き込みありがとうございます。

なるほど。
一度ステートメントをコメントアウトし、徐々にコメントインしていき、
原因を探るのも一理ありますね。

違う処理なのですが、サブフォームがまた、Requeryで再描画されなくなりました。。。
処理は、データを登録し(ISNERT文をDAOで実行)、その後更新されたデータを表示さす為、サブフォームをRequeryし、表示されず、2・3度連続して登録すると、今まで表示されなかったデータが一気に表示されます。。。

サブフォームのレコードセット形式を、スナップショットだったのですが、ダイナセットに変更すると、上記のように、一度登録したら、即反映できるようになりました。。。

もう不信感ですよ 笑


違う話になりますが、AccessVBAで、TypeOfという関数を使っていました。
最適化すると、TypeOfが認識できず、プロシージャ-なんとかかんとかエラーが出て困った経験があります。
パッチを当て、最新にしていると、この様な状態となり、Accessをインストールして、パッチを何もあてていない状態で最適化してもTypeOfのエラーは出ません。
今でもそうです。
Accessを触る場合は最新の注意を図っています。Access自体は信用ならんと思ってしまっています。。。


書き込みどうもありがとうございました!

お礼日時:2010/08/30 18:44

ヒントになれば・・・・。



>CをRequeryしています
実際はイベントが間違ってて空振りしているとか。

>全くRequery出来ていない模様
使い方が違うのかもしれません。
何がどうなっているのか最初から整理したらどうでしょうか?。
http://office.microsoft.com/ja-jp/access-help/HA …
コントロールを指定するかどうかで使い方の区別あります。

この回答への補足

書き込みありがとうございます。

>>CをRequeryしています
>実際はイベントが間違ってて空振りしているとか。
フォームの既定のビュープロパティが、帳票フォームだったのですが、単票フォームに変更し、帳票形フォームに変更しなおしただけで解決したのです。。。
つまり最初の帳票フォーム時に不具合を起こし、単票フォームにし、帳票フォームにし直して不具合が解消したという事でしょうか・・・。


URLありがとうございます。

ある一定の機能等は、熟知しているつもりなのですが、
出来るつもりの機能が出来なくなると、はまってしまうものです。。。

今回はどう考えてもAccess2007の不具合としか考えられないのですが、
パソコンの環境もあると思いますので、一概には言えませんね。。。

今度新たにサブフォームを作る時にでも、整理してみますね。

どうもありがとうございます。

補足日時:2010/08/27 16:39
    • good
    • 0

>リストボックスの値集合ソースでは無いのです。


>リストボックスの行を選択し、それを条件として、
>サブフォームのRecordSouseにSQL文を書いているのです。。。

よくわからないのですが、上記だとリストボックスに
表示する選択肢はForm_Load時で設定しているのですか。

クエリでリストボックスの値をどのように取得しているのか
その抽出条件が示されていないので何ともいえませんが。

>Access2007はまだ不具合が多いですが、これも一環かも知れませんね。

Access2007で設定してみましたが、サブフォームをデータシートで
リストボックス複数選択、複数のテキストボックス
などを抽出条件にサブフォームでの検索、抽出は
問題なくできますが。

この回答への補足

書き込み誠にありがとうございます。
お返事遅くなりました。

リストボックスは、ただのサブフォームをRequeryする為の、条件です。

処理内容では、まず[検索]→検索結果をリストボックスに表示→リストボックスクリック→サブフォームに表示
という具合です。
簡易な作りではなく、エラーチェック等かなり充実している機能なので、複雑かも知れません。。。

パソコンの環境かも知れませんが、文字入力中入力補助一覧が出なくなったり(.[どっと]を押したら出てくる一覧)、何もしていないのに、全ての関数が認識できなくなったり(参照設定での参照しているオブジェクトが使用不能)するんですよ…。
その不具合は前のモジュールを上書きしたり、Access再起動したりで直ります。。。

補足日時:2010/08/27 16:33
    • good
    • 0

サブフォームを使った検索、抽出には


制限がありますが。あえてそれを無視して
質問に答えられるとすれば以下のような
ことです。ただし、クエリでの抽出条件が
リストボックス一つなのか、あるいは
他に抽出条件があるのかわからないので
リストボックスのみとします。

リストボックスを使用するということは
おそらく複数選択を利用しているのでは
と思いますが、その場合にはクエリの
抽出条件にIn句を設定する必要があります。
その場合、In句は、

In('選択1','選択2','選択3')

のように設定されますが、この場合

'選択1','選択2','選択3'

の部分をVBAでクエリのSQL文を書き換える
必要があります。
書くVBAは変数宣言も含めて7行程度です。

ここまで説明すれば分かる人は「なるほど」と
思われるのですが、おわかりになりますか。

この回答への補足

分かりにくくて申しわけないです。

リストボックスの値集合ソースでは無いのです。
リストボックスの行を選択し、それを条件として、サブフォームのRecordSouseにSQL文を書いているのです。。。


非常におかしい現象なのですが、
一度サブフォームCを単票フォームにして、保存し、実行し、次に帳票形式にすると、
Requery出来ました。。。

Access2007はまだ不具合が多いですが、これも一環かも知れませんね。

レスポンスしてくださり誠にありがとうございました!
また何かありましたら宜しくお願い致します。

補足日時:2010/08/25 18:09
    • good
    • 0

>CのRecordSourceにSQLを挿入し


これはMe.B.Form.RecordSource = "SELECT * ~"
のようにやっていますよね?普通はこれだけで自動的に
リクエリされますよ。
但し、メインとサブの間にリンクフィールドがあると
指定の仕方により正常に動作しないかも知れません。
    • good
    • 0
この回答へのお礼

その通りなんです…通常リクエストされます・・・

非常におかしい現象なのですが、
一度サブフォームCを単票フォームにして、保存し、実行し、次に帳票形式にすると、
Requery出来ました。。。

Access2007はまだ不具合が多いですが、これも一環かも知れませんね。

レスポンスしてくださり誠にありがとうございました!
また何かありましたら宜しくお願い致します。

お礼日時:2010/08/25 18:07

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

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