DO WHILE ( COMPARAR REGISTROS)
Caros ,
Conseguem auxiliar nesta função em access , tenho um Do while que precisa verificar se o registro da linha atual é igual a linha anterior .
Do While (Not rs.EOF)
rs.Edit
[ô]verificar se registro atual é igual ao da linha anterior ?
rs.Update
rs.MoveNext
Loop
Conseguem auxiliar nesta função em access , tenho um Do while que precisa verificar se o registro da linha atual é igual a linha anterior .
Do While (Not rs.EOF)
rs.Edit
[ô]verificar se registro atual é igual ao da linha anterior ?
rs.Update
rs.MoveNext
Loop
Cara fiz isso aqui de cabeça, não sei se tá funcionando, mas a ideia é por aÃ.
dim registroAnterior as String
registroAnterior = rs(0).Value [ô]Aqui estou me baseando somente no código do registro. Caso queira comparar todos os campos, então tu vai ter preencher isso aqui.
rs.MoveNext
Do While (Not rs.EOF)
rs.Edit
if registroAnterior = rs(0).Value then
[ô]Registro igual
else
[ô]Registro diferente
End if
rs.Update
registroAnterior = rs(0).Value
rs.MoveNext
Loop
Veja bem, [Ô]rs[Ô] representa um recordset, que pode ser resultado de uma query. À menos que você inclua no seu recordset um campo dinâmico numerando ou identificando cada registro, não existe maneira de saber qual o registro anterior. Por exemplo, digamos que você tem os campos Id, Nome e Idade em uma tabela. E você seleciona registros cuja idade seja maior que 45. O resultado não vai ter os campos Id numerados de forma ordinária, pois podem haver [Ô]pulos[Ô] entre o id de um registro e outro, desfazendo o conceito de [Ô]anterior[Ô]. Você pode usar as funções de navegação para o que você quer, mas a performance cairia bastante e seria potenciada pelo número de registros trazidos no recordset, além de deixar bastante propenso à erros.
Se tua intenção é comparar todo o registro independentemente da ID, então você pode fazer assim:
Public Function GetRegistroAtual(rs As Recordset) As String
Dim registroAtual As String
Dim i As Integer
For i = 0 To rs.Fields.Count - 1
registroAtual = registroAtual & rs.Fields(i).Value
Next
GetRegistroAtual = registroAtual
End Function
Dim registroAnterior As String
[ô]ConnectDB
rs.Open [Ô]select * from suaTabela[Ô], db, 3, 3
registroAnterior = GetRegistroAtual(rs)
rs.MoveNext
Do Until (rs.EOF)
If registroAnterior = GetRegistroAtual(rs) Then
[ô]Registro igual
Else
[ô]Registro diferente
End If
registroAnterior = GetRegistroAtual(rs)
rs.MoveNext
Loop
Não funcionou , a variavel registroAnterior esta estático
KERPLUNK ,
Pode colocar um exemplo ? ; À menos que você inclua no seu recordset um campo dinâmico numerando ou identificando cada registro
Tenho uma Tabela com os telefones que preciso comparar .
TELFONE STATUS
111
112 DIFERENTE
112 IGUAL
1114 DIFERENTE
KERPLUNK ,
Pode colocar um exemplo ? ; À menos que você inclua no seu recordset um campo dinâmico numerando ou identificando cada registro
Tenho uma Tabela com os telefones que preciso comparar .
TELFONE STATUS
111
112 DIFERENTE
112 IGUAL
1114 DIFERENTE
Citação:Não funcionou , a variavel registroAnterior esta estático
Como assim? Explique-se melhor.
OBS: Eu tinha declarado a função como privada sem querer, coloque-a como Public.
Você poderia eliminar toda repetição de registro usando um distinct.
SELECT DISTINCT Telefone FROM SUATABELA;
Jaba ,
Nesta base preciso saber em em cada linha se o registro atual é igual a registro anterior e gravar esta informação.
Nesta base preciso saber em em cada linha se o registro atual é igual a registro anterior e gravar esta informação.
Cara, então o codigo que lhe passei atende perfeitamente. Aqui funcionou perfeitamente, só resta ver o que você fez de errado pra não ter funcionado.
Não use rs.Edit e rs.Update para alterar os dados na base de dados... use antes query[ô]s para esse efeito.
ex:
O code do JABA está puxar todos os campos, se tiver ID, esse campo pelo menos irá ser sempre diferente... compare apenas os campos que lhe interessam....
em vez de:
faça:
Também tem a opção de trazer os duplicados através de query[ô]s..
Link: Achar valores duplicados
ex:
UPDATE tabela SET campo1 = valor1, campo2 = valor2 WHERE campoID = id
O code do JABA está puxar todos os campos, se tiver ID, esse campo pelo menos irá ser sempre diferente... compare apenas os campos que lhe interessam....
em vez de:
For i = 0 To rs.Fields.Count - 1
registroAtual = registroAtual & rs.Fields(i).Value
Next
faça:
registroAtual = rs.Fields.Item([Ô]Telefone[Ô]).Value [ô] ou TELFONE sei lá
Também tem a opção de trazer os duplicados através de query[ô]s..
Link: Achar valores duplicados
Citação:O code do JABA está puxar todos os campos, se tiver ID, esse campo pelo menos irá ser sempre diferente... compare apenas os campos que lhe interessam....
No primeiro exemplo que postei, ele leva em conta somente a ID. E no segundo caso, como não sabia quantos campos ele queria comparar para saber se o registro está duplicado, acabei puxando todos os campos para sua comparação. No caso dele, a ID se repete, por isso, mesmo levando em conta todos os campos, não seria sempre diferente.
Tópico encerrado , respostas não são mais permitidas