未分類

Excel-VBA ORACLE UPDATE 単一項目

未分類

こんにちは! 健史です。

Excel-VBAにて、ExcelのセルにセットしたデータをORACLEデータの特定項目へ更新するプログラムを作成しました。

スポンサーリンク

概要の説明

システム構築していると本稼働後の運用設計で、特定の設定項目を不定期、もしくは、定期的に変更しなければならない場合があります。

例えば、月度や年度などで、頻繁ではないけれど発生するものが。

しかし、その値だけを変更するメンテナンス用オンラインプログラムを作成するには、時間や費用がなかったり。

エンドユーザが、SQLDeveloperなどのデータベース管理ツールで、SQLでメンテナンスするにはリスクがあります。

結局「システム要員に依頼して、データベース管理ツールでメンテナンスする」ことにとなり、ずーっとその運用が続きます。

そのようなことにExcel-VBAで対応するプログラムを作成してみました。

設定事項シートは以下です。

プログラム

更新前データ抽出 SELECT

Sub TEST3()
'コンスタント
    CNS_SELECT = "SELECT TEL FROM 顧客マスタ WHERE コード = '00003'"
'Oracleアクセス用変数定義
    Dim USER_ID, PASSWORD As String
    Dim PROVIDER, DATA_SOURCE As String
'設定シートからセット
    USER_ID = Sheets(1).Cells(2, 2)
    PASSWORD = Sheets(1).Cells(3, 2)
    PROVIDER = Sheets(1).Cells(4, 2)
    DATA_SOURCE = Sheets(1).Cells(5, 2)
'インスタンス生成 データベース接続
    Dim conn As New ADODB.Connection
'Oracleの場合
    conn.ConnectionString = _
        "PROVIDER=" & PROVIDER & ";" & _
        "Data Source=" & DATA_SOURCE & ";" & _
        "USER ID=" & USER_ID & ";" & _
        "PASSWORD=" & PASSWORD & ";"
'DBオープン
    conn.Open
'インスタンス生成 データアクセス
    Dim recset As New ADODB.Recordset
'DB 読み込み
    recset.Source = CNS_SELECT
    recset.ActiveConnection = conn
'接続開始
    recset.Open
'データをDBからExcelにセット
    Sheets(1).Cells(10, 2) = recset(0)
'接続終了
    recset.Close
'DBクローズ
    conn.Close
    Set recset = Nothing
    Set conn = Nothing
'終了処理
    Sheets(1).Cells(10, 3) = Format(Now(), "YYYYMMDD_HHMMSS")
    MsgBox "処理終了!"
End Sub

更新 UPDATE

Sub TEST4()
'コンスタント定義
    Const CNS_UPDATE1 = "UPDATE 顧客マスタ SET TEL = '"
    Const CNS_UPDATE2 = "' WHERE コード = '00003'"
    Const CNS_COMMIT = 100
'変数定義
    Dim ix1, ix1_max As Long
    Dim cnt_update, cnt_commit As Long
'Oracleアクセス用変数定義
    Dim USER_ID, PASSWORD As String
    Dim PROVIDER, DATA_SOURCE As String
    Dim UPDATE_DATA As String
    Dim strSQL As String
'設定シートからセット
    USER_ID = Sheets(1).Cells(2, 2)
    PASSWORD = Sheets(1).Cells(3, 2)
    PROVIDER = Sheets(1).Cells(4, 2)
    DATA_SOURCE = Sheets(1).Cells(5, 2)
    UPDATE_DATA = Sheets(1).Cells(11, 2)
'インスタンス生成 データベース接続
    Dim conn As New ADODB.Connection
'Oraclenの場合
    conn.ConnectionString = _
        "Provider=" & PROVIDER & ";" & _
        "Data Source=" & DATA_SOURCE & ";" & _
        "USER ID=" & USER_ID & ";" & _
        "Password=" & PASSWORD & ";"
'DBオープン
    conn.Open
'カウントの初期クリア
    cnt_update = 0
    cnt_commit = 1
'UPDATE処理
    strSQL = CNS_UPDATE1 & UPDATE_DATA & CNS_UPDATE2
    conn.Execute (strSQL)
'   カウントアップ
    cnt_update = cnt_update + 1
    cnt_commit = cnt_commit + 1
'   コミット
    Select Case cnt_commit
    Case Is > CNS_COMMIT
        strSQL = "COMMIT"
        conn.Execute (strSQL)
        cnt_commit = 1
    End Select
'コミット(最終)
    strSQL = "COMMIT"
    conn.Execute (strSQL)
'DBクローズ
    conn.Close
    Set conn = Nothing
'後処理
    Sheets(1).Cells(11, 3) = Format(Now(), "YYYYMMDD_HHMMSS")
    MsgBox "更新件数:" & cnt_update & vbCrLf & "処理終了!"
'セーブ
    ThisWorkbook.Save
End Sub

更新後データ抽出 SELECT

Sub TEST5()
'コンスタント
    CNS_SELECT = "SELECT TEL FROM 顧客マスタ WHERE コード = '00003'"
'Oracleアクセス用変数定義
    Dim USER_ID, PASSWORD As String
    Dim PROVIDER, DATA_SOURCE As String
'設定シートからセット
    USER_ID = Sheets(1).Cells(2, 2)
    PASSWORD = Sheets(1).Cells(3, 2)
    PROVIDER = Sheets(1).Cells(4, 2)
    DATA_SOURCE = Sheets(1).Cells(5, 2)
'インスタンス生成 データベース接続
    Dim conn As New ADODB.Connection
'Oracleの場合
    conn.ConnectionString = _
        "PROVIDER=" & PROVIDER & ";" & _
        "Data Source=" & DATA_SOURCE & ";" & _
        "USER ID=" & USER_ID & ";" & _
        "PASSWORD=" & PASSWORD & ";"
'DBオープン
    conn.Open
'インスタンス生成 データアクセス
    Dim recset As New ADODB.Recordset
'DB 読み込み
    recset.Source = CNS_SELECT
    recset.ActiveConnection = conn
'接続開始
    recset.Open
'データをDBからExcelにセット
    Sheets(1).Cells(12, 2) = recset(0)
'接続終了
    recset.Close
'DBクローズ
    conn.Close
    Set recset = Nothing
    Set conn = Nothing
'終了処理
    Sheets(1).Cells(12, 3) = Format(Now(), "YYYYMMDD_HHMMSS")
    MsgBox "処理終了!"
End Sub

補足

ボタンを3つ用意しておき、それぞれクリックして実行します。

1.変更前の値を確認するため、Excel上に値を表示する

2.更新する値を設定しておき、更新する

3.変更後の値を確認するため、Excel上に値を表示する

それぞれに実行した日付・時刻を表示することで、各処理の実行を認識できます。

また、例ではユーザID/パスワード/データベース設定情報も設定シートに記載しています。

セキュリティ上リスクの考慮し、プログラム内に定義しプログラムパスワードロックを掛けるといった対応であればリスク回避できます。

やり方はいろいろあると思いますが、一例ということでお含みおきいただければと思います。



データベースは以下です。

実行イメージ

実行結果は以下です。

未分類
スポンサーリンク
- 面白かったらシェアお願いします! -
健史をフォローする
自分で改善

コメント