0
現在、表Bの中に存在しない表Aのすべてのレコードをプルするワークシートがあり、次にそれらの値を表Bに挿入するマクロがあります。データベースの挿入前後のデータベース接続の更新
しかし、マクロが挿入される前にクエリがリフレッシュされないと、重複が生成されることに気づきました。
現在のマクロでは、挿入前後にどのようにリフレッシュを挿入できますか?
Sub Insert_New_Bills()
Dim conn As New ADODB.Connection
Dim iRowNo As Integer
Dim sBILL_NUM, sROCKTENN_DOC, sACTION, sNOTE1, sNOTE2 As String
With Sheets("NEW BILLS")
'Open a connection to SQL Server
conn.Open "Driver={IBM DB2 ODBC DRIVER};Database=BROWN;Hostname=192.168.100.44;Port=50000;Protocol=TCPIP;Uid=" & "User" & ";Pwd=" & "Maddox2009" & ";CurrentSchema=LYNX;"
'Skip the header row
iRowNo = 2
'Loop until empty cell in COLUMN1
Do Until .Cells(iRowNo, 2) = ""
sBILL_NUM = .Cells(iRowNo, 2)
sROCKTENN_DOC = .Cells(iRowNo, 3)
sACTION = .Cells(iRowNo, 4)
sNOTE1 = .Cells(iRowNo, 5)
sNOTE2 = .Cells(iRowNo, 6)
'Generate and execute sql statement to import the excel rows to SQL Server table
conn.Execute "INSERT INTO OH_CU_WR_TEMPLATE (BILL_NUMBER, ROCKTENN_DOC, ACTION, NOTE1, NOTE2) values ('" & sBILL_NUM & "','" & sROCKTENN_DOC & "', '" & sACTION & "', '" & sNOTE1 & "', '" & sNOTE2 & "')"
iRowNo = iRowNo + 1
Loop
MsgBox "RECORD UPDATED"
conn.Close
Set conn = Nothing
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
End With
End Sub
私はわかりません'db2'の構文についてです。しかし、私はむしろこれに似たソリューションを使用したいと思います:http://stackoverflow.com/questions/9911659/can-i-use-if-not-exists-to-insert-a-row-if-therow -is-not-present-in-ss特に、同じExcelファイルの複数のインスタンスを許可すると、どのレコードがすでにDBに挿入されており、どのレコードがまだ保留中であるかを制御することはできません。それ以外は、ワークシート・イベントを実装して、アップロードされたイベントとまだアップロードされていないイベントを追跡します。しかし、このソリューションは私が提案した最初のものと同じくらい綺麗ではありません。 – Ralph