*

【SQL Server】Excel VBAのレコードセットを使ってテーブルの一括更新

前々回は読み取り専用でレコードセットへ取得し、結果をエクセルへ書き出し

前回はVBAから更新SQL(Insert、Update、Delete)を発行し、テーブルを直接更新

今回は、SELECT文でレコードセットへデータを取得し、
レコードセット内のデータ更新し、更新内容をテーブルへ一括で反映する

実行前の準備

VBAを実行する前に、

ツール/参照設定の「Microsoft ActiveX Data Objects 6.1 Library」にチェックする

参照設定 - VBAProject

※6.1じゃなくてもOK。2.0、2.1、6.0で動作することは確認済み

レコードセットへデータ取得し、
レコードを更新後にテーブルへ一括反映のサンプル

サンプルでは、取得したレコードセットに対して、レコードの追加、削除、修正後に「UpdateBatch」メソッドを使用してテーブルへ反映させている。

※接続文字列はWindows認証、SQL Server認証を環境によって使い分ける。

Option Explicit
Sub RecordSet_UpdateBatch()

    On Error GoTo ErrorProc

    Dim DBSrv As String
    Dim DBName As String
    Dim strSQL As String
    Dim rs As Recordset
    Dim strConn As String

    '----------------------------------------------------
    ' DBSrvにDBサーバ名、DBNameにデータベース名
    '----------------------------------------------------
    DBSrv = "DBSERVER\SQLEXPRESS"
    'DBSrv = "DBSERVER\SQLEXPRESS,49391" 'ポート指定付
    DBName = "db_Sales"

    '----------------------------------------------------
    ' SQL作成(更新対象テーブルのSELECT)
    '----------------------------------------------------
    strSQL = "SELECT * FROM [Work_Table]"
    
    '----------------------------------------------------
    ' 接続文字列の指定
    '----------------------------------------------------
    'Windows認証
    strConn = "Provider=SQLOLEDB;Data Source='" & DBSrv & "';Initial Catalog='" & DBName & "';Trusted_Connection=Yes"
    'SQL Server認証
    'strConn = "Provider=SQLOLEDB;Data Source='" & DBSrv & "';Initial Catalog='" & DBName & "';UID=【ユーザ名】;PWD=【パスワード】;"

    'オブジェクト生成
    Set rs = New ADODB.Recordset

    'バッチ更新モードでレコードセットをオープン
    rs.Open strSQL, strConn, adOpenKeyset, adLockBatchOptimistic, adCmdText
    
    '----------------------------------------------------
    ' レコードの追加
    '----------------------------------------------------
    rs.AddNew
        rs.Fields("ID").Value = "00016"
        rs.Fields("ユーザ名").Value = "VBA_レコードセットで追加"
        rs.Fields("日時").Value = Now

    '----------------------------------------------------
    ' レコードの削除
    '----------------------------------------------------
    rs.MoveFirst
    Do Until rs.EOF

        If rs.Fields("ID").Value = "00001" Then
            rs.Delete
        End If
        rs.MoveNext
    Loop
 
    '----------------------------------------------------
    ' レコードの修正
    '----------------------------------------------------
    rs.MoveFirst
    Do Until rs.EOF

        If rs.Fields("ID").Value = "00015" Then
            rs.Fields("ユーザ名").Value = "VBA_レコードセットで更新"
        End If
        
        rs.MoveNext
    Loop
 
    '----------------------------------------------------
    ' DB更新(上記のレコードの追加、削除、修正をDBに反映)
    '----------------------------------------------------
    rs.UpdateBatch
 
    'クローズ
    rs.Close
    Set rs = Nothing

    Exit Sub

'エラー処理
ErrorProc:

    MsgBox Err.Number & vbCrLf & Err.Description

End Sub

検証環境
Excel 2007 or Excel 2013
SQL Server 2012

 

 

Adsense

関連記事

データベース

【SQL Server】バックアップ取得日を確認する方法

前回の記事で、SQL Serverのデータベースのリストアした日付を確認するSQLを作りましたが、今

記事を読む

データベース

【SQL Server 2012】Management Studioで誰がデータベースに接続しているか調べる。

SQL Server 2012でリアルタイムで接続しているユーザーを確認するには Manageme

記事を読む

データベース

【SQL Server】Management Studioでテーブルをデザインから変更するとエラーになる

変更の保存が許可されていません。行った変更には、次のテーブルを削除して再作成することが必要に

記事を読む

Microsoft Office

【Excel】エクセルを起動(実行)しても、何も表示されない。

仕事の共有で使用しているエクセルを開くと、Excelの枠だけ表示されて何も表示されない。 壊れ

記事を読む

データベース

【ODBC】Windows7でAccess2007とSQL Serverを接続する為のODBCの作成

前回、ODBC接続の為のサーバー側の設定を行いましたので、 今回はAccess2007側のWind

記事を読む

データベース

【コマンドプロンプト】完成版!cmdでSQLの結果を変数に取得

以前、 【コマンドプロンプト】cmdでSQLの結果を変数に取得する方法 を書きましたが、

記事を読む

Microsoft Office

【Outlook】送信時の0x80040201エラーの対処

発生した環境 OSはWindows7。Outlookは2013。イーモバイルのPocket W

記事を読む

データベース

【SQL Server】Excel VBAでSQLを実行し、レコードを更新(追加、更新、削除)する

VBAでSQL Serverのテーブルに SQL(Insert、Update、Delete)を発行

記事を読む

Microsoft Office

【Outlook】Gmailを使う時の設定(Gmailアカウント側)

OutlookでGmailを使用するには、Gmailのアカウント側でいくつか設定をしなければいけない

記事を読む

Microsoft Office

【Outlook】同期の失敗フォルダを消す方法

問い合わせで、Outlookの「同期の失敗」フォルダを消したいと受けた。 調べてみたけど、基本

記事を読む

Adsense

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Adsense

Microsoft Office
【Access】削除クエリの「指定されたテーブルから削除できませんでした。」の対処法

削除クエリで「指定されたテーブルから削除できませんでした。」と ポッ

Microsoft Office
【PowerPoint】表や図形、画像オブジェクトの位置をピッタリ合わせる方法

パワーポイントで、図形や画像等のオブジェクトの細かい位置調整は、 完

データベース
【SQL Server】Excel VBAのレコードセットを使ってテーブルの一括更新

前々回は読み取り専用でレコードセットへ取得し、結果をエクセルへ書き出し

application
【Visual Studio】デバック、ブレークポイントで止まらない。

Visual Studio 2015でVB.netのプログラムをデバッ

データベース
【SQL Server】Excel VBAでSELECT文を実行してレコードセットへ取得

前回は、テーブルのレコードをVBAで直接更新(Insert/updat

→もっと見る

PAGE TOP ↑