Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
フォームのテキストボックスにDlookupでテーブル上の値を代入したいのですが...
投稿日時: 17/06/08 18:46:38
投稿者: とまる

いつもお世話になっております。
フォーム上での表示がうまくいかず質問をさせて頂きます。
 
フォームにあるテキストボックス[管理番号]の番号を元に、
テーブル上のフィールドより値を抽出し、
その値をテキストボックスに代入したく思い下記の操作を行いました。
−−−−−
■テーブル名「メイン」
フィールド|管理番号(主キー)|取引態様|
 
■フォーム名「台帳記入」
・テキストボックス[管理番号](→台帳記入フォームでも別途入力します)
 イベントプロシージャ
 Private Sub 管理番号_AfterUpdate()
 DoCmd.Requery
 End Sub
 
・[取引態様]コントロールソースプロパティ
 =DLookUp("取引態様","メイン","管理番号 = " & [管理番号])
−−−−−
この状態で[管理番号]を更新すると[取引態様]が空欄になってしまいます。
メインテーブルの取引態様フィールドに空欄はなく万策尽きた状態です...
当方未熟者にて大変恐縮ですがお力添え頂けますと幸いです。

回答
投稿日時: 17/06/08 19:34:00
投稿者: Suzu

こんにちは。
 
 Requery は、 フォーム・コントロールに対して発行する事が可能です。
 
 今回のRequeryは どのコントロールに対し実行されるでしょうか。
 Docmdの場合、フォーカスのあるコントロールに対し 実施されます。
 
 ですから、「管理番号」に対し再クエリが行われますよね。
 フォーカスを取引態様に移す命令を直前に入れてみましょう。
 
 
別案
 
  [取引態様]コントロールソースプロパティ に
  =DLookUp("取引態様","メイン","管理番号 = " & [管理番号])
  を指定せず、空白のままとし
 
 Private Sub 管理番号_AfterUpdate()
 Me.取引態様 =DLookUp("取引態様","メイン","管理番号 = " & [管理番号])
 End Sub
 
 ってのもアリですよね。

回答
投稿日時: 17/06/09 03:26:43
投稿者: hatena
投稿者のウェブサイトに移動

Suzuさんの DoCmd.Requery の説明は正確ではないですね。
 
DoCmd.Requery メソッド (Access)
https://msdn.microsoft.com/ja-jp/library/office/ff195253(v=office.15).aspx
 
コントロールに対して再クエリするときは、
 
DoCmd.Requery "コントロール名"
 
とましす。
 
DoCmd.Requery
というようにコントロール名を省略すると、フォームに対して再クエリします。
 
で、質問に対する回答ですが、コントロールソースにDLookupを設定した時、再クエリしなくても、条件テキストボックスを更新すれば、自動で更新されるはずです。
 
「メイン」テーブルの「管理番号」フィールドのデータ型が数値型なら現状の式でいいのですが、テキスト型なら下記に変更してください。
 
=DLookUp("取引態様","メイン","管理番号 = '" & [管理番号] & "'")
 
 
Private Sub 管理番号_AfterUpdate()
  DoCmd.Requery
End Sub
 
は削除しておいてくださいね。意味がないですから。

回答
投稿日時: 17/06/09 11:03:07
投稿者: Suzu

間違った情報をすみあせんでした。
 
hatenaさん ありがとうございました。

投稿日時: 17/06/09 12:34:41
投稿者: とまる

Suzu様 hatena様
 
解 決 し ま し た!!!!!!!
 
管理番号がテキスト型だった為表示がされなかったようです。
お恥ずかしい...スッキリしました、大変助かりました。
そして出来た瞬間ゾクゾクしました。
 
Requeryの件も勉強になりました。
これまでクエリからの抽出等の折にフォームの再クエリを使っていたので
コントロールの指定、行ってみますね!
 
Suzu様、hatena様、お二方とも大変ありがとうございました!