SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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 テクニック編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK