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

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

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

Re[8]: mdbをユーザーのPCにコピーする


(過去ログ 61 を表示中)

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

■35238 / inTopicNo.1)  mdbをユーザーのPCにコピーする
  
□投稿者/ hs (24回)-(2009/04/22(Wed) 17:54:34)

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

VS2008-VBです。
以前こちらで解決した件なのですが、配布するAPにDBを設置したくプロジェクト内にmdbを用意してインストールの際に、
そのmdbをユーザーのPC内にコピーする方法でお世話になりました。
その際、フルパスでmdbのコピー先を指定せず、相対パスを取得しユーザーのPCにコピーする手法を教えていただき、
その件では下記記述PGで意図することができました。
しかし、勿論下記記述のPGで問題なく動いてはいるのでが、いざインストーラーを作成し別のPCで検収したら専用のフォルダは生成されるのですが、肝心の「 mdbファイルは、見つかりません 」とエラーになってしまいます。

ためしにプロジェクト内に.txtを用意したところコピーに成功しました。
前回にmdbの 「出力ディレクトリ」は、「新しければコピーする」にすることを教えていただき プロジェクトの出力ディレクトリには順調に上書きされております。

また、mdbはexe形式と認識されると聞いたこともあり、mdbの拡張子を "xyz" とか "ini" とか適当なものに変えて挑戦してみましたが、やはり 「見つかりません」とエラーが帰ってきます。

Dim FName As String = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

If IO.Directory.Exists(FName & "\専用フォルダ") = False Then  'FName に専用フォルダがあるか確認
IO.Directory.CreateDirectory(FName & "\専用フォルダ2)     'なければ FName に 専用フォルダ を生成
FName = FName & "\専用フォルダ"
End If

'FName内 に "000.mdb" ファイルがあるか確認
'なければプロジェクト内に保存してある "000.mdb" ファイルをFNameにコピー
If IO.File.Exists(FName & "\000.mdb") = False Then
Dim mdbPath As String = IO.Directory.GetCurrentDirectory.ToString & "\000.mdb"
IO.File.Copy(mdbPath, FName & "\000.mdb")

なにがいけないのでしょうか?
みなさんよろしくお願いします
引用返信 編集キー/
■35241 / inTopicNo.2)  Re[1]: mdbをユーザーのPCにコピーする
□投稿者/ aetos (133回)-(2009/04/22(Wed) 18:13:13)
aetos さんの Web サイト
No35238 (hs さん) に返信
> しかし、勿論下記記述のPGで問題なく動いてはいるのでが、いざインストーラーを作成し別のPCで検収したら専用のフォルダは生成されるのですが、肝心の「 mdbファイルは、見つかりません 」とエラーになってしまいます。

インストーラが作ったショートカットから実行してますか?

> 'FName内 に "000.mdb" ファイルがあるか確認
> 'なければプロジェクト内に保存してある "000.mdb" ファイルをFNameにコピー
> If IO.File.Exists(FName & "\000.mdb") = False Then
> Dim mdbPath As String = IO.Directory.GetCurrentDirectory.ToString & "\000.mdb"
> IO.File.Copy(mdbPath, FName & "\000.mdb")

カレントディレクトリと exe があるディレクトリは必ずしも一致しません。特にショートカットから実行しているような場合は。
exe があるフォルダが欲しいなら、
Application.StartupPath とか
Assembly.GetEntryAssembly().Location とか
AppDomain.CurrentDomain.SetupInformation.ApplicationBase とか
を使いましょう。
引用返信 編集キー/
■35245 / inTopicNo.3)  Re[2]: mdbをユーザーのPCにコピーする
□投稿者/ hs (25回)-(2009/04/22(Wed) 19:15:39)
No35241 (aetos さん) に返信

> インストーラが作ったショートカットから実行してますか?
実は今日の今日までインストーラーはビルド-APの発行からしか作った事がなく、今日本を買いセットアップというツールがあることをしったばかりです;

> exe があるフォルダが欲しいなら、
exeファイルというか、単純にmdbファイルを決まったディレクトリに保管したいだけなのですが...mdb自体もexe?

> カレントディレクトリと exe があるディレクトリは必ずしも一致しません。特にショートカットから実行しているような場合
> Application.StartupPath とか
> Assembly.GetEntryAssembly().Location とか
> AppDomain.CurrentDomain.SetupInformation.ApplicationBase とか
> を使いましょう。
いま上記のメソットを検索かけたら理解できそうなサイト見つけましたのでもうちょっと調べてみますm_ _m


引用返信 編集キー/
■35283 / inTopicNo.4)  Re[3]: mdbをユーザーのPCにコピーする
□投稿者/ aetos (135回)-(2009/04/23(Thu) 14:48:39)
aetos さんの Web サイト
No35245 (hs さん) に返信
>>exe があるフォルダが欲しいなら、
> exeファイルというか、単純にmdbファイルを決まったディレクトリに保管したいだけなのですが...mdb自体もexe?

前の投稿がどれだか知りませんが、提示されたコードはおそらく、初回実行時に exe と同じフォルダに置いてある mdb を AppData にコピーすることを意図したものだと思います。
その意味で、「exe があるフォルダが欲しいなら…」と書きました。
言葉を補うなら、「コピー元の mdb は exe と同じフォルダに置いてあるので、exe があるフォルダのパスを取得したいなら…」とでも言いますか。
引用返信 編集キー/
■35292 / inTopicNo.5)  Re[4]: mdbをユーザーのPCにコピーする
□投稿者/ ぱぱいやん (4回)-(2009/04/23(Thu) 18:15:29)
ぱぱいやん さんの Web サイト
コピー元がないのでしょうか?
コピー先がなくてエラーが出るのでしょうか?

引用返信 編集キー/
■35310 / inTopicNo.6)  Re[5]: mdbをユーザーのPCにコピーする
□投稿者/ ちゃっぴ (230回)-(2009/04/24(Fri) 02:14:31)
ちゃっぴ さんの Web サイト
http://bbs.wankuma.com/index.cgi?mode=al2&namber=34526

なんか code を書いているということは installer ではなく、実行時に copy しているということですか?
Installer でやってしまえばいいのに。
引用返信 編集キー/
■35311 / inTopicNo.7)  Re[6]: mdbをユーザーのPCにコピーする
□投稿者/ hs (26回)-(2009/04/24(Fri) 07:10:42)
皆さんご回答感謝しております。

■35258 (らじうむさん) に返信
実はVBを始めたのがつい1ヶ月ほど前になります、それまではホントに簡単なAccessVBAでの開発しかしたことがありませんでした。
レポートの感覚がAccess思考のため色々なところを検索した結果すべてデータベースと直結しているような方法ばかりで...
もちろんAccessのレポートもデータと直結していないと表示する事はできないのですが、レコードセットを使うことで、データをコード上に保持し、その値をレポートで表示していました。
そのため、データセットに一旦保持し、DBとの接続を切る手法が私自身の考えでは一番ベストな方法と思い込んでいて、今回の質問内容になりました。
いちおう2冊の書籍を購入しましたが、Accessで組んでいた頃のイメージしかなく私の固い頭では理解できませんでした。;

■35259 (ぽぴ王子) に返信
上に同じです。


No35285 (みきぬ さん) に返信
> http://www.hirano.cc/crystalreports/
ずばりこの手法がイメージしていたことでした。
先ほど何とかPGをくみ上げることに成功しました。

> 調べた感触だと、Crystal Reports の情報ってあまり多くなさそうなので、そのものズバリなものを頑張って探すより
>は、近いもので妥協して自分で試行錯誤してみたほうが近道なように思えました。
上の2つに同じくこれ以外の手法しか思い尽きませんでした。
根本的にオブジェクト指向というものを実はあまり理解していませんが、最近ようやく理解してきたのかなぁと...

本当にみなさんありがとうございました。
まだまだ勉強不足ですが、また何かあったときはよろしくお願いします。


解決済み
引用返信 編集キー/
■35312 / inTopicNo.8)  Re[7]: mdbをユーザーのPCにコピーする
□投稿者/ hs (27回)-(2009/04/24(Fri) 08:19:20)
補足です。
出来上がったPGは以下の通りなのですが、よくよく見返してみるとRepにセットしたデータ(Ds)は、最後にNothingにしているのですが、現状問題なくレポートにデータは表示されています。
という事は、クリスタルレポートは、データと直結にしなくても表示されるということなんですね!
ちょっと遠回りしてしまいましたが、なんとか書籍や皆さんのアドバイスの通りに出来そうです。
やはり、頭が固いとダメですね;

Dim Cn As OleDb.OleDbConnection
Dim Da As OleDb.OleDbDataAdapter
Dim Ds As DataSet = New DataSet("テーブル名")
Dim Rep As New repCart

Cn = New OleDb.OleDbConnection(ConnectionSource)
Cn.Open()
Try
   Da = New OleDb.OleDbDataAdapter("SELECT * FROM テーブル名", Cn)
   Da.Fill(Ds, "テーブル名")
   Da = Nothing
Catch ex As Exception
   ex.Messege
   Cn.Close()
   Exit Sub
End Try
Cn.Close()
Cn = Nothing

Rep.SetDataSource(Ds.Tables("テーブル名"))
Me.CrystalReportViewer1.ReportSource = Rep
Ds = Nothing

ただ、レポートにセットしたデータベースフィールドは、> http://www.hirano.cc/crystalreports/ で紹介されていた手法です。自作のデータセットを作成したテーブルの値を使用しています。
この辺がまだ混乱しているところです。

なにか、噛み砕いたアドバイスできる方よろしくお願いします。 
引用返信 編集キー/
■35315 / inTopicNo.9)  Re[8]: mdbをユーザーのPCにコピーする
□投稿者/ hs (29回)-(2009/04/24(Fri) 08:26:38)
大変失礼なことをしてしまいました。
□35311 と □35312 はトピ違いで間違えて投稿してしまいました。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -