喫茶XRAYトップページ


[5444] Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/23 (日) 16:24:26 happy camper
はじめまして。
いつも参考にさせていただいています。
Windows7でのADOX.Catalogの挙動に関しての質問です。
'JETデータベースの新規作成'にあるようにADOX.Catalogを利用して、
mdbファイルを作成することは可能なのですが、
mdbを作成する場所によって、不本意な結果になることがあります。
具体的には、
mdbを作成する場所がログインしたユーザーのC:\Users\xxxx\...以下では問題ありませんが、
外付けのUSB diskなどに指定した場合に、管理者権限で実行すると、
'読み取り専用'のmdbファイルになってしまい、以後テーブルなどを作成できなくなります。
不思議なことに、管理者権限で実行しない場合は問題ないmdbファイルが作成されます。
web上で検索してみると、
http://social.msdn.microsoft.com/Forums/ar/vbinterop/thread/b6b1751e-4859-42d8-97cf-a751838aed81
に同様の現象が報告されています。

アプリの起動場所で作成されるものに違いが出ると不都合なので何とか対処したいのですが、
いいアイデアはないものでしょうか。どうぞご教示をお願い申し上げます。

当方の環境は、
Windows7 pro sp1 64bit
Delphi6,7 pro
です。

ADOX.Catalogは以下のように使用しています。
procedure create_new_mdb(src:string; var con_str:string);
var
  cat:OleVariant;
begin
  try
    cat:= CreateOleObject('ADOX.Catalog');
    con_str:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;';
    con_str:=format(con_str,[src]);
    cat.Create(con_str);
  except
    cat:= unassigned;
  end;
end;

余談ですが、KB2517589にADOの64bit問題として「Windows 7 SP1で生成したモジュールが下位OSで使用できない」
がマイクロソフトから出されています。使い慣れたadoですが、そろそろ曲がり角なのでしょうか。。
ただあちこちで利用されているので、なくなることはないとは思うのですが。。

[5446] Re:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/23 (日) 16:47:26 Mr.XRAY
▼ happy camperさん,こんにちは.

> http://social.msdn.microsoft.com/Forums/ar/vbinterop/thread/b6b1751e-4859-42d8-97cf-a751838aed81
> に同様の現象が報告されています。


これ読んだことあります.
どこかで似たような現象の内容をネット上で見た記憶があるのですが,
失念しました.
残念ながら,対処方法は分かりません.
USBなどの機器に対するUACの設定項目があれば,設定が可能なのかも?

例えば,USBディスク相当だとして,ルート以外でも同じ現象になる
のでしょうか?
あっ,試してみればいいのか.後で確認してみます...
提示のコードを参考にして.

>ただあちこちで利用されているので、なくなることはないとは思うのですが。。

私もそう思っています.

[5447] Re2:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/23 (日) 17:10:51 happy camper
▼ Mr.XRAYさん

とても速い返信ありがとうございます。

>USBなどの機器に対するUACの設定項目があれば,設定が可能なのかも?
なるほど。。
Windows7にしてから、管理者権限xxxで面倒くさいと思っていましたが、
そのような設定があったのですか。UAC自体よく理解していないので調べてみます。

>USBディスク相当だとして,ルート以外でも同じ現象になるのでしょうか?
当方の環境がルートではないので、そうだと思われます。

ありがとうございました。ではでは。

[5448] Re3:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/23 (日) 17:19:44 Mr.XRAY
▼ happy camperさん

> Windows7にしてから、管理者権限xxxで面倒くさいと思っていましたが、
> そのような設定があったのですか。UAC自体よく理解していないので調べてみます。


あるかどうかは知りません(キッパリ) (^^;


[5454] Re4:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/23 (日) 21:15:20 Mr.XRAY
で,やってみました.

開発環境は,Windows 7 U64(64bitですね) + Delphi 2010 VCL-32(Win32です)
サンプルプログラム集の[630_ADOでJETデータベースの新規作成と最適化]の
[01_JETデータベースの新規作成]です.

データベース名をEdit1に入力できるように編集しています.

(1) [管理者として実行]で実行してmdbファイル新規作成して終了
(2) [管理者として実行]でEXEを起動
(3) データを入力して終了
(4) 再度[管理者として実行]で起動して,データを確認

以上です.これ以外の細かいテストはしていません.
こちらの環境では,データの編集が可能でした.
追加したのは

procedure TForm1.FormShow(Sender: TObject);
begin
  Edit1.Text := 'K:\AAA\TEST.mdb'; //K:\はUSBです
end;

修正したのは,

procedure TForm1.btnCreateClick(Sender: TObject);の

//  ADatabaseName := '..\TEST.mdb';
  ADatabaseName := Trim(Edit1.Text);  //このコードにした

さて,何が違うのでしょう? 困りました.


http://mrxray.on.coocan.jp/Delphi/zipothers/MDB_CreateTest.zip


[5455] Re5:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/23 (日) 21:22:38 Mr.XRAY
Windows 7 U64 + Delphi 7 Proでもテストしてみました.
同じく作成,データ編集共に可能でした.
zipファイルは,Delphi 7のプロジェクトに差し替えました.


[5456] Re6:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/24 (月) 06:14:53 happy camper
▼ Mr.XRAYさん

時間を割いてテストしていただきありがとうございます。

> Windows 7 U64 + Delphi 7 Proでもテストしてみました.
> 同じく作成,データ編集共に可能でした.


うーん。uploadして頂いたものを試してみましたが、
こちらの環境(管理者権限で実行)では、空のmdbファイルは作られるものの、
パスワードを入れると'読み取り専用.....'と表示されてアクセス2010では開けません。
(実は最初の投稿前に、貴サイトからのサンプルで同様のことを試していたのですが。。。)

どうも、私の環境に依存したもののようです。
またよく調べて、解決できればご報告いたします。

ありがとうございました。

[5457] Re7:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/24 (月) 08:21:30 Mr.XRAY
▼ happy camperさん

> パスワードを入れると'読み取り専用.....'と表示されてアクセス2010では開けません。

あっ? システムにインストールしているのがアクセス2010ですかぁ.
これはおそらくダメかもしれません.
当方で確認したのは,2007までです.
http://mrxray.on.coocan.jp/Delphi/plSamples/631_ADO_JET2007.htm

2010は,もしかしたら... 調べないと分からないです.ハイ
残念でございますが (^^; イヒヒヒッ.


[5458] Re8:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/24 (月) 08:51:47 happy camper
▼ Mr.XRAYさん

お世話になります。
まだ調べていませんが、おそらく2007と2010のインストール内容によるものでは無いように思えます。
理由ははっきりとはいえないのですが。。
個人的にはUACとADOX.Catalogの関係ではなかろうかと想像しています。。

まあ、インストーラで自分のuser領域で稼動させるようにすればいいだけなのですが、
インストールなしで動くアプリのほうが好きなので、もう少し調べてみたいと思います。

ではでは。

[5462] Re9:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/25 (火) 16:35:25 Sara
▼ happy camperさん
▼ Mr.XRAYさん

> まだ調べていませんが、おそらく2007と2010のインストール内容によるものでは無いように思えます。
> 理由ははっきりとはいえないのですが。。
> 個人的にはUACとADOX.Catalogの関係ではなかろうかと想像しています。。


Windows7 U64とOffice2010 Professional Pulsですが、正常に動作していますが・・・
動作確認だけなので、何故動くのかは聞かないで・・(^^;

一応 ご報告まで。

[5463] Re10:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/25 (火) 16:44:57 Sara
▼ happy camperさん
▼ Mr.XRAYさん
 
一応、Access2010での動作画面のScreenShotを乗せます。

[5464] Re11:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/25 (火) 20:48:55 Mr.XRAY
おおっ,Saraさん,ありがとうございます.
う〜む.Access2010ではダメと言ってしまったのは,
ウソこいてしまっったということになるのでしょうか.

だとしても,嬉しいです.こういう報告.


[5466] Re12:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/26 (水) 08:49:14 happy camper
▼みなさま

検証していただきありがとうございます。
仕事に翻弄されて??まだ解決に至っていません。。
私の環境でUACをoffにしてテストすればいいことなのですが。。。
Windows7で動いているのが家のPCだけなので、なかなかたどり着けません(家に??)。
ある程度、状況が把握できた時点でご報告したいと思います。
のろまで申し訳ありません。

ではでは

[5467] Re13:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/26 (水) 10:53:03 Mr.XRAY
▼ happy camperさん

> ある程度、状況が把握できた時点でご報告したいと思います。

まっ,気軽に.


[5473] Re14:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/30 (日) 00:58:47 happy camper
こんばんは。

少しですが、テストしてみました。
検証した結果を要約すると、

(I)UACがオンの状態で

 (A)usersの書き込み権限のない(フルコントロールでない)HHD領域にmdbファイルを作成しようとすると、

  (1)管理者の場合、
    (1-a)C:\(起動disk内?)であれば、C:\Users\<ユーザー名>\AppData\Local\VirtualStore\に作成され、
    (1-b)USB接続HDDであれば、アクセス許可が'読み取りと実行','読み取り'のファイルが作成されます。

  (2)非管理者の場合、
   mdbを作成することは不可能。以下のアラーとが出てファイルは作成されません。
   'ファイル'G:\TEST.mdb'を開くことができませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。'

 (B)usersの書き込み権限のある(フルコントロールの)HHD領域にmdbファイルを作成しようとすると、
  非管理者/管理者ともに、mdbは作成され、Accessで開くことが可能。
  作成されたファイルの、アクセス許可は'フルコントロール'。

(II)UACがオフの状態で
  (1)管理者の場合
  (2)非管理者の場合
  ともに、どのdisk領域でも、mdbは作成され、Accessで開くことが可能。
  ただし、作成されたアクセス許可は、(I)UACがオンの状態のときと同じで、HHD領域の書き込み権限の有無で決まる。


(1-b)で作成されたmdbファイルは、Access2010で開くことは不可能で、下記のアラーとが表示されます。
'このデータベースの保存に使用されたAccessのバージョンを確認できません。このデータベースは読み取り専用になっているため、この問題を修正することはできません。[OK]をクリックし、データベースを閉じてからデータベースのバックアップコピーを作成してください。その後に、読み取り/書き込みのアクセス許可でデータベースを開いてください。'

(1-b)で、UACをオフにしてみると(再起動後)、Access2010で開くことが可能になります。
しかし、再度UACをオンにすると、Access2010で開くことはできますが、読み取り専用とアラーとが表示されます。

(II)UACがオフの状態でusersの書き込み権限のない(フルコントロールでない)HHD領域に作成されたファイルは、UACをオフに変更すると、
(UACをオフの状態で一度Accessで開いていれば)、開くことはできますが、読み取り専用とアラーとが表示されます。
(UACをオフの状態で一度もAccessで開いていなければ) Access2010で開くことは不可能で、下記のアラーとが表示されます。
'このデータベースの保存に使用されたAccessのバージョンを確認できません。このデータベースは読み取り専用になっているため、この問題を修正することはできません。[OK]をクリックし、データベースを閉じてからデータベースのバックアップコピーを作成してください。その後に、読み取り/書き込みのアクセス許可でデータベースを開いてください。'

ユーザーにDiskのフルコントロール権限を与えると、(B)の状態になり問題なくmdbは作成され、Accessで開くことが可能。

上記の結果から、UACの有無にかかわりなく、ファイルを作ろうとした領域におけるユーザーのアクセス許可の状態に依存しているようで、
UACはこれに基づいた制限をかけていることが確認できました。
Access2010は、以前のバージョンで作成されたものである場合、データを読み込む前にファイルに何か修正(変更)を加えるようで、書き込み権限がないとこればできないので開けないことになってしまうようです。接続文字列に、'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<データベース>;'を与えているところが怪しく思えますが。。
そういえば、どうしてWindows7 SP1 64bitでこの文字列で動くのか前から疑問でしたが。。
まだ検証していませんが'Jet OLEDB:Engine Type=5;'を追加したらいいのでしょうか。。

まだまだいろいろ検証しなければならないことは、わかっているのですが
明日のお仕事に差し障るのでこのくらいで。。
とりあえずご報告まで。

ここは間違っているなどありましたらご指摘ください。
ではでは。


[5474] Re15:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/30 (日) 01:00:12 happy camper
読みにくくて申し訳ありません。

[5475] Re16:Windows7とJETデータベースの新規作成に関して返信 削除
2011/10/30 (日) 11:03:09 Mr.XRAY
▼ happy camperさん

いろいろテスト,お疲れ様です.
結構大変だったのではないかと思います.

> 読みにくくて申し訳ありません。

ちょっと.行の列が長いのを除いては,読みやすいです.
私など,「何回」か「難解」と書かれていますからね.
私的には質問者の文章の方が「難解」ですが...
https://forums.codegear.com/message.jspa?messageID=405194#405194
「何回」?「何階」?「難解」? 南海キャンディーズっと...

UAC関係の私のポリシーから,

まず,UACをオフで運用することは考えられません.
これは,データベース,ネットワーク関係にトラブルが発生することが
あるようです.ネタ元のURLを失念してしまったので,サイトの記事には
ありません.
また,IEの保護モードも無効になります.UACはセキュリティ関係の設定
ですので,ある意味当然かも知れません.

UACのオン・オフを切り替える運用も考えられません.
なぜなら,この設定を有効にするにはコンピュータの再起動を伴うからです.

釈迦に説法になってしまいますが,
データの書き込みは,iniファイル,拡張子が.dat等は,他のユーザが作成
したものは,操作はできません.

で,「(I)UACがオンの状態で」の結果ですが,「普通」だと思います.
少なくとも私はUACをそのように理解しています.
これは,Windows 2000以降に推奨された動作なのですが,Vistaになって
強制されるようになったわけです.
問題は,完全とも言える程UAC関係ではないでしょうか.
データベースもセキュリティに関係しますから,誰が作成したかも重要なのでは
ないかと思われます.
データベースは,管理者権限のあるユーザ以外は作成できなかったと思います.
Paradoxはどうなのかな?

とりあえず,ざっと読んだところでのところの感想です.
また後で読み直してみます.



[5476] Vista以降のUAC返信 削除
2011/10/30 (日) 11:24:18 Mr.XRAY
今回の話題とは直接の関係はありませんが,
最近,Windows 7にDelphi 7をインストールする記事を書きました.

実は,2009年3月に,VistaにDelpi 7をインストールして使用していました.
Vistaが登場してからUAC関係がネット上でかなり話題になりました.
そこで,Vistaの導入は様子見とし,ようやく2008年の年末近くになって
導入しました.(Vistaの発売は2007年?)

最近また,VistaやWindows 7にDelphi 6や7をインストール,あるいは
運用でのトラブルの発言を読みました.そこで再度やってみたわけです.
アプリの動作の不具合は,アンチウィルス等,常駐アプリ等も関係することが
あります.
このことから,本当は確信がなかったのですが,
おそらく,UAC関係の理解が不十分な方がどこかで記事を書いたのが元々
のネタではないかという確信に変わっています.
DLLやOCXの登録にも要注意ですね.

UAC関係は本当に面倒です.マイクロソフトの記事を読んでも「難解」です.

[Windows Vista以降のOSでDelphi]
前は[Windows Vista以降での利用]というタイトルでしたが,変えました
http://mrxray.on.coocan.jp/Delphi/Others/WindowsVista.htm

この記事では,データベース関係はBDE(Paradox)だけですが,
例えば,Oracleのマニュアルには説明があります.


[5477] Re:Vista以降のUAC返信 削除
2011/10/30 (日) 19:20:01 happy camper
▼ Mr.XRAYさん

無知な私に付き合っていただき感謝しております。
実は一連のテストを行ってUACのやっていること(の一部)が妙に実感できたので、
拙劣ながら書き込んでしまいました。
UACからのメッセージは、火遊びは自分の領地でしなさいということのように思えます。
利便性を考慮してか、フラッシュメモリーは自由に落書きできるみたいです。
Mr.XRAYさんが最初に言われたように、diskをフルコントロール権限下におくことが、
現実的な方法化と考えています。
(たくさんデータが詰まったDiskのアクセス許可を変更するのって時間が馬鹿にならないような。。)
でも。。いったんデスクトップ上に新規作成して、
すぐにコピーで移動させちゃうのはだめかなあと。。
また懲りずに試してみたいと思います。。

今日の朝から明日の晩までお仕事です。
すごく貧乏ではありませんよ。ちょっとだけです。

ではでは

[5478] Re2:Vista以降のUAC返信 削除
2011/10/31 (月) 00:52:02 Mr.XRAY
▼ happy camperさん

> でも。。いったんデスクトップ上に新規作成して、
> すぐにコピーで移動させちゃうのはだめかなあと。。


そうですねぇ.基本的にはマイクロソフトの方針に従うのが,やっぱり
いいのかなぁ,とは思っています.

> また懲りずに試してみたいと思います。。

「百聞は一見にしかず.百見は一触にしかず」
と言いますから,とにかく,もしかして他の人からバカバカしいと思われて
しまうかも知れない,と思われるようなことでも何でもやってみることが重要
なのではなかいかと,個人的には思っています.

うまくいかなければ,「あぁ,この方法はやっぱりダメなんだ」
という確実な知識ができると思います.
でも,その得た知識を忘れてしまうこともあるんですよねぇ(笑)


INCM/CMT
Cyclamen v3.82