質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VB

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

Access

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

ADO.NET

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

VB.NET

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

Q&A

解決済

1回答

18071閲覧

Visual Basic 2010 で Access2010 を利用するアプリの制作

ky_46

総合スコア92

VB

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

Access

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

ADO.NET

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

VB.NET

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

0グッド

1クリップ

投稿2015/04/22 03:48

編集2015/04/26 06:58

社内で使用するデータベースを利用したアプリケーションを自作しています。

例としては、日々の販売データが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さま、ご回答ありがとうございました。
ベストアンサーにさせていただきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

lang

1Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[Access2010のaccdbをフルパスで記入];" 2Dim query As String = "[SELECT文]" 3 4Dim dt As New DataTable() 5 6Using da As New OleDbDataAdapter(query, connectionString) 7 da.Fill(dt) 8End Using 9Dim result As DataRow() = dt.Select()

お望みの結果になりますでしょうか?

投稿2015/04/22 03:58

htsign

総合スコア870

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ky_46

2015/04/22 07:16

ありがとうございます。 頂いたコードを次のようにしたところ、希望通りの結果になりました。 ------------- Public Class Form1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim dTb1 As DataTable dTb1 = test("SELECT * FROM 売上データ ORDER BY 日付;") For Each DRow As DataRow In dTb1.Rows For i As Integer = 0 To dTb1.Columns.Count() - 1 Debug.Write(DRow.Item(i) & ControlChars.Tab) Next Debug.Write(ControlChars.CrLf) Next MsgBox("完了", MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, "通知") End Sub End Class Module Module1 Function test(ByVal query As String) As DataTable Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[Access2010のaccdbをフルパスで記入];" Dim dt As New DataTable() Using da As New OleDbDataAdapter(query, connectionString) da.Fill(dt) End Using Return dt End Function End Module ------------- 設定したボタンをクリックすると、確かに売上データデーブルが日付順でイミディエイトに表示されました。 プログラムの各処理では必要なSQLを作成し、受け取るデータテーブルを用意すれば、希望の動作になりそうです。 ありがとうございました。 他にご回答なかったら、ベストアンサーにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問