Accessデータベースを開いてるのに変更が反映されない??

Accessで更新内容が反映されないぞ

Windows7でAccessデータベースを使ったシステムを開発してる時に起こった出来事。

指定パスにあるデータベース(mdbファイル)を別アプリで開いてUPDATEする。
データベースを開いている時に指定パスを見ると、ldbファイルが出来ているので間違いなくそのパスで開いている。

で、UPDATEした内容を確認しようと指定パスのmdbファイルを確認すると反映されていない!

しかし、もう一度アプリから開いてSELECTしてみると、UPDATEされている。

まったく分からん!

と湯○教授ごっこしながら、あれやこれや調べつつ、最終的にmdbファイル名でファイル検索して実体ファイルを突き止めた!

VirtualStore という謎エリア

mdbファイル名でファイル検索かけたら、見慣れないパスにファイルが存在していた。

C:\Users\[ユーザー名]\AppData\Local\VirtualStore

この下にデータベースが入っているフォルダが作成されてその中に問題のmdbファイルが存在していた。

内容を確認するに、アプリから更新されてたのはこのファイルだった。

VirtualStoreって何者?

Google先生に聞いてみたところ、以下のような答えが返ってきた。

権限の持ってないフォルダ/ファイルへの変更をした場合、OSが自動で代替ファイルを作り、そちらで処理を実行。
処理自体は正常を返し、以降は代替ファイルに書き込むを行う。

つまりOSの保護システム的なものらしい。

なので解決方法としては2通りある。
指定パスのアクセス権を変更するか、VirtualStoreを無効にするか、だ。

以下に、VirtualStore機能をオフする方法を書いておく。

VirtualStoreを無効にする

「コントロールパネル」→「管理ツール」→「ローカル セキュリティ ポリシー」→「セキュリティの設定」→「ローカル ポリシー」→「セキュリティ オプション」→「ユーザー アカウント制御:各ユーザの場所へのファイルまたはレジストリの書き込みエラーを仮想化する」「無効」にする

(上記で出来ない場合)
レジストリエディタで直接無効化する。
「ファイル名で実行」に「regedit」と入力してレジストリエディタを起動。以下のキーの値を変更する。

  • キー :[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
  • 値:[EnableVirtualization]=(1:有効、0:無効)

単純にユーザー側から見ると混乱する元でしかないから、こういうのやめて欲しいなぁ…。

投稿者: Output48

中学生の時に初めてHTMLに触れてからホームページ制作を独学で始める。 ベンチャー企業の営業、大手企業のPG・SEを経て、独立。 現在はとある企業のCTOと、変な名前の会社の社長をしてる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください