Página 1 de 1

SQL_VBA_Excel_Array

Enviado: 15 Out 2018 às 22:30
por genebaldo
Pessoal, boa noite!

Por gentileza, poderiam me ajudar numa duvida de sql excel vba?

Uso um código para fazer update quando id da plan origem = id plan destino usando inner join é fazendo for pelas colunas sem precisar o nome usando arrColunas. Entre duas planilhas da mesma pasta trabalho funciona.

Porém, ao testar entre planilha pasta trabalho diferentes não funciona:

Sub SQL_VBA_Excel_Array()

Dim ultLin As Long
Dim uColO As Long
Dim ws As Excel.Worksheet
Dim cnx As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String
Dim strsQL As String
Dim i As Long
Dim ii As Long
Dim arrColuna()


Set ws = Planilha3
Set wsr = wsResultado

'On Error GoTo TrataErro 'Poderá ser On Error Resume Next, se quiser ignorar

With cnx
.Provider = "Microsoft.ACE.OLEDB.12.0"
'.ConnectionString = "Data Source=D:\SQL - Excel\testes\DBases.xlsx"
.ConnectionString = "Data Source=" & ThisWorkbook.FullName
.Properties("Extended Properties") = "Excel 12.0 Xml;HDR=YES"
.Open
End With

ultLin = ws.UsedRange.Rows.Count
ultCol = ws.UsedRange.Columns.Count

m = ws.Range(ws.Cells(2, 1), ws.Cells(ultLin, ultCol)).value

sql = " Select * From [Resultados$] where 1 <> 1"

rs.Open sql, cnx

ReDim arrColuna(rs.Fields.Count - 1)

ii = 0
For i = 0 To UBound(arrColuna)
arrColuna(ii) = rs.Fields(i).name
Next
rs.Close

strsQL = "Update [Resultados$] Set Data = " & m(i,j) & " where [ID] = & m(i,1) &

'strsQL = "Update [Resultados$] Set " & Join(arrColuna, "," & vbCrLf) = ws.Range("B2").value & " where [ID] =1"

cnx.Execute strsQL
cnx.Close
End Sub

SQL_VBA_Excel_Array

Enviado: 16 Out 2018 às 09:44
por Reinaldo
Cross Post https://www.tomasvasquez.com.br/forum/v ... 782#p25782
A rotina aqui postada está um pouco diferente da postada no forum Tomas, mas vejamos:
...ao testar entre planilha pasta trabalho diferentes não funciona...
Não consegui identificar as bases diferentes, como e feita a seleção/conexão
...sem precisar o nome usando arrColuna...
E redimensionada a array arrColuna, porem o valor dos nomes de colunas atraves do "for" são sempre "alocados" em arrColuna(0) -->"ii=0" Qual o objetivo/necessidade?
...usando inner join
Onde é utilizado inner Join? o Join na montagem da strSQL -->"Join(arrColuna, "," & vbCrLf)" refere-se a função vba Join e não instrução sql "JOIN"
do help vba
Função Join : Retorna uma seqüência de caracteres criada pela associação de diversas subseqüências de caracteres contidas em uma matriz