Enumerar registros en tabla con datos repetidos

Espero que me puedan ayudar en este tema, tengo una tabla con los siguientes campos:

Proyecto (Texto), Lote (Numero) y SubOrden (Numero), lo que deseo es colocar 1 en suborden a los proyectos que tienen el mismo lote-proyecto, pero si el proyecto tiene otro lote seguir con el numero consecutivo, pasar al siguiente proyecto y efectuar la misma operación, en resumidas cuentas debería quedar así:

Proyecto Lote SubOrden

aaaa        100          1

aaaa        100          1

aaaa        100          1

aaaa        110          2

aaaa        110          2

aaaa        113          3

bbbb        100          1

cccc         150          1

cccc        151          2

2 respuestas

Respuesta
1

Prueba esto:

1º/ Inserta un módulo en tu base de datos y pega esta función:

Public Function fncSubOrden(elProyecto As String, elLote As Integer) As Integer
Dim rst As Recordset
Dim miSQL As String
Dim cuenta As Integer
miSQL = "SELECT Proyecto, Lote " & _
        "FROM [TProyectos] " & _
        "GROUP BY Proyecto, Lote " & _
        "HAVING (((Proyecto)='" & elProyecto & "')) " & _
        "ORDER BY Proyecto, Lote"
Set rst = CurrentDb.OpenRecordset(miSQL, dbOpenDynaset)
rst.FindFirst "[Lote]=" & elLote
fncSubOrden = rst.AbsolutePosition + 1
End Function

He supuesto que la tabla se llama TProyectos, el campo Proyecto es de texto y los campos Lote y SubOrden son numéricos.

2º/ Ahora, para añadir el SubOrden a la tabla, tienes dos opciones:

a) Usar una consulta de datos anexados, que tendría esta SQL:

UPDATE [TProyectos] SET SubOrden = fncSubOrden([Proyecto],[Lote]);

b) En el formulario en el que introduces los datos, programas estos dos códigos en los eventos "Después de actualizar" de los campos Proyecto y Lote:

Private Sub Lote_AfterUpdate()
If Nz(Me.Lote, -1) = -1 Or Nz(Me.Proyecto, "") = "" Then Exit Sub
DoCmd.RunCommand acCmdSaveRecord
Me.SubOrden = fncSubOrden(Me.Proyecto, Me.Lote)
End Sub
Private Sub Proyecto_AfterUpdate()
If Nz(Me.Lote, -1) = -1 Or Nz(Me.Proyecto, "") = "" Then Exit Sub
DoCmd.RunCommand acCmdSaveRecord
Me.SubOrden = fncSubOrden(Me.Proyecto, Me.Lote)
End Sub

3º/ Tendrías otra opción, que sería no guardar en la tabla el campo SubOrden, y obtenerlo en una consulta cada vez que te haga falta. En este caso, la SQL de esta consulta sería así:

SELECT Proyecto, Lote, fncSubOrden([Proyecto],[Lote]) AS SubOrden
FROM [TProyectos];

Respuesta

¿Todo esto como lo generas por medio de consultas?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas