テーブルのデータ更新してもフォームで反映されない
この問題は、過去に何度もぶち当たって、とにかく再クエリをすればいいと思っていました。
さらに詳しく
もちろん、ファンクションキーF5(再読込)を押せばちゃんとデータが更新されます
マクロなどでは、再クエリ、VBAでは、
DoCmd.ShowAllRecords
Me.Requery
DoCmd.RunCommand acCmdRefresh
この3つのコードのうちどれかを入れておけば再表示されると思っていました。
しかし、今回は、再表示されないのです。
原因は、
ココがポイント
フォームを「開く時」じゃなく、「読み込み時」にコードを入れる
というのがポイントでした。
Private Sub Form_Load()
Me.Requery
End Sub
読み込み時でも開く時でも同じじゃないかと思っていましたが、「開く時」⇒「読み込み時」という流れで処理されていくようなので、フォームが開いた後の読み込み時に再クエリをかけないと再表示にならないという現象でした。
突然テキストボックスが#Name?となった!
帳票フォームをデザインモードで開いて、あるテキストボックスの並び替えをしようとして、フォームのプロパティシートの「並び替え」のエリアに並び替えをしたいテキストボックス名を入れた。
うまく並び替えができなかったので、元に戻してフォームの表示をしてみると、今までちゃんと表示をしていたテキストボックスの数値が
ココに注意
「#Name?」と表示されてちゃんと表示をしてくれない。
今までちゃんと表示をしていたのに・・・
テキストボックスのコントロール内は何も触っていません。
#Name?の原因を調べてみると、
参考
テキストボックスの[コントロールソース]プロパティで間違ったフィールドを参照している可能性があります。
なるほど・・・・・でも、正常な時と何も変更していません。
いろいろと触っていてある場所を変更すると治ることが分かりました。
フォームのレコードセットを、
ココがポイント
ダイナセット(矛盾を許す)にすると正常
に戻りました。
これは、
参考
- ダイナセット:リレーションシップにおけるデータの関係が矛盾しない範囲でレコードを編集することができます。
- ダイナセット(矛盾を許す):すべてのレコードを編集することができます。
- スナップショット:レコードを編集することはできません。結果的に、フォームを読み取り専用で開いたときと同じ効果となります。
ということですが、今一つ理解ができません。
でも、とりあえず正常に戻ったので良しとしました。
しかし、不可解なのは、正常に戻った後に、「ダイナセット(矛盾を許す」⇒「ダイナセット」にして戻しても正常に動いてエラーになっていません。
いったい何なのでしょうか?
条件付き書式で空白条件がうまく設定できない
テキストボックス内のデータが何もない場合のエラーチェックの意味で「条件付き書式」というのを使って人間が分かり易いように背景色やフォント色、大きさなどで警告を出してくれる機能であり、何気に使えます。
私も簡易的な入力チェックなどの確認で使ったりしますが、空の場合はということで、条件に「Null」や「””」を入れたりしますが、うまく動作してくれないことがあります。
そこで、下記のような式を使ったらうまく行きました。
IsNull([stock])=True
この式は、VBA等でも使っていますね。