質問編集履歴

1 ご回答のお礼を追加しました。

ky_46

ky_46 score 89

2015/04/26 15:58  投稿

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

    398 questions

    VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

  • Access

    790 questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

  • ADO.NET

    36 questions

    ADO.NETは.NET Frameworkで各種データベースへの統一された接続機能を提供するソフトウェアコンポーネントの集合です。

  • VB.NET

    1229 questions

    Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る