VB6(Visual Basic 6.0) と VB.NET(Visual Basic .NET)は互換性がないので、データベースへのアクセス方法も異なるようです。
⇩ VB6からVB.NETへの変遷について詳しくは下記サイトへ
・VB6.0とVB.NETの違いってなんですか? - バージョンが違うとかそういう... - Yahoo!知恵袋
VB6でのデータベース接続
VB6のデータベース接続については、マイクロソフトのAPIを利用するようです。
の3つの方法があるようです。
※マイクロソフトのDAO(Data Access Objects)はDAO(Data Access Object)とは関係ありません。
VB.NETのデータベース接続については
- .NET Framework が提供する ADO.NET
を使って行うようです。
今回はADOについてメモしていきたいと思います。
マイクロソフトのDeveloper Networkの
Microsoft Data Access Components を使った OLE DB のリソース プーリング
を参考にすると、ADOでデータベース接続する場合は、OLEDB接続(Provider)かODBC接続(Driver)のどちらかを使うようです。
・ADOの接続文字列に設定するPROVIDERとDRIVERの記述方法の違い --Access Club 超初心者 FORUM--
ADOでデータベース接続の概念図
ADO(ActiveX Data Objects)
データソースアクセスを目的としたCOMオブジェクトのセットである。
ADOはOLE DBとプログラミング言語を介在しており、プログラミングインターフェイスとして機能する。開発者はこれを用いることで、データベースの実装を意識せずにコードを書ける。
ADOはRDO(Remote Data Objects)やDAO(Data Access Objects)の後継に位置づけられている。
ADOは1996年の冬、マイクロソフトにより発表された。後年、ADOの後継として.NET Frameworkに組み込まれたADO.NETがリリースされた。
データベース接続などを共通化してくれるもので、PHPなどでもphp.iniファイルを修正することで、使えるようです。
・CX's Hello, World! » Hello, ADO(PHP) World!
OLE DB (Object Linking and Embedding, Database)
マイクロソフトの設計したAPIであり、一様な形で格納されている様々な種類のデータへのアクセスを行うものである。OLEDB、OLE-DB とも表記する。
Component Object Model(COM)を使って実装されたインタフェース群であり、そのためOLEと関係がある。
ODBCをより抽象化した形で置換するもので、関係データベース以外の各種データベースもサポートするよう拡張されている。オブジェクトデータベース、表計算ソフトなどSQLをサポートしていないものにも対応している。
とあるように、データベース以外にもSQLを使用しないデータのやり取りにも使うことができるようです。
COM(Component Object Model)
マイクロソフトが提唱するソフトウェアの再利用を目的とした技術のことである。アプリケーションソフトウェア間での通信や、オペレーティングシステムとアプリケーションソフトウェアとのAPIに用いられる。
COMを使用して開発されたソフトウェア部品をCOMコンポーネントと呼ぶ。
COMコンポーネントは、特定の開発言語に依存せず、C言語やC++、Visual Basic、Smalltalk、Javaなど、様々な言語により開発を行うことができる。
COMという用語はソフトウェア開発の世界ではOLE、OLEオートメーション、ActiveX、COM+、DCOMをカバーする包括的な用語としてよく使われる。
COMコンポーネントは、他ソフトウェアと通信するためのインタフェースを有している。
COMは主としてMicrosoft Windows上で使用されるが、UNIXやMac OSでも使用することができる。
COMはまたソフトウェアコンポーネントシステムとしてCORBAやJava Beansと競合関係にある。
COMコンポーネントであるADOは、VB6以外にも、いろんな言語に対応しているようです。また、同じくCOMコンポーネントであるOLE DBでデータベースを選択できるようです。
⇩ COMコンポーネントについてなどは下記サイトへ
・COMコンポーネントって何? - Visual Basic(VBA) 解決済 | 教えて!goo
⇩ COMコンポーネントを自分で作る方法は下記サイトへ
・COM プログラミング入門 - Web/DB プログラミング徹底解説
⇩ COMコンポーネントの問題点についてなどは下記サイトへ
ADO(ActiveX Data Objects)の構造
ADO(ActiveX Data Objects)は名前からも想像できるように、オブジェクトの集合体になっているようです。
ADO(ActiveX Data Objects)
Connection、Command、Recordset、および Field の各オブジェクトは、Properties コレクションも持っています。
⇩ 詳しくは下記サイトへ
ADO(ActiveX Data Objects)の機能
オブジェクト名 | 機能 |
---|---|
Connection | データベースとの接続を行う |
Command | データベースに対する処理命令を保持 |
Recordset | 操作対象となる実質的なデータの集合(レコードセット)を保持 |
Error | 接続時のエラー情報を保持 |
Field | Recordsetオブジェクト内のフィールドを保持 |
Property | ADOオブジェクトの各種プロパティを保持 |
VB6の統合開発環境(Visual Studio 6.0)が手に入らないので確認ができないのですが、
Windows 2000 - Development Guide for Business Applications
によると、 ADOは、Visual Studio 6.0で『[プロジェクト]メニューから[参照設定]を選択し,表示されたウィンドウから“Microsoft ActiveX Data Objects 2.5 Library”を選択する』で使用することができるようです。
IDEであるVisual Basic 6.0にADOが用意されているように、デフォルトでCOMコンポーネントがある程度は用意されていると思われます、たぶん。
データベース接続
あらかじめ、データベース(SQL Serverなど)を用意して適当なテーブルを作成しておきます。
データベース接続には、ADODBのConnectionオブジェクトを使います。
まずは、Connectionオブジェクトをインスタンス化します。
宣言と代入を一度に
Dim Cn As New ADODB.Connection
別々にかくこともできます。
Dim Cn As ADODB.Connection Set Cn = New ADODB.Connection
ADODBの説明が見つからずよく分かりませんが、ADODBクラスという認識でいいのかしら?
ADOの各オブジェクトを使う際に必要みたいです。
・ADOって、ADODB と ADODCの略語ですか? - ADODB と ADODCの違いは、本にも... - Yahoo!知恵袋
使用するデータベースなどの情報を用意します。コンピュータ名はデータベース(SQL Server)がインストールされているPCのものを指定します。
' 各設定情報を文字列後のための変数 Dim dbCon As String ' DB接続用の情報 ' ドライバ名 Private Const CON_DRIVER = "Driver={SQL Server};" ' サーバー名 Private Const PUB_SEVNAME As String = "Server=コンピュータ名;" ' データベースファイル名 Private Const PUB_DBNAME As String = "Database=データベース名;" ' DB接続用の設定 dbCon = CON_DRIVER & PUB_SEVNAME & PUB_DBNAME
ConnectionオブジェクトのOpenメソッドでデータベースに接続します。
Cn.Open (dbCon)
データベースに接続したら、テーブルのデータを扱いたいわけですが、それには、2つの方法があるようで、
- ADODB.ConnectionオブジェクトのExecuteメソッドを使う方法
- ADODB.RecordsetオブジェクトのOpenメソッドを使う方法
今回はADODBのRecordSetオブジェクトを使う方法です。
Dim Rs As New ADODB.Recordset
データベースに投げる投げるためのSQLを作成します。今回はSELECT文です。
'' SQLの作成 strSql = "SELECT * " strSql = strSql & "FROM テーブル名 "
sqlを実行するには、RecordsetオブジェクトのOpenメソッドを実行します。
Rs.Open strSql, Cn, adOpenForwardOnly, adLockReadOnly, adCmdText
RecordsetオブジェクトのOpenメソッドの引数については、
Windows 2000 - Development Guide for Business Applications
が詳しいです。
これで、データベースからデータが取得でき、ここではRsにデータがリストのような感じで1行ずつ格納されました。
これをすべて取り出すには、ループ処理をする必要がありますが、ADODB.RecordsetオブジェクトのEOFプロパティがRsに格納されている最後の行かどうかを判定してくれるので、これを繰り返し文の条件とすることで、PHPでいうところのforeach文のような処理をしてくれるみたいです。
Dim dbTableRow As String ' 1行のデータ用の変数 Dim dbTableField As ADODB.Field Dim dbTableFields As ADODB.Fields Set dbTableFields = Rs.Fields Dim arrayLengthMax As Long ' データ数を保存する変数 Dim dbDataResult() As String ' 配列を用意 arrayLengthMax = 0 ' データ数初期化 Do Until Rs.EOF For intLoop = 0 To (objFields.Count - 1) dbTableRow = dbTableRow & dbTableField.Name & ":" & Rs.Fields(dbTableField.Name).Value If intLoop != (objFields.Count - 1) Then dbTableRow & ", " End If NEXT ' データ数を1つ増やす arrayLengthMax = arrayLengthMax + 1 ' 実際に配列の範囲を変更 Redim Preserve A(1 To arrayLengthMax) dbDataResult(arrayLengthMax) = dbTableRow Rs.MoveNext Loop
ところどころ怪しい部分があるので、エラーになると思いますが、やりたかったことはデータベースから取得したデータを1行ずつ配列に格納したかった感じです。
やはりVB6を動かせる環境がないのは厳しいですね。
⇩ VB6の環境構築には結構なお金がかかるみたいですね。世知辛い世の中ですね。
・Visual Basic 6.0 (VB6) のダウンロードについて -
今回はこのへんで。