ここから本文です

accessVBAです。

fla********さん

2017/7/2506:07:41

accessVBAです。

DAOを使用してレコードセットを操作したいのですが、クエリの抽出条件に フィールド名 is null としているのにデータが入っているレコードまで消えてしまいます。(正確には、ほとんどうまく行くけど稀に消えることがあります)
null値と判定されてしまう原因として、何が考えられるでしょうか?

閲覧数:
175
回答数:
2

違反報告

ベストアンサーに選ばれた回答

ipl********さん

2017/7/2509:15:46

基本的に、無いと思います。
特に、「時々」という事になると、Accessの信頼性が損なわれてしまいます。
なので、何か他の要素があると思います。

まず、再現性と言うか、「こういう場合は消える」というパターンがあるのでしょうか。
また、条件が「フィールド名 is null 」だけの時でしょうか。





ちなみに「消えない」と言う場合は結構あって、文字列で""(長さ0の文字列)が入っているとか、スペースが入っていたとか言う事があるので、Trimとnzを使うという事はあります。

  • 質問者

    fla********さん

    2017/7/2511:12:47

    回答ありがとうごさいます。
    条件はis nullのみです。

    消えてしまう時のパターンが分からないので困っているのですが、SQLで実行してもループで一件ずつ見ていっても消えてしまう時があるので、やはり特定のデータがnullと判断されてしまっているのだと推測しています。

    コードの全文が貼り付けられれば良いのですが環境がなく…

    処理の流れとしては、
    DAO.database(仮変数db)とDAO.recordset(仮変数rs)を変数宣言後にset→openrecordsetでとあるレコードセットを開く→ある処理を経てrsはclose→nothing→ここで問題となる処理 db.excute ″DELETE * FROM テーブル名 WHERE フィールド名 is null″→最後にdbをclose→nothing
    という感じです。

    1つ気になっているのは、DELETE で何件か削除した後、同テーブルにデータをinsertしているのですが、これを繰り返すうちに見えないデータが残ってしまっているとかは無いですよね?

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜1件/1件中

kak********さん

2017/7/2512:49:50

DAO.recordsetを更新後、Updateメソッドを実行しないでDelete処理に移行している。あるいはDelete後、Updateメソッドを実行しないで更新処理に移行しているとかはありませんか?

Updateメソッドを呼び出さないと実際のデータベースには書き込まれないので(or書き込まれなかったはずなので)、そのあたりで動作があやふやになっているのでは?
レコードを更新したつもりがデータベースに書き込まれていないので、更新前のレコードに対するWhere条件でたまたまマッチしたレコードが削除されているので「稀に消える」ように見えるのでは?

DAOもトランザクションは使えたはずですので、動作を正確にするためにTransactionの利用を検討されてはと思います。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる