COMPARAR DADOS DE 2 TABELAS E DAR UM INSERT

NEYLIMA 19/07/2010 13:41:06
#347732
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
NEYLIMA 19/07/2010 13:44:59
#347733
Esse é a forma que estou fazendo,porém não funciona,tem outras mais simples,mas que funcione?
Grato!
ARNALDOCRUZ 19/07/2010 15:29:19
#347752
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

NEYLIMA 19/07/2010 16:05:10
#347761
Opa, ARNALDOCRUZ! Esse loop coloco no lugar do meu?
Abraços!
NEYLIMA 19/07/2010 17:12:13
#347778
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
Tópico encerrado , respostas não são mais permitidas