• 締切済み

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

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する方法、もしくは違うやり方があればご教授頂けないでしょうか?

みんなの回答

  • layy
  • ベストアンサー率23% (292/1222)
回答No.6

1) 当初のは、コンパイルエラー、実行時エラーもなかったということでしょうか?。 2) 例えば、 単体での実行はうまくいくけど、 メニューからボタン押下するなどでは実行するとうまくいかない、とか、 そこだけ見ても間違っていないようだが ほかとの絡みでうまく動かない、というのはよくある話です。 ACCESSの不具合で片づけてもいいですけど、 時間の余裕あれば追及してもいいのではないでしょうか?。

yuji_from_kyoto
質問者

お礼

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

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

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

yuji_from_kyoto
質問者

お礼

丁寧な書き込みありがとうございます。 なるほど。 一度ステートメントをコメントアウトし、徐々にコメントインしていき、 原因を探るのも一理ありますね。 違う処理なのですが、サブフォームがまた、Requeryで再描画されなくなりました。。。 処理は、データを登録し(ISNERT文をDAOで実行)、その後更新されたデータを表示さす為、サブフォームをRequeryし、表示されず、2・3度連続して登録すると、今まで表示されなかったデータが一気に表示されます。。。 サブフォームのレコードセット形式を、スナップショットだったのですが、ダイナセットに変更すると、上記のように、一度登録したら、即反映できるようになりました。。。 もう不信感ですよ 笑 違う話になりますが、AccessVBAで、TypeOfという関数を使っていました。 最適化すると、TypeOfが認識できず、プロシージャ-なんとかかんとかエラーが出て困った経験があります。 パッチを当て、最新にしていると、この様な状態となり、Accessをインストールして、パッチを何もあてていない状態で最適化してもTypeOfのエラーは出ません。 今でもそうです。 Accessを触る場合は最新の注意を図っています。Access自体は信用ならんと思ってしまっています。。。 書き込みどうもありがとうございました!

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

ヒントになれば・・・・。 >CをRequeryしています 実際はイベントが間違ってて空振りしているとか。 >全くRequery出来ていない模様 使い方が違うのかもしれません。 何がどうなっているのか最初から整理したらどうでしょうか?。 http://office.microsoft.com/ja-jp/access-help/HA001226276.aspx コントロールを指定するかどうかで使い方の区別あります。

yuji_from_kyoto
質問者

補足

書き込みありがとうございます。 >>CをRequeryしています >実際はイベントが間違ってて空振りしているとか。 フォームの既定のビュープロパティが、帳票フォームだったのですが、単票フォームに変更し、帳票形フォームに変更しなおしただけで解決したのです。。。 つまり最初の帳票フォーム時に不具合を起こし、単票フォームにし、帳票フォームにし直して不具合が解消したという事でしょうか・・・。 URLありがとうございます。 ある一定の機能等は、熟知しているつもりなのですが、 出来るつもりの機能が出来なくなると、はまってしまうものです。。。 今回はどう考えてもAccess2007の不具合としか考えられないのですが、 パソコンの環境もあると思いますので、一概には言えませんね。。。 今度新たにサブフォームを作る時にでも、整理してみますね。 どうもありがとうございます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

>リストボックスの値集合ソースでは無いのです。 >リストボックスの行を選択し、それを条件として、 >サブフォームのRecordSouseにSQL文を書いているのです。。。 よくわからないのですが、上記だとリストボックスに 表示する選択肢はForm_Load時で設定しているのですか。 クエリでリストボックスの値をどのように取得しているのか その抽出条件が示されていないので何ともいえませんが。 >Access2007はまだ不具合が多いですが、これも一環かも知れませんね。 Access2007で設定してみましたが、サブフォームをデータシートで リストボックス複数選択、複数のテキストボックス などを抽出条件にサブフォームでの検索、抽出は 問題なくできますが。

yuji_from_kyoto
質問者

補足

書き込み誠にありがとうございます。 お返事遅くなりました。 リストボックスは、ただのサブフォームをRequeryする為の、条件です。 処理内容では、まず[検索]→検索結果をリストボックスに表示→リストボックスクリック→サブフォームに表示 という具合です。 簡易な作りではなく、エラーチェック等かなり充実している機能なので、複雑かも知れません。。。 パソコンの環境かも知れませんが、文字入力中入力補助一覧が出なくなったり(.[どっと]を押したら出てくる一覧)、何もしていないのに、全ての関数が認識できなくなったり(参照設定での参照しているオブジェクトが使用不能)するんですよ…。 その不具合は前のモジュールを上書きしたり、Access再起動したりで直ります。。。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

サブフォームを使った検索、抽出には 制限がありますが。あえてそれを無視して 質問に答えられるとすれば以下のような ことです。ただし、クエリでの抽出条件が リストボックス一つなのか、あるいは 他に抽出条件があるのかわからないので リストボックスのみとします。 リストボックスを使用するということは おそらく複数選択を利用しているのでは と思いますが、その場合にはクエリの 抽出条件にIn句を設定する必要があります。 その場合、In句は、 In('選択1','選択2','選択3') のように設定されますが、この場合 '選択1','選択2','選択3' の部分をVBAでクエリのSQL文を書き換える 必要があります。 書くVBAは変数宣言も含めて7行程度です。 ここまで説明すれば分かる人は「なるほど」と 思われるのですが、おわかりになりますか。

yuji_from_kyoto
質問者

補足

分かりにくくて申しわけないです。 リストボックスの値集合ソースでは無いのです。 リストボックスの行を選択し、それを条件として、サブフォームのRecordSouseにSQL文を書いているのです。。。 非常におかしい現象なのですが、 一度サブフォームCを単票フォームにして、保存し、実行し、次に帳票形式にすると、 Requery出来ました。。。 Access2007はまだ不具合が多いですが、これも一環かも知れませんね。 レスポンスしてくださり誠にありがとうございました! また何かありましたら宜しくお願い致します。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

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

yuji_from_kyoto
質問者

お礼

その通りなんです…通常リクエストされます・・・ 非常におかしい現象なのですが、 一度サブフォームCを単票フォームにして、保存し、実行し、次に帳票形式にすると、 Requery出来ました。。。 Access2007はまだ不具合が多いですが、これも一環かも知れませんね。 レスポンスしてくださり誠にありがとうございました! また何かありましたら宜しくお願い致します。