Necesito Asignar valor a un campo mientras se cumple el valor de otro campo en una misma tabla.

A ver... Tengo una tabla de Clientes con un campo de nombre TipoClie donde se almacena el valor 1 para Clientes Contribuyentes y 0 para clientes No Contribuyentes, en la misma tabla hay un Campo de nombre SERIE, la intención es generar un procedimiento que lea el tipo de cliente y le asigne un valor consecutivo al campo Serie cumpliendo este ejemplo: Si los primeros tres (3) registros son TipoClie=1 Serie tendrá valor 1 para cada registro, si desde el cuarto registro hasta el séptimo registro son TipoClie=0 el valor de Serie será 2 para cada registro, si el Octavo registro es TipoClie=1 Serie valdrá 3 y así sucesivamente hasta llegar al final de los registros de la tabla siempre que Serie tenga valor nulo. Se quiere obtener al final algo así como esto:
#Registro          TipoClie       Serie
1                          1                   1
2                          1                   1
3                          1                   1
4                          0                   2
5                          0                   2
6                          0                   2
7                          0                   2
8                          1                   3
9                          0                   4
10                        1                   5
11                        1                   5
.
.
Mucho les sabre agradecer su ayuda.

1 respuesta

Respuesta
1
El códgo sería: (lo que va precedido de ' son comentarios)
' Declaramos las variables
Dim db as database
Dim rs as Recordset
Dim vTipoClie as string ' supongo que el campo TipoClie es texto
Dim vSerie as integer
' Activamos la bd
Set db=Currentdb
' Creamos el recordset
Set rs=db.OpenRecordset("Select Registro, tipoclie, serie from Clientes order by Registro")
vSerie=1 ' Damos el valor a la variable vSerie
Do while not rs.eof    ' mientras no sea final de fichero hazme...
vTipoclie=rs! TipoClie ' damos el valor de la variable igual al valor del campo TipoClie
Do while not rs.Eof and vTipoClie=rs!TipoClie ' mientras no sea final de fichero y el campo TipoClie tenga el mismo valor....
rs.edit
rs!Serie=vSerie
rs.Update
' editamos el recordset, damos el valor al campo serie igual al de la variable y actualizamos
rs.movenext        ' vamos al siguiente registro
Loop      ' cerramos el 2º bucle
vSerie=vSerie+1         ' aumentamos el valor de vSerie
rs.movenext        ' vamos al siguiente registro
Loop      ' cerramos el 1er bucle
Espero que funciones, si tienes dudas, me pregusntas.
Saludos, Angeles
Página supuestos y soluciones en access: http://angelessebas.es/

Hola Angeles,

Muchísimas gracias por tu ayuda.

Todo bien, el procedimiento funcionó, pero.... en cada "salto" luego de conseguir un TipoClie distinto deja un espacio en blanco, es decir, el programa funciona bien pero cuando le toca asignar un nuevo numero de Serie, entre la serie anterior y la serie nueva deja un espacio en blanco dejando asi un Tipoclie sin Serie.

Se Observa asi:

#Registro        TipoClie     Serie

    1                     0              1

    2                     0              1

    3                     1                              <<<--Espacio en blanco (null)   Debió asignar 2

    4                     1              2             <<<--Debió asignar 3

    5                     0                             <<<--Espacio en blanco (null)    Debió asiganr 4

    6                     1             3              <<<--Debió asignar 5

    7                     1             3

Muchas gracias de nuevo por tu apoyo.

Te agradezco de todo corazón me ayudes a solucionar este detalle.

Gracias!

Llevas toda la razón, nos sobra un rs. MoveNext

En vez de:

Loop ' cerramos el 2º bucle
vSerie=vSerie+1 ' aumentamos el valor de vSerie
rs.movenext ' vamos al siguiente registro
Loop ' cerramos el 1er bucle

Pones:

Loop ' cerramos el 2º bucle
vSerie=vSerie+1 ' aumentamos el valor de vSerie
Loop ' cerramos el 1er bucle

Ya que, como en el 2º bucle vamos al siguiente registro, si en el 1º se lo volvemos a decir nos saltamos un registro.

Perfecto Angeles, me lo temí... ya había hecho la prueba luego de un análisis y funcionó a la perfección.

Estoy muy agradecido por tu pronta atención y la exactitud de tu desarrollo.

Gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas