SQL-VALORES DUPLICADOS

USUARIO.EXCLUIDOS 08/01/2005 20:06:45
#59491
Olá,
Tenho uma tabela com 2 campos, o campo1 tem numeros de 1 a 3 e o campo 2 tem valor igual para cada conjunto de 1 a 3. Eu pretendia adicionar um 3º campo de nome "contador" de modo que a tabela fique com o aspecto seguinte:
Campo1 Campo2 Contador
1 15 1
2 15 1
3 15 1
1 45 2
2 45 2
3 45 2...etc
Os numeros do campo2 são aleatórios, portanto não os posso prever. Neste caso são o 15 e o 45...mas também podia ser 3, 45, 78. No entanto aparecem sempre por ordem crescente.

A conexão a esta BD é feita por ADO e eu precisava de uma query (SQL) que coloque os valores no campo "Contador" da forma que descrevi.

Complicado, né!!??

Um obrigado adiantado pela vossa ajuda!

USUARIO.EXCLUIDOS 09/01/2005 23:49:31
#59698
Por favor ajudem-me![S43][S43][S43]

Tou bloqueado neste problema.
Só precisava de uma instrução SQL ou código que me coloca-se numeros por ordem crescente no campo "Contador" baseado nos valores do campo2.
Ou seja (mais 1 exemplo):
Campo 2 Contador
10 1 onde tiver nº duplicado coloca 1
10 1
37 2 onde tiver nº duplicado pela 2Âê vez, coloca 2
37 2
37 2
56 3 e por aí fora....
69 4
69 4
70 5

Podem-me ajudar?
Tou a desesperar......[S51]
CLEVERTON 09/01/2005 23:52:15
#59700
tabela.open "select * from tabela order by contador",base,adopenkeyset
USUARIO.EXCLUIDOS 10/01/2005 08:43:34
#59730
Miguel..a gente a té poderia tentar fazer uma instrução só sql que fizesse isso..mas eu acho qeu, se desse certo pra começar, ficaria bem complicada.
Como vc vai fazer uma vez só...que acha de fazer uma proc com um cursor..e ir andando linha a linha.....Faz um cursor que anda neste select principal. crie uma variavel pro contador e uma pra verificar o campo 2. Inicialize a variavel que verifica o campo 2 com 0.Se por acaso o campo 2 mudar, vc soma 1 no contador..caso contrario..vc continuar com o valor do contador e dá um update na tabela pra esta linha com o contador.
Se tiver problema em fazer esta proc..me avise que a gente faz juntos.
USUARIO.EXCLUIDOS 11/01/2005 17:21:38
#60095
Seguindo as pistas do amigo Laerte, consegui fazer o seguinte:

Dim X as integer
Ligar.Open "DRIVER={Microsoft Access Driver (*.mdb)};dbq=" & App.Path & "\BD.mdb"
rS.Open "Tabela", Ligar, adOpenDynamic, adLockOptimistic
rS.Close
For n = 1 To 500
rS.Open "Update Dados SET Contador=" & X & " where Campo2=" & n & ""
Next n

Obviamente este código não faz o que pretendo, pois tá colocando o nº 1 em todo os campos do contador.
A minha dúvida agora, é onde e como colocar o código que incremente 1 à  variavel X e mantenha esse valor até o campo2 mudar.

Isto tá me a dar uma dor de cabeça...! [S52]
USUARIO.EXCLUIDOS 11/01/2005 20:36:49
#60142
Resposta escolhida
Algumas obs no código postado.

rS.Open "Tabela", Ligar, adOpenDynamic, adLockOptimistic 
rS.Close

Não é necessário esse código.Ele abre tabela inteira e depois fecha. Não faz nada aqui. Além que o tipo do cursor adOpenDynamic não é suportado pelo ACCESS. Não da erro mas como não é suportado ele vai para o tipo default, se não me engano é o Static.


For n = 1 To 500 
rS.Open "Update Dados SET Contador=" & X & " where Campo2=" & n & ""
Next n

Bastaria esse código.Sendo que não uso Update, e Delete do SQL por não retornar erro caso não tenha o registro. De uma olhada no artigo 5 de programação de banco de dados.

Experimenta o código.


    
With Rs
.CursorLocation = adUseServer
.Open "select Contador from tabela order by campo2", Ligar, adOpenStatic, adLockOptimistic
end With

If Not (Rs.EOF) Then
Rs.MoveFirst
Temp=Rs(0)
Contador=1
Do While Not (Rs.EOF)
if Temp=Rs(0) then
Rs!Contador=Contador
else
Temp=Rs(0)
Contador=Contador+1
Rs!Contador=Contador
end if
Rs.MoveNext
Loop
End If

USUARIO.EXCLUIDOS 11/01/2005 21:12:52
#60150
Excelente Renato Mattos,

Funcionou na perfeição.

Muito obrigado a todos.
Tópico encerrado , respostas não são mais permitidas