SAK 図書館

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

VB RDO + SQL 応用編 (その一) RDO 接続 - OpenConnection

VB から、Oracle や SQL-Server などのリモートアクセスデータベースに接続す
るには、RDO または ADO を使用するのが効率的です。
RDO と ADO は多少の構文の違いはあるものの似たようなコードでアクセスでき
ます。コントロールとのオートメーション接続では ADO しかサポートされてい
ないので選択肢はありません。
プログラミングによるアクセスでは、ADO より高速な RDO を選択した方が良い
でしょう。(Excel でも RDO を使用できる。)
基本的に Oracle、SQL-Sever、MDB で共通です。

■VB RDO (リモートデータベースオブジェクト)

  ODBC 接続により、SQL-RDB にアクセスします。
  機能として、
    ODBC 接続            (ログイン)
    レコードセット処理   (select)
    トランザクション処理 (commit、rollback)
    アクションクエリ実行 (insert、update、delete)
    ODBC 接続解除        (ログアウト)
  を使います。

■VB プロジェクト設定

  新規プロジェクトに、メニュー、参照設定で、
    Microsoft Remote Data Object 2.0
  を組み入れます。

■ODBC システム DSN 定義
■ODBC 接続(Oracle 接続、オラクル接続、SQL-Server 接続、mdb 接続)

'** RDO 変数宣言
  Dim RDBen As rdoEnvironment
  Dim RDBcn As rdoConnection
  Dim RDBcn2 As rdoConnection

'** ODBC 接続
  Set RDBen = rdoEnvironments(0)
  Set RDBcn = RDBen.OpenConnection("", rdDriverNoPrompt, False, _
    "dsn=SAK3;uid=SAK;pwd=SAK")                         '|_ I/O
  Set RDBcn2 = RDBen.OpenConnection("", rdDriverNoPrompt, True, _
    "dsn=SAK3_ADO;uid=SAK;pwd=SAK")                      '|_ read only

'** RDB 処理
  'ここに操作コードが入る

'** ODBC 接続解除
  RDBcn2.Close
  RDBcn.Close

通常は、RDBcn だけの接続で良いのですが、データベースに Oracle を使用する
場合、Oracle 固有の ODBC ドライバと Microsoft が提供する Oracle 用の
ODBC ドライバとを使用する機能により使い分ける必要があります。
上のコードでは、RDBcn が Oracle8 のネイティブドライバ、RDBcn2 が Microsoft
が提供している Oracle 用ドライバです。(ODBC 定義による)
リアルバッチ型のように大量のレコードセットをオープンする必要がある場合は、
RDBcn2 の SAK3_ADO を使わないとエラーが連発する。
逆に RDBcn2 で更新処理をするとエラーが発生しやすい。
これは、I/O モードの違いではなく、Oracle ドライバと MS-Oracle ドライバの
違いである。更新 SQL は、Oracle 本来のドライバでないとうまく動作しない。
少量のレコードセットの扱いには問題ないのだが、大量のレコードセットを扱お
うとすると、RDO が MS 製のためか、MS-Oracle ドライバが必要となる。
(これは、ADO アクセスでも同じ。)

■補足

  ・実際の VB コードでは、ODBC 接続は、フォームロードで行う。
    アクセスの度に接続していてはレスポンスが悪い。
    同じく、ODBC 接続解除は、フォームアンロードで行う。
    更に高度にやるなら、DLL のロード時に接続して、DLL のアンロード時に
    接続解除することもできる。この場合の RDBcn は複数プログラムで共有で
    きる DLL 設計になっていなければ意味がありません。

  ・ODBC サーバと物理的に接続するには、
      Set RDBcn = RDBen.EstablishConnection(prompt, readonly, options)
    があります。
    EstablishConnection では、rdoConnection は自動的には追加されません。

■現実的なコード例

Option Explicit

'** RDO 変数宣言
  Dim RDBen As rdoEnvironment
  Dim RDBcn As rdoConnection
  Dim RDBcn2 As rdoConnection

'=======================================================================
'  準備
'=======================================================================
Private Sub Form_Load()

  Dim dsn As String
  Dim dsn2 As String
  Dim rcd As Long

'** アイキャッチ表示
  'Load FormLogo
  'FormLogo.Show
  'DoEvents
  '// 接続に 10 秒ほどかかるので、「データベース接続中...」などの
  '// モードレスダイアログを表示すると良い。

'** DSN 設定
  dsn = "dsn=SAK3;uid=SAK;pwd=SAK"
  dsn2 = "dsn=SAK3_ADO;uid=SAK;pwd=SAK"
  '// ODBC システム DSN を使用しての接続例である。

'** ODBC 接続
  On Local Error Resume Next
  Set RDBen = rdoEnvironments(0)
  Set RDBcn = RDBen.OpenConnection("", rdDriverNoPrompt, False, dsn)
  rcd = Err
  On Local Error GoTo 0
  If rcd <> 0 Then
    MsgBox "データベースに接続出来ません。(RDBcn)"
    end
  End If
  On Local Error Resume Next
  Set RDBcn2 = RDBen.OpenConnection("", rdDriverNoPrompt, True, dsn2)
  rcd = Err
  On Local Error GoTo 0
  If rcd <> 0 Then
    MsgBox "データベースに接続出来ません。(RDBcn2)"
    end
  End If

'** アイキャッチ終了
  'Unload FormLogo
  '// 接続が完了すれば、「データベース接続中...」をクローズする。

End Sub

'=======================================================================
'  後始末
'=======================================================================
Private Sub Form_Unload(Cancel As Integer)

'** ODBC 接続解除
  On Local Error Resume Next
  RDBcn.Close
  RDBcn2.Close
  On Local Error GoTo 0

End Sub

■ソースサービス
■更に現実的なコードアドバイス

  ・dsn をコード中に定義するより、初期化ファイルなどを使用してプログラム
    と独立させる方が可搬性に富んでいる。
    この場合、パスワードなどがもろ見えになってしまっては困る。
    暗号化関数を作成して、隠蔽処理など必ず実施する。
    SAK3 では、データベースのユーザ ID とパスワードを暗号化して初期化フ
    ァイルに定義している。従って、どのようなシステム環境、実行環境にもリ
    コンパイルなしでオブジェクトを移行できる。

■hEnv プロパティ

  ・cn.hEnv は、rdoEnvironment オブジェクトに対応する ODBC 環境ハンドル
   を含む長整数型(Long) の値を返す。
   ODBC API を実行するのに使用しますが、hEnv は、その都度最新のハンドル
   を取得して利用します。(hDbc、hStmt も同様)

■VB RDO + SQL 応用編資料
■VB ADO + 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