C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: プロジェクト内に.mdbは設置できますか?


(過去ログ 60 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■34526 / inTopicNo.1)  プロジェクト内に.mdbは設置できますか?
  
□投稿者/ hs (7回)-(2009/03/31(Tue) 20:04:10)

分類:[VB.NET/VB2005 以降] 

パッケージのソフトの中に.mdbのデータベースを設置したいのですが、そのような事は可能でしょうか?
もし可能であればご教授お願いいたします。
引用返信 編集キー/
■34531 / inTopicNo.2)  Re[1]: プロジェクト内に.mdbは設置できますか?
□投稿者/ 魔界の仮面弁士 (1028回)-(2009/03/31(Tue) 21:38:53)
No34526 (hs さん) に返信
> パッケージのソフトの中に.mdbのデータベースを設置したいのですが、そのような事は可能でしょうか?

プロジェクトにファイルを含めた後、[ソリューション エクスプローラ]で
そのファイルを選択した状態で、[プロパティ]グリッドから、
 ビルド アクション = コンテンツ
 出力ディレクトリにコピー = 常にコピーする
を設定してみては如何でしょう。

ただし、インストール先のフォルダは、必ずしも、実行ユーザーにとって書き込み可能な場所とは
限りませんので、EXE のフォルダに配置された mdb をそのまま開くのではなく、たとえば
初回使用時には、そのファイルを個人フォルダにコピーしてから使用するなどの対処が
必要になるかもしれません。
引用返信 編集キー/
■34537 / inTopicNo.3)  Re[2]: プロジェクト内に.mdbは設置できますか?
□投稿者/ hs (8回)-(2009/03/31(Tue) 23:14:22)
ご回答ありがとうございます。
ご教授いただいたとおりプロジェクト内に.mdbを追加できました!

ところで現在、プロジェクトに追加した.mdbへのコネクションですが、配布時に各ユーザーが必ずしもC:\Program Filesへインストールするとは限らないと思うのですが、配布したプロジェクト内の.mdbを参照できるような記述はどうなるのでしょうか?

Dim Cn As Oledb.OledbConnection = New Oledb.OledbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data _ Source="C:\Documents and Settings\PCName\デスクトップ\APName\APName\○○○.mdb";Persist Security Info=True")

のようにフルパスみたいなコネクションだと間違えなく問題が生じるはずです。

これを常に.exeファイル(配布したアプリ)のフォルダ(カレントフォルダ)から参照するようなコネクションの記述があればそれもご教授願えますでしょうか?

よろしくお願いします。
引用返信 編集キー/
■34541 / inTopicNo.4)  Re[3]: プロジェクト内に.mdbは設置できますか?
□投稿者/ 魔界の仮面弁士 (1029回)-(2009/04/01(Wed) 00:37:50)
No34537 (hs さん) に返信
> 配布したプロジェクト内の.mdbを参照できるような記述はどうなるのでしょうか?

さしあたり、My.Application.Info.DirectoryPath あたりから辿ってみては如何でしょう。

ClickOnce のオンライン実行がありうる場合は、サーバーから
mdb をダウンロードして利用する事も検討せねばならないかも知れませんが。
引用返信 編集キー/
■34645 / inTopicNo.5)  Re[4]: プロジェクト内に.mdbは設置できますか?
□投稿者/ hs (10回)-(2009/04/04(Sat) 16:27:08)

> さしあたり、My.Application.Info.DirectoryPath あたりから辿ってみては如何でしょう。
>
お蔭様で、プロジェクト内の.mdbを参照する事が出来ました。ありがとうございます。

ところが、新たな問題が生じてしまいました。
INSERTやDELETEを実行した際、DataGridViewには結果が正常に反映されているのですが、肝心の.mdbの中身が更新されていません。
これは、Tempファイルのようなものが裏で出来ていてその値がDataGridViewに反映されているのだと思うのですが、.mdbを確実に更新させ、更新させた直後のデータをDataGridViewに反映させたいのですが、どのような記述をしてあげればよいのでしょうか?

たびたび申し訳ありませんが宜しくお願いします。
引用返信 編集キー/
■34648 / inTopicNo.6)  Re[5]: プロジェクト内に.mdbは設置できますか?
□投稿者/ Azulean (348回)-(2009/04/04(Sat) 21:01:36)
2009/04/04(Sat) 21:03:13 編集(投稿者)

下記のようなアドバイスが既にありましたが、検討されたのでしょうか?

No34531 (魔界の仮面弁士 さん) に返信
> ただし、インストール先のフォルダは、必ずしも、実行ユーザーにとって書き込み可能な場所とは
> 限りませんので、EXE のフォルダに配置された mdb をそのまま開くのではなく、たとえば
> 初回使用時には、そのファイルを個人フォルダにコピーしてから使用するなどの対処が
> 必要になるかもしれません。

例えば、VistaのProgram Filesとかファイルの作成や更新が制限されますが、そういったケースでもないのでしょうか?
試している環境が異なったとしても、他のユーザに配るときにVistaのProgram Filesにインストールされるというケースは十分考えられるので、アプリケーションと同じフォルダのmdbファイルは更新できないものとして作ることを考えて下さい。

-----
他の要因があるとすれば、mdbファイルへの適用処理が別途必要かどうかですが、データベース周りは扱っていないので、外しているかもしれません。
引用返信 編集キー/
■34651 / inTopicNo.7)  Re[5]: プロジェクト内に.mdbは設置できますか?
□投稿者/ 魔界の仮面弁士 (1041回)-(2009/04/04(Sat) 23:50:48)
No34645 (hs さん) に返信
> INSERTやDELETEを実行した際、DataGridViewには結果が正常に反映されているのですが、肝心の.mdbの中身が更新されていません。

それは配布先での話ですか? それとも開発時の話ですか?

開発環境だとしたら、「出力ディレクトリにコピー = 常にコピーする」の設定にしていると、
exe を再作成するたびに、mdb ファイルが、プロジェクトに含めていたバージョンに
指し戻ることになりますので、デバッグ時にはご注意を。


もし、それが原因ではないのであれば、JET の遅延書き込みに引っ掛かっている可能性もあるので、
明示的なトランザクションを組んでいるかどうかを確認してみてください。
http://www.canalian.com/workshop/access/JetCache.html
引用返信 編集キー/
■34663 / inTopicNo.8)  Re[6]: プロジェクト内に.mdbは設置できますか?
□投稿者/ ちゃっぴ (223回)-(2009/04/05(Sun) 10:26:24)
ちゃっぴ さんの Web サイト
User が出力を行う file は該当の user profile 配下に出力するのが原則です。
そうしないと他の user から読み取り・変更可能な脆弱性につながります。

今回の場合、対象の mdb file は user が直接指定することがないでしょうから、%APPDATA% 配下に格納するのが適切でしょう。%APPDATA% の path は System.Environment.GetFolderPath を使って取得できます。
引用返信 編集キー/
■34819 / inTopicNo.9)  Re[7]: プロジェクト内に.mdbは設置できますか?
□投稿者/ hs (12回)-(2009/04/10(Fri) 15:43:13)
No34651 (魔界の仮面弁士 さん)に返信
>開発環境だとしたら、「出力ディレクトリにコピー = 常にコピーする」の設定にしていると、
>exe を再作成するたびに、mdb ファイルが、プロジェクトに含めていたバージョンに
>指し戻ることになりますので、デバッグ時にはご注意を。

すっかりそのことが頭にありませんでした。危なく無駄な時間を消費することを避けられました。
ということで、

No34663 (ちゃっぴ さん) に返信
> User が出力を行う file は該当の user profile 配下に出力するのが原則です。
> そうしないと他の user から読み取り・変更可能な脆弱性につながります。
> 今回の場合、対象の mdb file は user が直接指定することがないでしょうから、%APPDATA% 配下に格納するのが適切でしょう。%APPDATA% の path は System.Environment.GetFolderPath を使って取得できます。

ちゃっぴさんの方法をとらせていただき今回の質問内容を無事に解決するにいたりました。
ここにたどり着くまでにすこし遠回りになりましたが良い勉強になりました。
ホントにありがとうございました。
また何かありましたらよろしくお願いします。
引用返信 編集キー/
■34820 / inTopicNo.10)  Re[8]: プロジェクト内に.mdbは設置できますか?
□投稿者/ hs (13回)-(2009/04/10(Fri) 15:44:01)
解決済み
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -