COMPARAR DADOS DE 2 TABELAS E DAR UM INSERT
Boa Tarde,a todos! Gostaria de uma ajuda de vocês.Assim estou comparando dados de 2 tabelas,1ºtabSuperiores,2ºtabVirtual.Estou desenvolvendo no access 2003 com vba + ado.
Pois bem,na tab virtual tenho vários dados o principal é o campo cpf do superior,e qdo eu clicar no botão ok,ele faz um comparate nas 2 tabelas por cpf, o cpf do superior que não existir na tabela superiores ele insere nessa tabela e se já conter o cpf nessa tabela ele ignora esse registro.
Eu fiz assim,porém ele tenta inserir já o existente.
Grato a todos!!!
segue o código que eu fiz e da esse erro de duplicidade.
▼
[ô][ô] VARIÃVEIS DO RECORDSET tblSYSImportTabVirtual
Dim rstVirtual As ADODB.Recordset
Set rstVirtual = New ADODB.Recordset
rstVirtual.CursorLocation = adUseClient
Dim lst As ListItem
BDConecta[ô][ô]CHAMA A SUB NO MÓDULO BAS DE CONEXÃO ADO
rstVirtual.Open [Ô]Select * From tblSYSImportTabVirtual[Ô], conn, adOpenKeyset, adLockOptimistic
If rstVirtual.RecordCount = 0 Then
MsgBox [Ô]Sem dados[Ô]
Else
Do While Not rstVirtual.EOF = False
Set lst = LISTA.ListItems.Add(, , rstVirtual([Ô]CPF[Ô]))
lst.SubItems(1) = rstVirtual([Ô]Nome Completo[Ô])
lst.SubItems(2) = rstVirtual([Ô]CPF do Superior[Ô])
lst.SubItems(3) = rstVirtual([Ô]Nome do Superior[Ô])
If Not IsNumeric(rstVirtual([Ô]cpf[Ô])) Then
MsgBox [Ô]CPF NÃO VÃLIDO[Ô]
End If
[ô][ô]VERIFICA SE O CPF é VÃLIDO,ATRAVéS DA FUNCTION VALIDAR CPF
If validaCPFDig1(Nz(rstVirtual([Ô]cpf[Ô]), Empty)) = True And validaCPFDig2(Nz(rstVirtual([Ô]cpf[Ô]), Empty)) = True Then
MsgBox [Ô]CPF VÃLIDO[Ô]
Else
MsgBox [Ô]CPF NÃO VÃLIDO[Ô]
[ô]Set clsValidatedCPFClass = Nothing
End If
Set lst = Nothing
[ô][ô] VARIÃVEIS DO RECORDSET tblSYSEmployeeSuperiores
Dim rstEmployeeSuperiores As ADODB.Recordset
Set rstEmployeeSuperiores = New ADODB.Recordset
rstEmployeeSuperiores.CursorLocation = adUseClient
rstEmployeeSuperiores.Open [Ô]Select * From tblSYSEmployeeSuperiores[Ô], conn, adOpenKeyset, adLockOptimistic
If (rstVirtual([Ô]CPF do Superior[Ô])) <> (rstEmployeeSuperiores([Ô]nrCPF[Ô])) Then
MsgBox [Ô]diferente[Ô]
[ô][ô][ô]=======INSERT NEW======
Set rstNov = conn.Execute([Ô]INSERT INTO tblSYSEmployeeSuperiores (nrCPF,vcSupervisorFullName) Select [CPF do Superior],[Nome do Superior] From tblSYSImportTabVirtual [Ô])
Else
MsgBox [Ô]cpf já existente[Ô]
End If
rstVirtual.MoveNext
Loop
Set rstEmployeeSuperiores = Nothing
rstVirtual.Close
Set rstVirtual = Nothing
End If
Pois bem,na tab virtual tenho vários dados o principal é o campo cpf do superior,e qdo eu clicar no botão ok,ele faz um comparate nas 2 tabelas por cpf, o cpf do superior que não existir na tabela superiores ele insere nessa tabela e se já conter o cpf nessa tabela ele ignora esse registro.
Eu fiz assim,porém ele tenta inserir já o existente.
Grato a todos!!!
segue o código que eu fiz e da esse erro de duplicidade.
▼
[ô][ô] VARIÃVEIS DO RECORDSET tblSYSImportTabVirtual
Dim rstVirtual As ADODB.Recordset
Set rstVirtual = New ADODB.Recordset
rstVirtual.CursorLocation = adUseClient
Dim lst As ListItem
BDConecta[ô][ô]CHAMA A SUB NO MÓDULO BAS DE CONEXÃO ADO
rstVirtual.Open [Ô]Select * From tblSYSImportTabVirtual[Ô], conn, adOpenKeyset, adLockOptimistic
If rstVirtual.RecordCount = 0 Then
MsgBox [Ô]Sem dados[Ô]
Else
Do While Not rstVirtual.EOF = False
Set lst = LISTA.ListItems.Add(, , rstVirtual([Ô]CPF[Ô]))
lst.SubItems(1) = rstVirtual([Ô]Nome Completo[Ô])
lst.SubItems(2) = rstVirtual([Ô]CPF do Superior[Ô])
lst.SubItems(3) = rstVirtual([Ô]Nome do Superior[Ô])
If Not IsNumeric(rstVirtual([Ô]cpf[Ô])) Then
MsgBox [Ô]CPF NÃO VÃLIDO[Ô]
End If
[ô][ô]VERIFICA SE O CPF é VÃLIDO,ATRAVéS DA FUNCTION VALIDAR CPF
If validaCPFDig1(Nz(rstVirtual([Ô]cpf[Ô]), Empty)) = True And validaCPFDig2(Nz(rstVirtual([Ô]cpf[Ô]), Empty)) = True Then
MsgBox [Ô]CPF VÃLIDO[Ô]
Else
MsgBox [Ô]CPF NÃO VÃLIDO[Ô]
[ô]Set clsValidatedCPFClass = Nothing
End If
Set lst = Nothing
[ô][ô] VARIÃVEIS DO RECORDSET tblSYSEmployeeSuperiores
Dim rstEmployeeSuperiores As ADODB.Recordset
Set rstEmployeeSuperiores = New ADODB.Recordset
rstEmployeeSuperiores.CursorLocation = adUseClient
rstEmployeeSuperiores.Open [Ô]Select * From tblSYSEmployeeSuperiores[Ô], conn, adOpenKeyset, adLockOptimistic
If (rstVirtual([Ô]CPF do Superior[Ô])) <> (rstEmployeeSuperiores([Ô]nrCPF[Ô])) Then
MsgBox [Ô]diferente[Ô]
[ô][ô][ô]=======INSERT NEW======
Set rstNov = conn.Execute([Ô]INSERT INTO tblSYSEmployeeSuperiores (nrCPF,vcSupervisorFullName) Select [CPF do Superior],[Nome do Superior] From tblSYSImportTabVirtual [Ô])
Else
MsgBox [Ô]cpf já existente[Ô]
End If
rstVirtual.MoveNext
Loop
Set rstEmployeeSuperiores = Nothing
rstVirtual.Close
Set rstVirtual = Nothing
End If
Esse é a forma que estou fazendo,porém não funciona,tem outras mais simples,mas que funcione?
Grato!
Grato!
set rs1=cnn.execute(Select CPF From Tabela[Ô])
do While not rs1.eof
set rs2=cnn.execute([Ô]Select ID From tabela1 Where CPF=[ô][Ô] & rs1!cpf & [Ô][ô][Ô])
if rs2.eof then
rs2.close
set rs2=nothing
cnn.execute [Ô]Insert Into tabela1(CPF,campo1.campo2)(Values([ô][ô] & rs1!cpf & [Ô][ô],[ô][Ô] & rs1!campo1 & [Ô][ô],[ô][Ô] & rs1!campo2 & [ô][ô])[Ô]
else
rs2.close
set rs2=nothing
end if
rs1.moveNext
Loop
do While not rs1.eof
set rs2=cnn.execute([Ô]Select ID From tabela1 Where CPF=[ô][Ô] & rs1!cpf & [Ô][ô][Ô])
if rs2.eof then
rs2.close
set rs2=nothing
cnn.execute [Ô]Insert Into tabela1(CPF,campo1.campo2)(Values([ô][ô] & rs1!cpf & [Ô][ô],[ô][Ô] & rs1!campo1 & [Ô][ô],[ô][Ô] & rs1!campo2 & [ô][ô])[Ô]
else
rs2.close
set rs2=nothing
end if
rs1.moveNext
Loop
Opa, ARNALDOCRUZ! Esse loop coloco no lugar do meu?
Abraços!
Abraços!
Ficaria mais ou menos assim,esse script que vc me passou?
Garto.
Set rstEmployeeSuperiores = conn.Execute([Ô]Select ID From tblSYSEmployeeSuperiores Where nrCPF=[Ô] & rstVirtual([Ô]CPF do Superior[Ô]) & [Ô][Ô])
If rstEmployeeSuperiores.EOF Then
rstEmployeeSuperiores.Close
Set rstEmployeeSuperiores = Nothing
conn.Execute [Ô]Insert Into tblSYSEmployeeSuperiores(nrCPF,vcSupervisorFullName)(Values([Ô] & [rstVirtual!CPF do Superior] & [Ô] [ô],[ô][Ô] & [rstVirtual!Nome do Superior] & [Ô][Ô]
Else
tblSYSEmployeeSuperiores.Close
Set tblSYSEmployeeSuperiores = Nothing
End If
rstVirtual.MoveNext
Loop
Set rstEmployeeSuperiores = Nothing
rstVirtual.Close
Set rstVirtual = Nothing
Garto.
Set rstEmployeeSuperiores = conn.Execute([Ô]Select ID From tblSYSEmployeeSuperiores Where nrCPF=[Ô] & rstVirtual([Ô]CPF do Superior[Ô]) & [Ô][Ô])
If rstEmployeeSuperiores.EOF Then
rstEmployeeSuperiores.Close
Set rstEmployeeSuperiores = Nothing
conn.Execute [Ô]Insert Into tblSYSEmployeeSuperiores(nrCPF,vcSupervisorFullName)(Values([Ô] & [rstVirtual!CPF do Superior] & [Ô] [ô],[ô][Ô] & [rstVirtual!Nome do Superior] & [Ô][Ô]
Else
tblSYSEmployeeSuperiores.Close
Set tblSYSEmployeeSuperiores = Nothing
End If
rstVirtual.MoveNext
Loop
Set rstEmployeeSuperiores = Nothing
rstVirtual.Close
Set rstVirtual = Nothing
Tópico encerrado , respostas não são mais permitidas