こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

vb.netでデータベース(Access)を複数アクセス(編集)する方

vb.netでデータベース(Access)を複数アクセス(編集)する方法について

いつも大変お世話になっています。
vb.netでデータベース(Access)を複数アクセス(編集)する方法についてご教授願います。

'SQL文
Dim wrk_sql As String
'データベース
Dim G_DATABASES As New System.Data.OleDb.OleDbConnection
'DBの型を定義
Dim dr As System.Data.OleDb.OleDbDataReader
'SQLの型を定義
Dim cmnd As New System.Data.OleDb.OleDbCommand
'データベースを開く
G_DATABASES = DBOpen(D:\test\db1.mdb")
'データ抽出 ※1
wrk_sql = "SELECT * FROM TEST"
wrk_sql &= " WHERE N_DATA = 0"
cmnd.Connection = G_DATABASES
cmnd.CommandText = wrk_sql
'コマンドの実行
dr = cmnd.ExecuteReader()
While dr.Read() = True
' ………← ※2
End While

<目的>
[※1]で抽出した結果(複数行存在します)を保持したまま
[※2]の中で同じDB(G_DATABASES)にアクセスし
SELECT文で抽出した結果を保持したまま処理を続けたい。

<問題>
・実行時「指定したデータベースは既に開いている」とのエラーが表示。
・DBの型の定義、SQLの型の定義 を複数用意してもエラーが表示。

投稿日時 - 2010-09-03 10:28:45

QNo.6155247

すぐに回答ほしいです

質問者が選んだベストアンサー

DataAdapterを使われたほうがよろしいかと。

'/**コネクションしてテーブル取得**/
Dim Con As OleDbConnection, Cmd As OleDbCommand
Dim Provider As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" '接続プロバイダ
Dim st As String

st = Provider
st &= Chr(34) & mdbPATH & Chr(34) & ";"

Con.ConnectionString = st
Cmd.Connection = Con

Dim ds As New DataSet
Dim dt As DataTable
Dim dbAdapter As OleDbDataAdapter

wrk_sql = "SELECT * FROM TEST"
wrk_sql &= " WHERE N_DATA = 0"

Cmd.CommandText = wrk_sql
dbAdapter.SelectCommand = Cmd

dbAdapter.Fill(ds, TableName)

dt = ds.Tables(TableName)

'/******************************************************//

あとは、アダプターを使って追加・更新・削除を行なえばOK!!

投稿日時 - 2010-09-06 14:05:20

お礼

レス遅くなり申し訳ございません。
無事解決いたしました。ご協力ありがとうございます。

投稿日時 - 2010-10-13 15:47:17

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

下記の部分について、名前を変えて、もう1セットデータベースを開くというのはどうでしょうか?

'データベース
Dim G_DATABASES As New System.Data.OleDb.OleDbConnection
'DBの型を定義
Dim dr As System.Data.OleDb.OleDbDataReader
'SQLの型を定義
Dim cmnd As New System.Data.OleDb.OleDbCommand
'データベースを開く
G_DATABASES = DBOpen(D:\test\db1.mdb")

投稿日時 - 2010-09-07 17:37:49

お礼

レス遅くなり申し訳ございません。
無事解決いたしました。ご協力ありがとうございます。

投稿日時 - 2010-10-13 15:47:40

ANo.1

DataReader を使っているからでしょう?
該当データを DataTable で全て取得して、接続を閉じれば良いのでは?

投稿日時 - 2010-09-03 12:12:33

お礼

お早いご返答、誠にありがとうございます。
Dim rsDATFIL As DataTable '※追加
'コマンドの実行
dr = cmnd.ExecuteReader()
rsDATFIL = dr.GetSchemaTable '※追加

rsDATFIL.CreateDataReader.Read
を行い、テーブル内を覗たのですが
ヘッダ情報しか取得できませんでした...

投稿日時 - 2010-09-03 17:03:02

あなたにオススメの質問