ここから本文です

VB.NETでACCESS DBに接続するアプリを作成しました。 DBファイルはネットワークの...

aho********さん

2012/4/2713:04:02

VB.NETでACCESS DBに接続するアプリを作成しました。
DBファイルはネットワークの共有フォルダに置いてあるのですが、
他の場所に移して利用することもあるので、保存先を選択できるようにしたいです。

1.アプリ起動後ログイン画面にてDB変更ボタンを押したらダイアログが出てDBファイルを選択できるようにする。
2.選択した際に、アドレス+DBファイル名を取得してApp.configに記載してある接続先を書き換える。
このようにしても問題ないでしょうか?
また、DBの接続先に誤ったファイルを指定したときの対処法はありますか?
基本的に立ち上げたらApp.config記載のDBに自動的に繋ぎに行く仕様となっており、間違って別のDBに接続したらエラーで起動できなくなってしまうでしょう。
これを回避する手段として、立ち上げ時にDBに接続しに行かず、ログインボタンを押したタイミングでDBからユーザー情報を取得しようと考えています。
エラーはtry&catchで例外エラーを拾うようにしてますが、DBの接続先が間違っている場合はどのようにスルーすればいいでしょうか?
この辺りのテクニックなども含めたアドバイスお願いします。

補足TableAdapterを使用して接続しており、接続文字列をコードで打ち込んでいるわけじゃないので
手入力で接続先を動的に変えるのが難しいです・・・
TableAdapterやめて構成を見直すしかないでしょうか?

閲覧数:
1,968
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

shimixさん

2012/4/2715:31:42

#VB.Netは全然わかりませんが(汗

一般的には下記のようなロジックにしませんかね(制御構文もよく知らないので間違ってたら適宜読み替えてください)。ファイルの存在チェック(FileExists)くらいはあると思いますが・・・

前回設定しているファイル名を読み込む
do until (ファイルが存在&&正しいファイル) → 存在しなければ読み込みチェックは不要ということ
ファイル名を入力させる(cancelでアプリ終了)
loop

もちろん、間違ったファイルを指定したということも起こりえますが、それはファイルを開いて(最低でも拡張子くらいは予めチェックしますよね)所定のテーブルの存在チェックなどでいけそうですが・・・

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

dot********さん

2012/4/2812:26:06

正統派の.NET風の回答で。
TableAdapter使ってるのに、今更OleDbConnectionの直打ちからはじめるのはちょっと
レガシーASPじゃないです(笑

DataSetウィザード画面でTableAdapterを生成すると、たしかDataSet名.designers.vbに自動的にTableAdapter名のついたクラスが作成され、その中で、ウィザード作成時に設定されている接続文字列の名前(XXXXX.ConnectionString)がConnection.ConnectionStringプロパティにセットされます。
で、TableAdapterインスタンスが生成されるたびに、その情報にもとづいて接続を試み、接続できないとエラーを出します。
このエラーをTry/Catchで補足し、そこでダイアログ出すなりして、ユーザに.mdb収容デバイスを選択してもらう。
デバイス/フォルダが決まったら、そこからファイル名~接続文字列を計算して、これをTableAdapterのConnection.ConnectionStringプロパティにセットすればエエです。

要するに、TableAdapterは、
・手動ウィザード画面で生成すると、その時の接続文字列を初期値としてもつ
・同時に、.configにその文字列がセットされているので、こいつを触れば初期設定値を変えられる
・さらに、TableAdapterクラスを継承して初期値を入れなおすこともできる
・最終的に、今回の例のように手動で「そん時だけ」接続文字列を入れて繋がせることもおK
なんですわ。今更、後戻りはやめましょう。

てか、TableAdapterは(今は昔な)ADO.NET2.0時代の技術。今はDataSourceControl -> LINQ to SQL -> EntittyFrameworkと進化して、ますますコードは打たなくなってますよ(笑

http://blogs.wankuma.com/rti/archive/2007/07/18/85677.aspx

ncs********さん

編集あり2012/4/2809:20:23

当方は VB.NET 2003(VB) しか使っておりませんが、貴殿のスキルがPG作成が
出来るものとして、回答してみます。

DB内に正常OPENを判定する為の特定のファイル、レコードを作成して、
1度取得してみてエラーであれば、DBを再度選択し直すような事で回避できませんでしょうか?

読込が正常であれば、ダイアログ等にセット(要履歴確認)すればOkでは?


Dim 棚接続 As OleDb.OleDbConnection = New OleDb.OleDbConnection
Dim 棚DB As DataSet = New DataSet("TEST")
Dim 作場所, 作本名, 作表名 As String

棚接続.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source =" & 作場所 & 作本名 & ";Persist Security Info=False"

作表名 = "設定"
作検索 = "SELECT * From " & 作表名 & " WHERE 項目='必須'"
抽設定 = New OleDb.OleDbDataAdapter(作検索, 棚接続)
抽設定.Fill(棚DB, 作表名)
表設定 = 棚DB.Tables(作表名)
示設定 = New DataView(棚DB.Tables(作表名), "", "", DataViewRowState.CurrentRows)
設定最大 = 表設定.Rows.Count
If 設定最大 < 1 Then
MsgBox("設定レコードがありません、存在場所が違うのでは?")
Me.DB選択.Focus()
End If

App.config については利用方法が良く分かりません。

追記
読込方法は何にせよ、処理を始める前に1度読んでみて、
(上記ルーチンでは省略していますが)エラーになったら存在しないと判断させ、
存在場所選択のリストボックスの再入力へ移動させると言う考え方です。

尚、”作場所”が接続場所を指示する変数ですので、リストボックス等の
の内容を 作場所= Me.リストボックス.SelectedItem 等の処理により
埋め込み、処理を行えば手入力する必要は無いと思います。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる