【SQL Server】Excel VBAのレコードセットを使ってテーブルの一括更新
公開日:
:
Microsoft Office, データベース Excel, SELECT文, SQL, SQL Server, UpdateBatch, VBA, エクセル, テーブル, バッチ更新, レコードセット, 一括更新
前々回は読み取り専用でレコードセットへ取得し、結果をエクセルへ書き出し
前回はVBAから更新SQL(Insert、Update、Delete)を発行し、テーブルを直接更新
今回は、SELECT文でレコードセットへデータを取得し、
レコードセット内のデータ更新し、更新内容をテーブルへ一括で反映する
実行前の準備
VBAを実行する前に、
ツール/参照設定の「Microsoft ActiveX Data Objects 6.1 Library」にチェックする
※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
関連記事
-
-
【Access】リンクテーブルが接続(表示)できない。
Accessを使用していて、リンクテーブルが表示(接続)できない。 あまりないけど、困った時に
-
-
【Outlook】送信時の0x80040201エラーの対処
発生した環境 OSはWindows7。Outlookは2013。イーモバイルのPocket W
-
-
【SQL Server】varchar型、nvarchar型の文字数とバイト(byte)数を取得する
varchar型の文字数、バイト(byte)数を取得する方法 SELECT LEN(【文字
-
-
【Microsoft Office】Access 2007でMDBファイルが開けない
こんばんわ。今日、ハマッたことを書きたいと思います。 会社の内線がなり「共有フォルダ上のAcces
-
-
【Access】クエリで小数点の切り下げ、切り上げ
Access2007には、roundup、rounddown関数がない。 なので、純粋に関数だ
-
-
【SQL Server】Excel VBAでSQLを実行し、レコードを更新(追加、更新、削除)する
VBAでSQL Serverのテーブルに SQL(Insert、Update、Delete)を発行
-
-
【PowerPoint】表や図形、画像オブジェクトの位置をピッタリ合わせる方法
パワーポイントで、図形や画像等のオブジェクトの細かい位置調整は、 完璧主義のこだわり派には非常にイ
-
-
【Access】リンクテーブルの一括変換。ODBCを使わずにSQL Serverへ接続
Accessのリンクテーブルの接続先を一括で変更する方法 この方法なら、ODBCを使用していな
-
-
【コマンドプロンプト】cmdでSQLの結果を変数に取得する方法
力技の取得方法をご紹介。というかメモ。 題名には偉そうに書きましたが…なかなか良い方法が見つか
-
-
【レプリケーション】SQL Server 2012 Expressでレプリケーション
Windows Server 2012のSQL Server 2012 Expressを二台用意して

