Actualizar tabla con Id repetidos, asignando un valor a partir del máximo valor de otro campo

Estoy actualizando una tabla que contiene códigos (codigo) de personas que se pueden repetir a lo largo de la tabla, en un campo (servi1_cal) se ha agregado un número secuencial que ha aumentado cada vez que la persona aparece en la tabla, lo que necesito hacer es agregar el valor “1” en un campo (servi1) al valor más alto contenido en el campo “servi1_cal”, y “0” a los demás valores. Para eso utilice el siguiente código, pero es muy dilatado (la tabla contiene 52,000 registros) y quedan registros con datos en blanco en el campo “servi1”.

Private Sub BtnNVeces_Click()
Dim db As Database
Dim rs As Recordset
Dim VRegis As Integer
Dim VCodigo As String, VServi1 As String

Set db = CurrentDb
Set rs = db.OpenRecordset("Select * From TPEMAR Order by Codigo, Fecha")

rs.MoveFirst
Do While Not rs.EOF
VCodigo = rs!Codigo
VRegis = DMax("[Servi1_Cal]", "TPEMAR", "[Codigo] = '" & VCodigo & "'")
Do While rs!Codigo = VCodigo 'And Not rs.EOF
If rs!Servi1_cal = VRegis Then
VServi1 = "1"
Else
VServi1 = "0"
End If
rs.Edit
rs!Servi1 = VServi1
rs.Update
rs.MoveNext
If rs.EOF Then
Exit Do
End If
Loop
rs.MoveNext
If rs.EOF Then
Exit Do
End If
Loop

rs.Close
MsgBox "Ha finalizado el proceso de determinar Servi1"
End Sub

1 respuesta

Respuesta
2

a ver que tal así:

Private Sub BtnNVeces_Click()
Dim db As Database
Dim rs As Recordset
Dim VRegis As Integer
Dim VCodigo As String, VServi1 As String
'Pones 0 a todos los valores
CurrentDb.Execute "UPDATE TPEMAR SET Servi1=0"
Set db = CurrentDb
Set rs = db.OpenRecordset("Select Distinct Codigo From TPEMAR")
rs.MoveFirst
Do While Not rs.EOF
VCodigo = rs!Codigo
VRegis = DMax("[Servi1_Cal]", "TPEMAR", "[Codigo] = '" & VCodigo & "'")
'Pones 1 en el que corresponda al máximo
CurrentDb.Execute "UPDATE TPEMAR SET Servi1=1 WHERE Codigo='" & VCodigo & "' AND Servi1_Cal=" & VRegis
Loop
rs.Close
MsgBox "Ha finalizado el proceso de determinar Servi1"
End Sub

¡Gracias!

Después de un pequeño ajuste (pasar al siguiente registro) funcionó perfecto. Muchas gracias por tu ayuda y el tiempo que te tomas para sacar del atolladero a las personas.

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas