Olá, tenho uma tabela básica com nome do escritório (cliente), CNPJ e data do movimento. Preciso atualizar esta tabela, pois os nomes foram cadastrados com divergência ao longo do tempo; então fiz um Excel com os dados corretos: Nome antigo = do access, Nome Novo (atualizado) e CNPJ (atualizado). Ao atualizar pelo VBA deu estouro, acho que foi devido ao tamanho da tabela. Então pensei em fracionar a atualização por data, porque a tabela possui campo data e pensei em fazer mês a mês de 1 a 12, porém não consegui colocar isso no código.
----------------------------------------------------------
Private Sub alterar()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Application.ScreenUpdating = False
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
'Conectando com o Banco
pass = "CDI_BSDD"
Caminho = "C:\Users\pvicente\Desktop\"
banco = "BASE_PGTO_be.accdb"
strDB = Caminho & banco
With cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.16.0; Data Source=" & strDB & ";Jet OLEDB:Database Password=CDI_BSDD;"
.CursorLocation = adUseClient
.Open
End With
With Sheets("Base")
For i = 2 To Application.WorksheetFunction.CountA(Sheets("BASE").Range("A:A"))
NomeAntigo = .Cells(i, 1).Value
Novonome = .Cells(i, 3).Value
cnpj = .Cells(i, 2).Value
sSQL = ""
sSQL = sSQL & "UPDATE Control_Pgto_Novo SET Control_Pgto_Novo.Escritorio ='" & Novonome & "', Control_Pgto_Novo.CNPJ = '" & cnpj & "'" & Chr(13)
sSQL = sSQL & " WHERE Control_Pgto_Novo.Escritorio='" & NomeAntigo & "'" & Chr(13)
Set rs = cn.Execute(sSQL)
.Cells(i, 4) = "Atualizado"
.Cells(i, 5) = Date
Next i
End With
cn.Close
Set cn = Nothing
Set rs = Nothing
End Sub
----------------------------------------------------------
Alguma luz?
----------------------------------------------------------
Private Sub alterar()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Application.ScreenUpdating = False
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
'Conectando com o Banco
pass = "CDI_BSDD"
Caminho = "C:\Users\pvicente\Desktop\"
banco = "BASE_PGTO_be.accdb"
strDB = Caminho & banco
With cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.16.0; Data Source=" & strDB & ";Jet OLEDB:Database Password=CDI_BSDD;"
.CursorLocation = adUseClient
.Open
End With
With Sheets("Base")
For i = 2 To Application.WorksheetFunction.CountA(Sheets("BASE").Range("A:A"))
NomeAntigo = .Cells(i, 1).Value
Novonome = .Cells(i, 3).Value
cnpj = .Cells(i, 2).Value
sSQL = ""
sSQL = sSQL & "UPDATE Control_Pgto_Novo SET Control_Pgto_Novo.Escritorio ='" & Novonome & "', Control_Pgto_Novo.CNPJ = '" & cnpj & "'" & Chr(13)
sSQL = sSQL & " WHERE Control_Pgto_Novo.Escritorio='" & NomeAntigo & "'" & Chr(13)
Set rs = cn.Execute(sSQL)
.Cells(i, 4) = "Atualizado"
.Cells(i, 5) = Date
Next i
End With
cn.Close
Set cn = Nothing
Set rs = Nothing
End Sub
----------------------------------------------------------
Alguma luz?