SAK 図書館
VB ADO + SQL 応用編 (その一) ADO 接続 - Open、CursorLocation
ADO はアクセスがそれほど高速でないので嫌いなのだけど、ASP では便利なので、 VB でも ASP と同等のコードでのアクセス方法を説明します。 尚、DAO は、ADO の機能に吸収されています。DAO を使うより、ADO でプログラ ミングする方が良い。 基本的に Oracle、SQL-Sever、MDB で共通です。 ■VB ADO ODBC 接続により、SQL-RDB にアクセスします。 機能として、 ODBC 接続 (ログイン) レコードセット処理 (select) トランザクション処理 (commit、rollback) アクションクエリ実行 (insert、update、delete) ODBC 接続解除 (ログアウト) を使います。 ■ODBC システム DSN 定義
■ODBC 接続(Oracle 接続、オラクル接続、SQL-Server 接続、mdb 接続) '** ADO 変数宣言 Dim s3cn_ado '** ODBC 接続 set s3cn_ado = CreateObject ("ADODB.Connection") s3cn_ado.Open "dsn=SAK3_ADO;uid=SAK;pwd=SAK" s3cn_ado.CursorLocation = 3 '|_ adUseServer = 2 ' adUseClient = 3 '** RDB 処理 'ここに操作コードが入る '** ODBC 接続解除 s3cn_ado.Close データベースに Oracle を使用する場合、Oracle 固有の ODBC ドライバと Microsoft が提供する Oracle 用の ODBC ドライバとを使用する機能により使い 分ける必要があります。(RDO 接続での説明を参照下さい。) ADO データコントロールなどで指定する adc.ConnectionString には、DSN を 指定します。adc.ConnectionString = "dsn=SAK3_ADO;uid=SAK;pwd=SAK" MDB を ODBC を経由せず、直接アクセスするには、 dsn = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=G:\TMP\sak3.mdb" のように指定します。(open dsn, user, pass, option) ■補足 ・実際の VB コードでは、ODBC 接続は、フォームロードで行う。 アクセスの度に接続していてはレスポンスが悪い。 同じく、ODBC 接続解除は、フォームアンロードで行う。 ・s3cn_ado.CursorLocation は、レコードセットの順処理だけを使用するなら、 adUseServer = 2 を指定する方が高速である。 レコードの前方移動などを行う場合は、adUseClient = 3 しか選択できない。 ・s3cn_ado.Open "dsn=SAK3_ADO;uid=SAK;pwd=SAK",,, 16 '|_ 非同期 adAsyncConnect 非同期接続(非同期アクセス) では、コマンドの完了を待たずに制御が戻る。 処理の完了は、s3cn_ado.state によって判断する。 レコードセット取得に時間がかかるとき、rs.state で完了までに先に処理 するコードを実行できる。または、処理時間がかかれば、rs.cancel で取り 消せる。command 等の実行(非同期実行) も同じである。(cmd.state) obj.state 0 adStateClosed 閉じている 1 adStateOpen オープン 2 adStateConnecting 接続中 4 adStateExecuting 実行中 8 adStateFetching 行を取得 ■現実的なコード例 Option Explicit '** ADO 変数宣言 Dim s3cn_ado '======================================================================= ' 準備 '======================================================================= Private Sub Form_Load() Dim dsn As String Dim rcd As Long '** アイキャッチ表示 'Load FormLogo 'FormLogo.Show 'DoEvents '// 接続に 10 秒ほどかかるので、「データベース接続中...」などの '// モードレスダイアログを表示すると良い。 '** DSN 設定 dsn = "dsn=SAK3_ADO;uid=SAK;pwd=SAK" '// ODBC システム DSN を使用しての接続例である。 '** ODBC 接続 On Local Error Resume Next set s3cn_ado = CreateObject ("ADODB.Connection") s3cn_ado.Open dsn s3cn_ado.CursorLocation = 3 '|_ adUseServer = 2 ' adUseClient = 3 rcd = Err On Local Error GoTo 0 If rcd <> 0 Then MsgBox "データベースに接続出来ません。" end End If '** アイキャッチ終了 'Unload FormLogo '// 接続が完了すれば、「データベース接続中...」をクローズする。 End Sub '======================================================================= ' 後始末 '======================================================================= Private Sub Form_Unload(Cancel As Integer) '** ODBC 接続解除 On Local Error Resume Next s3cn_ado.Close On Local Error GoTo 0 End Sub ■更に現実的なコードアドバイス ・dsn をコード中に定義するより、初期化ファイルなどを使用してプログラム と独立させる方が可搬性に富んでいる。 この場合、パスワードなどがもろ見えになってしまっては困る。 暗号化関数を作成して、隠蔽処理など必ず実施する。 SAK3 では、データベースのユーザ ID とパスワードを暗号化して初期化フ ァイルに定義している。従って、どのようなシステム環境、実行環境にもリ コンパイルなしでオブジェクトを移行できる。 ■エラーコレクション参照 s3cn_ado.errors.clear '** エラーをクリア s3cn_ado.errors.count '** エラーの数 dim e as variant for each e in s3cn_ado.errors msgbox e.description '** エラー内容 next ■VB ADO + SQL 応用編資料
■VB RDO + SQL 応用編資料
■VB oo4o + SQL 応用編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
■VB テクニック編資料