Microsoft Access 掲示板

SQLのWHEREのMe.filterが出来てない? / 12

13 コメント
views
12

NullがOKなら変数宣言時に Dim kensa As Variant としておくと rs![検査] = kensa の右辺には特に何もする必用ないという事ですね? 

はい、フィールドのデータ型がテキスト型の場合、それでほぼ問題ないです。
非連結テキストボックスは未入力の場合はNull値になりますので。
ただ、VBAで "" を代入したり、 "" を手入力した場合、Null値ではなく空文字列になりますので、注意が必要です。
この辺はいろいろ複雑なので説明しだすときりがなくより混乱しそうなので、とりあえずフィールドのプロパティで「空文字列の許可」を「いいえ」にしておいて、エラーが出たらその時に対応するということでいいでしょう。

ネットで調べても右辺固定値の場合は型指定がすべきとあるのですがフォーム値の場合は特にデータ型設定してないので、分からなかったのです。

これは、SQLの文法と、VBAの文法をごっちゃにしているのが、理解が進まない原因でしょう。

SQL文はVBAコード内では単なる文字列です。それをAccessやDAOがSQLとして解釈して実行します。単なる文字列ですから型指定は文字列内で型指定文字(')でします。

例えば下記のように'で囲んで文字列だと指定します。これはSQL文法です。

strSQL = "検査='" & Kensa & "'" 

DAOで更新する場合は、rs![検査] はVBAオブジェクトなのでVBA文法にそって記述します。ですので'で囲こむ必要はないです。

rs![検査].Value = kensa

コードを読むときやネット記事を読むときは、それがSQL文法なのか、VBA文法なのか意識して読むと理解がすすむと思います。

下記の記事もVBA上でSQLを扱う場合の注意点について説明していますので目を通しておくことをお勧めします。

Access上のコード内で引用符(")と単引用符(')の使い分けについて - hatena chips

通報 ...