< | >

ACCESSクエリ、演算フィールドで結合した際のデータ更新
  • (2009-02-22 10:19:12)
クエリデータの更新ではまる。

-------------------------------

数日前「ACCESSから直接メール送信」で新しく作成したクエリでははじめメールの送信結果の書き込みができなかった。調べていくとどうもクエリの「演算フィールド」で結合したテーブルのデータは更新できないようだ。「演算フィールドはテーブル間結合の結合子として使用することはできない」ということだろうか。

演算フィールドそのものがデータ更新を禁止される理由は理解できる。更新できれば演算に使用したオリジナルのデータとの整合性がとれなくなる。これはアプリケーションで禁止した方が安全。しかし、演算フィールドで結合されたテーブルのうち、データ整合性には問題ないフィールドもあるので全フィールド禁止という理由がわからずいろいろ考えてみた。結論は出なかった。

時間ばかり食うのでおそらく「テーブル間結合の結合子として演算フィールドを使ってはならない」と解釈した方が早い。苦肉の策として演算フィールドを止めて演算結果を「更新クエリ」でオリジナルテーブルに再書き込みを行う。つまり、クエリ内の演算で生成された仮想テーブル内のダイナミック・データをいったんオリジナルのリアルテーブル内でフィックスさせてしまう。こうしてなんとか更新は可能となった。

ワンアクション多くなるところが若干美しくないがやむ得ない。

-------------------------------

後日談:Microsoft社のWEBで下記の記述を見つける:

"フォームやデータ アクセス ページではデータを更新できます。フォームの [レコードセット] プロパティを [ダイナセット (矛盾を許す)] に設定すると、クエリに基づいてデータを更新できます。"

フォームのレコードセットのプロパティを[ダイナセット]から[ダイナセット(矛盾を許す)] にすると動くようになった。嬉しいが、「矛盾を許」していいのか、どうなのか?理論的に考えて矛盾は起きないのだから「許す」でよいの判断している。






<< 日付を変更するVB< | >ACCESSから直接メール送信 >>
search
layout
admin

[▲page top]