Recorrer Tabla y asignar valores incrementales

Soy nuevo en esto de la programación en access y tengo el siguiente inconveniente, tengo una tabla en la cual existen los siguientes datos: código de curso, código de asignatura, estado de asignatura (activa=1 o inactiva=2) y orden de impresión. La cuestión es la siguiente necesito por medio de un botón en un formulario darle click y que recorra la tabla y en el campo orden de impresión me asigne un numero incremental a cada asignatura dependiendo si la asignatura esta activa o no. Por ejemplo en el curso PrimeroA si la la asinatura 1 que es matemáticas esta activa(estado=1) le asigne el numero 1, vaya al siguiente registro de ese curso y si la asignatura esta activa le asigne 2, vaya al siguiente registro si la asigtura esta inactiva ignore ese campo y vaya al siguiente registro... Y así sucesivamente.
El problema que tengo es que existen como 120 cursos diferentes y periodo a periodo cambian las asignaturas activas...
Llevo como dos meses tratando de solucionar este problemita y hasta el momento no he podido encontrar la solución...

1 respuesta

Respuesta
1
Lo tendrás que hacer por código.
Primero crea un formulario.
Luego crea una consulta en la que mestres por el orden que quieras que te aparezcan los resultados, y filtrala para que sólo te aparezcan las que estén activas.
Vete al formulario y crea un botón.
Agrega al proyecto la referencia Microsoft Dao 3.51 object library. (Para agregar una referencia, tienes que meterte en modo diseño en el formulario)
Luego por código tendrías que recorrer el con un recordset la tabla con un bucle e ir asignando valores a la tabla.
Parece complicado pero es que es difícil de explicar. Si me pudieras mandar el archivo te lo podría hacer en poco tiempo. al correo [email protected]
Si quieres que te explique algún paso de los que te dije en concreto, dime cual...
Ok. Con gusto te enviare el archivo y te agradeceré eternamente...
Acabo de mandarte por correo la solución al problema.
Vamos por buen camino, pero falta una cosita, la idea es que cada vez que empiece un curso nuevo debe empezar a numerar en "1"... una vez echo eso la solución que planteas esta excelente.
Me surgen dos dudas con el código que me envías:
1. Como Agrego al proyecto la referencia Microsoft Dao 3.51 object library.
2. Por que, ¿Pongo todas las casillas de ordenimp a 0? ¿Antes de empezar a ejecutar el código?
Que pena tanta molestia, pero espero poder recibir toda tu ayuda. Gracias!
Este sería el código para lo que quieres
Private Sub Comando67_Click()
  Dim rs As DAO.Recordset
  Dim Contador As Integer
  Dim AcuCurso
  'primero pongo todas las casillas de ordenimp a 0
  CurrentDb.Execute ("update [a a asignacion cursos y profesores] set [ordenimp]=0")
  'selecciono las lineas de la tabla ordenadas por asignatura y con el campo estado = a 1
  Contador = 1
  AcuCurso = -1
  Set rs = CurrentDb.OpenRecordset("Select * from [a a asignacion cursos y profesores] where estado=1 order by [codigo curso]")
  While Not rs.EOF
    rs.Edit
       rs!ordenimp = Contador
    rs.Update
    Contador = Contador + 1
    'Si el curso ha cambiado, reseteo el contador
    If AcuCurso <> rs![codigo curso] Then
       Contador = 1
    End If
    AcuCurso = rs![codigo curso]
    rs.MoveNext
  Wend
  MsgBox "Indices generados en campo OrdenIMP cuando Estado=1 , agrupando por codigo curso", vbInformation
End Sub
No es necesario por lo que parece agregar el Dao 3.51 en la versión 2007
Lo pongo a 0 para que parta desde 0 en la ordenación y los datos que no procese queden a 0

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas