Ayuda para mejorar registros con valor numérico correlativo en una base de datos de Microsoft Access

Tengo una base de datos en donde necesito que me coloque un valor numérico correlativo si se cumplen unas variables, ejemplo:
Tengo mi tabla con el campo "Modulo" y campo "zanjado", necesitaría si en algún registro dice "si" genere un numero que se unicoy no se repita, ej. Si dice si en modulo ponga "1" si dice si en zanjado ponga "2" y si hay otros registro que posteriormente voy cargando con la diferente variables, ponga "3", "4" sucesivamente,
perdón sino me explico muy bien, soy novato en base de datos.

1 respuesta

Respuesta
1
Para eso hay que hacer dos consultas y la tercera es una union de las dos consultas, luego hay que hacer un código para que la variable corrar por cada registro generado, así cada vez que introduzcas un reg te lo enumera desde 1, así correlativamente, si la consulta es de datos anexados a una tabla, podrías habilitar un campo pra el valor del numero. O Bien lo utilizas a nivel informativo mientras insertas datos.
Genera un modulo y pegas este código.
Public Function numerarSQL(nDato) As Long
'variable que no se pierde entre las distintas llamadas
Static nORDEN As Integer
If IsNull(nDato) Then 'si nDato es nulo: variable a cero y salida
nORDEN = 0
Exit Function
End If
nORDEN = nORDEN + 1
numerarSQL = nORDEN
End Function
Creas una consulta , la editas en modo SQL y pegas este codigo
SELECT CuentaCL.Result, CuentaCL.Material, CuentaCL.FIFO, CuentaCL.Albarán, CuentaCL.Cantidad, CuentaCL.Proveedor, CuentaCL.Numerador, CuentaCL.CodeRT, CuentaCL.Retenido, numerarSQL([Result]) AS RegNum, *
FROM CuentaCL;
UNION SELECT numerarSQL(Null), * FROM CuentaCL WHERE 1=0;
Si te fijas es una consulta mía
Tu has de modificar los datos por la tuya
numerarSQL([Result]) AS RegNum es el contador que viene del modulo que antes habías creado, result es el campo que deseas contar.
La sql que viene debajo de Union es para poner el contador a cero cuando no haya datos, es un reset.
Un saludo,
-------------------------------------------------------------------
Aplicaciones a medida y Proyectos en Access VBA
Pedir presupuesto
andiandujar@ gmail.com
Hola mira tengo una duda, como tendría que ser la estructura de las consultas a realizar, p.e. los campos de toda mi tabla, ¿una con la variable "modulo" y otra con la variable "zanjado"?
Pasos a seguir para guiarnos mejor los dos.
1. Creamos un modulo (pegamos el código de abajo
'.............................................................................................
Public Function numerarSQL(nDato) As Long
'variable que no se pierde entre las distintas llamadas
Static nORDEN As Integer
If IsNull(nDato) Then 'si nDato es nulo: variable a cero y salida
nORDEN = 0
Exit Function
End If
nORDEN = nORDEN + 1
numerarSQL = nORDEN
End Function
'.............................................................................................
2, lo guardamos con cualquier nombre
3, creamos una consulta con la tabla a enumerar, si quieres poner todo los datos los pones.
4, eleige un campo por ejemplo resultado
5, Coia el nombre result en el portapapeles y en su lugar escribes
RegNum:numerarSQL(Resultado)
6, graba la consulta
7, Abrimos la consulta en modo edición, en el menu ver, veras que pone SQL, presiona el botón Te saldrá la select de la consulta, un ejemplo.
---------------------------------------------------------------------------------------------------------
SELECT CuentaCL.Result, CuentaCL.Material, CuentaCL.FIFO, CuentaCL.Albarán, CuentaCL.Cantidad, CuentaCL.Proveedor, CuentaCL.Numerador, CuentaCL.CodeRT, CuentaCL.Retenido, numerarSQL([Resultado]) AS RegNum, *
FROM CuentaCL;
------------------------------------------------------------------------------------------------------
Si te fijas al final el registro cambiado se llama As RegNum, ¿Ok?
8 vete al final del código de la select y presiona enter para hacer un salto del carro.
9 Escribimos lo siguiente
UNIÓ
10, pr3sionamos enter para avance del carro
11 A continuación hay que poner los datos de la consulta de arriba pero... sólo escogeremos RegNum.
SELECT numerarSQL(Null), * FROM CuentaCL WHERE 1=0;
CuentaCL es el nombre de ambas consultas, lo que se trata es de hacer una unión entre ellas.
El código te ha de quedar así.
SELECT CuentaCL.Result, CuentaCL.Material, CuentaCL.FIFO, CuentaCL.Albarán, CuentaCL.Cantidad, CuentaCL.Proveedor, CuentaCL.Numerador, CuentaCL.CodeRT, CuentaCL.Retenido, numerarSQL([Resultado]) AS RegNum, *
FROM CuentaCL;
UNION
SELECT numerarSQL(Null), * FROM CuentaCL WHERE 1=0;
Finalmente guardas la consulta como el nombre que tu quieres, cada vez que la ejecutes te enumerará los registros de 1 hasta los que tengas.
Espero haber sido claro.
Un saludo,
-------------------------------------------------------------------
Aplicaciones a medida y Proyectos en Access VBA
Pedir presupuesto
[email protected]
Eh seguido los pasos, y funciona gracias, veo que me genera un campo regnum, como hago para que este dato que es el numero de folio me lo guarde en la tabla en el campo p.e. "nº de folio"
Esta consulta puedes crearla como datos anexados y elcampo regnun que apunta nº de folio de la tabla a anexar
hola, disculpa mi insistencia, pero estube probando como datos anexados, y me queda algo asi
INSERT INTO [Nueva Tabla Belgrano] ( Id, ZANJADO, MODULO, ODT, [Nº DE FOLIO] )
SELECT [Nueva Tabla Belgrano].Id, [Nueva Tabla Belgrano].ZANJADO, [Nueva Tabla Belgrano].MODULO, [Nueva Tabla Belgrano].ODT, numerarSQL([Nº DE FOLIO]) AS RegNum
FROM [Nueva Tabla Belgrano]
WHERE ((([Nueva Tabla Belgrano].ZANJADO)="SI")) OR ((([Nueva Tabla Belgrano].MODULO)="SI"))
UNION
SELECT numerarSQL(Null), * FROM [foliar (a)] WHERE 1=0; ' foliar (a) es la otra consulta con los mismos campos.-
Pero me da error de sintaxis, quizá algo esta mal.-
Desde ya gracias por el interés.-
NO, la union no has de tocarla.
Creas un consulta en blanco, una vez en el diseño, añades la Unió OO, pones todos los registros a explosionar, incruyendo el regnum en primera columna. Cambia la consulta de selección por la de anexados, elijes la tabla y al campo regnun le dices que guarde en N1 folio. Grabas y ya está, si en un futuro deseas poner criterios lo haces en esta consulta.
Bueno, debería andar, pero al actualizar me dice que no a agrego los registro por infacciones en la clave principal.
El tema debe ser que mi clave principal no es autonumérica, sino el numero lo da un código, por unos problemas que tenia en un foemulario,
sera por este motivo que no deja anexar.-
Tu problema es que el campo N1 Folio de la tabla está indexado y si no lo respetas te salta este aviso de violación primary key, o bien quitas la llave a este campo, o cres uno nuevo en la tabla y en la consulta apuntas a este nuevo campo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas