プロが教える店舗&オフィスのセキュリティ対策術

AccessのコンポボックスでNULLを入れたくない

Accessのテーブルで、NULLの代わりに0を入れたいのですが、どうすればいいのでしょうか?

テーブルの既定値は0です。
そのテーブルには、フォームのコンボボックスから値を入れます。
そのコンボボックスの選択は必修ではありません。
そのため、選択しない場合は、既定値の0が入ります。
また、選択した場合は、数字が入ります。

問題は、コンボボックスで選択して、やめた場合です。
まず、コンボボックスで選びます。
でも、きが変わり、デリート(削除)でコンボボックスを空欄にします。
そして、更新した場合、テーブルにNULLが入ります。


私の希望は、コンボボックスをデリート(削除)した場合、既定値の0を入れたいのですがどうすればいいのでしょうか?
値要求は、メッセージ(ダイアログ?)が出るので、設定しないものとします。(他の人が、そのメッセージが出るたびに、どうすればいいかきいてくるからです。)

よろしくお願いします。

A 回答 (9件)

VBAになりますが


そのコンボボックスの更新後処理に

Private Sub コンボボックス名_AfterUpdate()
  Me!コンボボックス名 = Nz(Me!コンボボックス名, 0)
End Sub

とすればNullの場合だけゼロに変換されます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
これで、問題が解決しました。
ところで、最初の条件のところで、VBAは除くと入れようと思っていました。
しかし、それは無理だろうと思い、その条件は除外しました。
でも、これをマクロでやる(VBA以外)ってのは無理でしょうか?

お礼日時:2010/08/30 14:41

> でも、これをマクロでやる(VBA以外)ってのは無理でしょうか?



なぜマクロでやりたいのかは不明ですが

更新後処理のマクロで
値の代入
アイテム [Forms]![フォーム名]![コンボボックス名]
式     Nz([Forms]![フォーム名]![コンボボックス名],0)
でできるでしょう。

エラー時にダイアログで簡単な説明を表示しても、読んでくれないのが人によっては"普通"みたいで、開発者が近くにいるから使用者も甘えてしまうのでしょうね。
    • good
    • 0
この回答へのお礼

ありがとうございます。

えっ!マクロでも出来るんですか?
私はこの問題にぶつかったとき、VBAでやるしか方法はないと考えていました。

>なぜマクロでやりたいのかは不明ですが

このシステムを作るに当っての条件として、だれでもわかると言う条件が付けられました。
その条件で行くと、VBAは却下となります。
しかし、VBAしか方法がないとなれば、例外も認められます。
そのため、マクロでは出来ないと言う確認のため、質問してみました。

お礼日時:2010/08/31 00:53

参考に。


ほか、マクロの、条件式あり値の代入やリストボックスを見ておくといいのでは?。

マニュアルは作らなくても簡単な手順説明1フォーム画面あるだけでも違います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

>簡単な手順説明1フォーム画面あるだけ

と、思うのですが、私のところでは、余分な画面があるだけで
「むずかし~、わからん」
「やっぱり、前のシステム(エクセル)の方が簡単や~」
となります。

そのため、不必要に文字を大きくしたりして、なるべく拒否反応が起らないようにする必要があります。
まるで幼稚園児に物を教えるような配慮が必要になります。

お礼日時:2010/08/31 00:49

すみません。


3の回答は無視して下さい。

何も選択したくないときのために、「該当なし」の選択肢はどうだろうと考えていたことなので。
    • good
    • 0
この回答へのお礼

ありがとうございます。

>3の回答は無視して下さい。
よくわからなかったので、また質問するところでした。

>「該当なし」の選択肢
これも考えました。
しかし、増設増設で作ったうえに、時間が経ったため、構造がわかりません。
そのため、該当なしを追加するのが怖くてやめました。

お礼日時:2010/08/30 14:51

さらに追伸 (^^ゞ


いくら頑張ってすばらしい操作マニュアルを作成しても
勉強会のような形で半ば強制的に覚えてもらわないと
ほとんどの場合は『そこに置いといて後で見るから』で終わってしまい勝ち。
フォームのプロパティのその他タブにヒントテキストてのがありますので
簡単な説明はここに入れてあげましょう。
    • good
    • 0
この回答へのお礼

さらに追記(T-T)

>『そこに置いといて後で見るから』

そんな前向きな答えさえ期待できません。
上を見ればきりがありません。
そして、下を見てもきりがありません。
世の中には、創造を超えるところもあるようです。

お礼日時:2010/08/30 14:48

追伸


まったく見ず知らずの第三者に使ってもらうのではなく
社内で使用する場合には、ある程度運用面で対応して行ったほうが良いかと
思います。
>他の人が、そのメッセージが出るたびに、どうすればいいかきいてくるからです。
社内使用の場合なら、そのアプリケーションの操作マニュアルを作り
また、コンボボックスはプルダウンした中から選ばんとイカン等々の
教育も必要かと。
作りこむのも大切ですがね。
正直『よくやってくれるよ』と言いたくなることもあり。
↑これは使用者への愚痴です。
    • good
    • 0
この回答へのお礼

ありがとうございます。

>コンボボックスはプルダウンした中から選ばんとイカン等々の
教育も必要かと。

私も、初めのころは、同じ考えでした。
しかし、今は、無理なものは無理と悟りました。
教育するどころか、私が教育された気分です。
あきらめることも肝心。
私が、この会社で唯一覚えたことかも知れません。

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

コンボボックスでしたね。

前の伝えたやり方でなく、更新したい値0をコンボボックスの見せない列に追加したらそう手間かからないし簡単です。

既にあるものは更新クエリで良いです。
    • good
    • 0

>そのテーブルには、フォームのコンボボックスから値を入れます。



(ユーザにテーブルに0がセットされたかどうかその瞬間で解らせる必要がなければ)
フォームのコンボボックスを非連結項目にしておいて、
テーブルへは
フォームのコンボボックスの更新後結果を元に更新する。

一通りの入力が終わったときに、
0にしたいデータがどれか、判断できれば更新クエリで一括更新も可能かと
思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

今回、テーブルをチェックして、NULLが入ることがわかりました。
だから、今までのデータは、更新クエリで修正するつもりです。

しかし、私は忘れっぽい。
ACCESSなんて、たまにしか触らない為、簡単なことでさえ忘れてしまいます。
今回も、久しぶりのため、入門書片手に質問しています。
そのため、できるだけ手間はかけないようにしたいと考えています。
入力時点で、0が入る処理はないでしょうか?
更新クエリでさえ、覚えておく自信がありません。(情けないですが・・・)

お礼日時:2010/08/29 23:18

コンボボックスの更新後処理でコンボボックスの値がNULLなら0を入力するようにしておけばいかがですか。

    • good
    • 0
この回答へのお礼

ありがとうございます。
>更新後処理でコンボボックスの値がNULLなら0を入力するようにしておけば

まさに、これがやりたいのですが、やり方がわかりません。
具体的には、どのようにすればいいのでしょうか。

お礼日時:2010/08/29 23:10

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

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


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