Access(アクセス)データベースで、VBAにて、レコードを追加する処理を行おうと思っていたら、
ココに注意
Nullの使い方が不正です
となりました。さらに、
ココに注意
オブジェクトが閉じている場合は、操作は許可されません
となりました。
いったい何が原因なのでしょうか?
デバッグで原因を突き止める
NULLがどうのってのは訳が分からなかったので後回しにして、オブジェクトがってのは、レコードセットが開いてない場合が原因だという事じゃないかと考えて追及していました。
【Access】非連結フォームデータ検索・更新・追加・削除(VBA処理)
過去の記事からコード丸写しだったので、そのコードと、他のコードを比較すると、
Set rs = New ADODB.Recordset
この部分が抜けていました。
しかし、改善はしませんでした。
原因は、NULLを変数に代入時点
テーブルへレコード追加する前に、変数に追加したいデータを代入するようにしましたが、どうも、
ココに注意
変数にNULLをいれるとエラーがでる
ようです。
AccessってレコードにNULLの追加はできないのでしょうかね???
しかたないので、条件文で、NULLの場合は、「””」を入れるようにしました。
in_address = DLookup("address", "dbo_fba", "[flag] = 1")
上記のようなコードから下記のようにしました。
in_address = IIf(IsNull(DLookup("address", "dbo_fba", "[flag] = 1")), "", DLookup("address", "dbo_fba", "[flag] = 1"))
つまり、Dlookupで検索した内容が、Nullだったときに、エラーになっていたようです。
更なるエラーに悩まされる
ひとやま超えたと思ったら・・・
ココに注意
要求された名前、または序数に対応する項目がコレクションで見つかりません
というエラーです。
いろいろと調べると、VBAで追加しようとしているフィールドが、追加しようとしているテーブルに無いのが原因のようです。
こういう時は、良くあるのが、打ち間違いです。
追加したテーブルのフィールド名 client なのですが、実際は、 clinet になってた(´;ω;`)ウゥゥ