社内で使用するデータベースを利用したアプリケーションを自作しています。
例としては、日々の販売データがAccess2010に蓄積されていて、それを集計して表示するようなイメージです。
この際、Access2010に接続して、データをセットして受け取る方法に、次のようなコードを使用しています。
lang
1 Dim dbini As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[Access2010のaccdbをフルパスで記入];" 2 Dim reader As System.Data.OleDb.OleDbDataReader 3 Dim command As System.Data.OleDb.OleDbCommand 4 Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection(dbinf) 5 cn.Open() 6 7 Dim sql1 As String = "[SELECT文]" 8 9 command = cn.CreateCommand 10 command.CommandText = sql1 11 reader = command.ExecuteReader() 12 13 If reader.HasRows = True Then 14 While reader.Read() 15 ' レコードが取得できた時の処理 16 17 End While 18 Else 19 ' レコードが取得できなかった時の処理 20 End If 21 22 ''データベースからのデータ書き込み終了 23 reader.Close() 24 cn.Close()
データが正常に取れるので、最初は余り気にしていなかったのですが、要求に応えて機能を増やしていった結果、ボタンが増えたり、プログラムが複雑化するにつれ、Accessからデータを引き出す度、上記のコードが必要になって、少々面倒に思えてきました。
そこで上記のSQL問い合わせコードをModuleなどに起き、各機能からSQL文を引き渡して、レコードの結果を得る事ができないか? と考えています。
しかし、いろいろGoogleで調べた所では、ADODB.Recordsetのような、データベースから得られた結果セットをそのまま保存して引き渡す機能を見つける事ができず、頓挫しています。
配列にして引き渡すにも、readerを使う方法では、レコード数が得られないため、配列を再定義できず、予め同じレコード数が帰ってくると判っていなければできないようです。
異なるフィールド数やレコード数が出るSQLを引き渡しても、結果セットを得られるなにか良い方法がありましたら教えてください。
実は、元々業務アプリはExcelVBAで作成していまして、Excelを立ち上げ、シートは一切使用せず、Auto_Openでフォームを立ち上げて処理をするというヘンな作業を行っていました。
これが少々複雑かつ、いちいちEXCEL起動するのが面倒という事になり、Visual Basic 2010へ移植を図っています。
参考になるかどうかですが、Accessと接続する場合はこのようなコードでした。
lang
1Public myConn As New ADODB.Connection 2Public myRS As New ADODB.Recordset 3 4 myConn.Open ConnectionString:= "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[Access2010のaccdbをフルパスで記入];" 5 6 Dim sql1 As String = "[SELECT文]" 7 8 myRS.Open Source:=sql1, ActiveConnection:=myConn 9 10 Do Until myRS.EOF = True 11 myRS.MoveNext 12 Loop 13 14
ExcelVBAでは、あまり複雑な事をやろうとは思わなかったので、Accessのデータが必要な場所場所に記述していました。
よろしくお願いいたします。
htsignさま、ご回答ありがとうございました。
ベストアンサーにさせていただきました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/22 07:16