Hello I doing an update from Excel to SQL but the code only works for 1 row. I want to update multiple rows or you could say all rows which are on Excel I have loaded
see the below code
VBA Code:
Sub UpdateTable()
Dim cnn As ADODB.Connection
Dim uSQL As String
Dim LR, LC As Long
Dim Group, Category As String
Dim itcode As Integer
' this is only for active cell i want for all cell in sheet which is on A column
Dim rngname As Range
Set rngname = ActiveCell
Set cnn = New Connection
itcode = ShCustomers.Cells(rngname.row, 1)
Group = "'" & ShCustomers.Cells(rngname.row, 2) & "'"
Category = "'" & ShCustomers.Cells(rngname.row, 3) & "'"
cnnstr = "Provider=SQLOLEDB; Data Source=MAK-SYS;Initial Catalog=db_bckupserver_test_sys;User ID=sa;Password=Rehman@123;Trusted_Connection=No"
cnn.Open cnnstr
uSQL = "UPDATE mak_items_chart SET [Group] = " & Group & " WHERE itcode = " & itcode
cnn.Execute uSQL
cnn.Close
Set cnn = Nothing
End Sub
I want to loop it but I don't understand how I can add a loop which will update all the records into SQL
Here is the image with modified code
CodePudding user response:
My assumption is that we only need the sheet with the codename ShCustomers
. Then my suggestion would be
Sub UpdateTable()
Dim cnn As ADODB.Connection
Dim uSQL As String
Dim LR, LC As Long
Dim Group As String, Category As String ' I fixed the declaration
Dim itcode As Integer
Dim rngname As Range
Set cnn = New Connection
cnnstr = "Provider=SQLOLEDB; Data Source=MAK-SYS;Initial Catalog=db_bckupserver_test_sys;User ID=sa;Password=Rehman@123;Trusted_Connection=No"
cnn.Open cnnstr
Set rngname = getColA(ShCustomers)
Dim sngCell As Range
For Each sngCell In rngname
' you have to check if the values make sense
' What about empty cells
itcode = sngCell.Value
Group = "'" & sngCell.Offset(, 1).Value & "'"
Category = "'" & sngCell.Offset(, 2).Value & "'"
uSQL = "UPDATE mak_items_chart SET [Group] = " & Group & " WHERE itcode = " & itcode
cnn.Execute uSQL
Next sngCell
cnn.Close
Set cnn = Nothing
End Sub
You need to add the following functions
Function getColA(ws As Worksheet) As Range
Dim rng As Range
Dim lastRow As Long
lastRow = FindLastRow(ws.Columns(1))
With ws
Set rng = Range(.Cells(1, 1), .Cells(lastRow, 1))
End With
Set getColA = rng
End Function
Function FindLastRow(rg As Range) As Long
On Error GoTo EH
FindLastRow = rg.Find("*", , Lookat:=xlPart, LookIn:=xlFormulas _
, searchorder:=xlByRows, searchdirection:=xlPrevious).Row
Exit Function
EH:
FindLastRow = rg.Cells(1, 1).Row
End Function