DO WHILE ( COMPARAR REGISTROS)

BRUNOJUL 22/04/2016 15:26:52
#461247
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
JABA 22/04/2016 15:46:21
#461250
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

KERPLUNK 22/04/2016 15:52:22
#461252
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.
JABA 22/04/2016 16:11:56
#461253
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

BRUNOJUL 22/04/2016 17:06:52
#461259
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

JABA 22/04/2016 17:11:01
#461260
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.
JABA 22/04/2016 17:16:44
#461261
Você poderia eliminar toda repetição de registro usando um distinct.

SELECT DISTINCT Telefone FROM SUATABELA;
BRUNOJUL 22/04/2016 17:48:31
#461263
Jaba ,

Nesta base preciso saber em em cada linha se o registro atual é igual a registro anterior e gravar esta informação.
JABA 22/04/2016 17:57:25
#461264
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.
GANDA.NICK 22/04/2016 19:44:32
#461270
Não use rs.Edit e rs.Update para alterar os dados na base de dados... use antes query[ô]s para esse efeito.

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
JABA 22/04/2016 20:09:42
#461271
Resposta escolhida
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