Visual Basic 6とデータベース - ODBC

提供:MochiuWiki : SUSE, EC, PCB
2025年1月23日 (木) 14:55時点におけるWiki (トーク | 投稿記録)による版 (→‎概要)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

ODBCは、異なるデータベース管理システムに対して統一的なアクセス方法を提供するミドルウェアである。
データソース名 (DSN) を介して接続設定を管理して、アプリケーションからデータベースを抽象化する。

ODBCドライバを介して、SQL Server、Oracle、Access、その他様々なデータベースに接続できる。

Visual Basic 6でのデータベースアクセス方法として、ADODBが主流であった。
ADODBはODBCを含む様々なデータソースに接続でき、Connectionオブジェクトによる接続管理、Recordsetオブジェクトによるデータ操作、CommandオブジェクトによるSQL実行という機能を提供する。

トランザクション管理、パラメータ化クエリ、ストアドプロシージャの呼び出し等、実務で必要な機能も備えている。
エラーハンドリングについては、On Error構文とErr.Descriptionを使用して実装する。

接続設定は、システムDSN、ファイルDSN、接続文字列で管理することができる。
実運用では、セキュリティを考慮してファイルDSNや暗号化された接続文字列を使用することが推奨されている。

Visual Basic 6でODBCを使用する場合、一般的にADODB (ActiveX Data Objects) を使用する。
ADODBは、ODBCを含む様々なデータソースに対して統一的なインターフェースを提供している。

代替手段として、RDO (Remote Data Objects) や DAO (Data Access Objects) も選択できるが、ADODBが最も一般的で機能が豊富である。


SQL Server

SQL Serverへの接続

 ' SQL Serverへの接続を行う
 Private Function ConnectDatabase() As ADODB.Connection
    On Error GoTo ErrorHandler
 
    Dim conn As New ADODB.Connection
 
    ' 接続文字列の設定
    conn.ConnectionString = "Driver={SQL Server};" & _
                            "Server=<DBサーバ名>;" & _
                            "Database=<データベース名>;" & _
                            "Uid=<ユーザID>;" & _
                            "Pwd=<パスワード>;"
 
    ' データベースに接続
    conn.Open
 
    Set ConnectDatabase = conn
    Exit Function
 
 ErrorHandler:
    MsgBox "データベース接続エラー:" & vbCrLf & Err.Description, vbCritical
    Set ConnectDatabase = Nothing
 End Function


レコードの取得

 ' レコードを取得する
 Private Sub GetRecords()
    On Error GoTo ErrorHandler
 
    Dim conn As ADODB.Connection
    Dim rs As New ADODB.Recordset
 
    ' データベースに接続
    Set conn = ConnectDatabase()
    If conn Is Nothing Then Exit Sub
 
    ' SQLの実行
    rs.Open "SELECT * FROM <テーブル名> WHERE <条件式>", conn, adOpenStatic, adLockReadOnly
 
    ' 結果の処理
    Do While Not rs.EOF
       ' ここでレコードの処理
       Debug.Print rs.Fields("列名").Value
       rs.MoveNext
    Loop
 
 CleanUp:
    ' リソースの解放
    If Not rs Is Nothing Then
       If rs.State = adStateOpen Then rs.Close
       Set rs = Nothing
    End If
    If Not conn Is Nothing Then
       If conn.State = adStateOpen Then conn.Close
       Set conn = Nothing
    End If
    Exit Sub
 
 ErrorHandler:
    MsgBox "データ取得エラー:" & vbCrLf & Err.Description, vbCritical
    Resume CleanUp
 End Sub


レコード更新

 ' レコードを更新する
 Private Sub UpdateRecord(ByVal ID As Long, ByVal NewValue As String)
    On Error GoTo ErrorHandler
 
    Dim conn As ADODB.Connection
    Dim cmd As New ADODB.Command
 
    ' データベースに接続
    Set conn = ConnectDatabase()
    If conn Is Nothing Then Exit Sub
 
    ' コマンドの設定
    With cmd
       Set .ActiveConnection = conn
           .CommandType = adCmdText
           .CommandText = "UPDATE <テーブル名> SET <列名> = ? WHERE ID = ?"
           .Parameters.Append .CreateParameter("@Value", adVarChar, adParamInput, 50, NewValue)
           .Parameters.Append .CreateParameter("@ID", adInteger, adParamInput, , ID)
           .Execute
    End With
 
 CleanUp:
    ' リソースの解放
    If Not conn Is Nothing Then
       If conn.State = adStateOpen Then conn.Close
       Set conn = Nothing
    End If
    Exit Sub
 
 ErrorHandler:
    MsgBox "データ更新エラー:" & vbCrLf & Err.Description, vbCritical
    Resume CleanUp
 End Sub


レコードの追加

 ' レコードを追加する
 Private Sub InsertRecord(ByVal Value1 As String, ByVal Value2 As Long)
    On Error GoTo ErrorHandler
 
    Dim conn As ADODB.Connection
    Dim cmd As New ADODB.Command
 
    ' データベースに接続
    Set conn = ConnectDatabase()
    If conn Is Nothing Then Exit Sub
 
    ' コマンドの設定
    With cmd
       Set .ActiveConnection = conn
       .CommandType = adCmdText
       .CommandText = "INSERT INTO <テーブル名> (<列名1>, <列名2>) VALUES (?, ?)"
       .Parameters.Append .CreateParameter("@Value1", adVarChar, adParamInput, 50, Value1)
       .Parameters.Append .CreateParameter("@Value2", adInteger, adParamInput, , Value2)
       .Execute
    End With
 
 CleanUp:
    ' リソースの解放
    If Not conn Is Nothing Then
       If conn.State = adStateOpen Then conn.Close
       Set conn = Nothing
    End If
    Exit Sub
 
 ErrorHandler:
    MsgBox "データ追加エラー:" & vbCrLf & Err.Description, vbCritical
    Resume CleanUp
 End Sub


レコードの削除

 ' レコードを削除する
 Private Sub DeleteRecord(ByVal ID As Long)
    On Error GoTo ErrorHandler
 
    Dim conn As ADODB.Connection
    Dim cmd As New ADODB.Command
 
    ' データベースに接続
    Set conn = ConnectDatabase()
    If conn Is Nothing Then Exit Sub
 
    ' コマンドの設定
    With cmd
       Set .ActiveConnection = conn
           .CommandType = adCmdText
           .CommandText = "DELETE FROM <テーブル名> WHERE ID = ?"
           .Parameters.Append .CreateParameter("@ID", adInteger, adParamInput, , ID)
           .Execute
    End With
 
 CleanUp:
    ' リソースの解放
    If Not conn Is Nothing Then
       If conn.State = adStateOpen Then conn.Close
       Set conn = Nothing
    End If
    Exit Sub
 
 ErrorHandler:
    MsgBox "データ削除エラー:" & vbCrLf & Err.Description, vbCritical
    Resume CleanUp
 End Sub