Estoy buscando una solución a la creación de un campo numérico correlativo
(como autonumérico) en una tabla, pero desde una consulta. Desde formulario
no tengo ninguna duda, hay varias opciones...
Tengo una tabla RECIBOS sin datos con varios campos donde añado registros.
Uno de ellos, NRECIBO, ha de ser numérico y correlativo.
Agrego registros desde una "consulta de datos anexados" que se ejecuta desde
un formulario independiente (un botón, no se ven los datos).
Puedo usar el autonumérico, pero si se produce algún error, no puedo editar
ningún registro y siempre hay algo que corregir, pues algún registro no se
actualizó antes de ejecutar la consulta y no se sabe hasta entonces.
Gracias de antemano
Jesús
Te contesto con la respuesta de Marius hace ya tiempo , a una pregunta
similar , y que tenia guardada en el trastero informatico
Autor/es: Màrius .
Pregunta : Quiero crear un campo calculado en una consulta y que numere los
registros correlativamente ¿es esto posible?
Respuesta : Sí. Mediante el siguiente metodo es posible numerar los
registros en una consulta. Para que sea mas claro usaremos el siguiente
ejemplo.
Partimos de una tabla (Tabla1) con 2 campos (Dato1,Dato2 - ambos texto/10);
con los siguientes datos:
Tabla1
Dato1 Dato2
Hola 1
Adiós 2
Hasta luego 2
Buenas 1
la idea seria conseguir mediante una consulta el siguiente resultado:
Consulta1
RegNum Dato1 Dato2
1 Hola 1
2 Adios 2
3 Hasta luego 2
4 Buenas 1
Para crear el "numero de orden" usaremos esta función:
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
Hacemos la consulta con el siguiente SQL:
SELECT numerarSQL([Dato1]) AS RegNum, * FROM Tabla1
Si ejecutamos la consulta nos dará la numeración de registros correlativa
pero con el inconveniente de que si volvemos a ejecutarla el primer RegNum
ya no será el 1, pues la variable Static nOrden sigue almacenando los datos
entre las distintas llamadas a la función.
Debemos indicarle a la función que queremos empezar desde el numero 1, lo
haremos con el siguiente SQL:
SELECT numerarSQL(Null), * FROM Tabla1 WHERE 1=0
Como no nos interesa tener dos consultas independientes, las juntamos en una
sola con la clausula UNION, quedando así:
SELECT numerarSQL([Dato1]) AS RegNum, * FROM Tabla1
UNION ALL
SELECT numerarSQL(Null), * FROM Tabla1 WHERE 1=0
Con esto ya tendremos una consulta con los registros numerados.
Espero te sirva
Saludos
Ramon
"Jesús - DENIMATICA" <JessDEN...@discussions.microsoft.com> escribió en
el mensaje news:1A76D58B-B9D4-4174...@microsoft.com...
Una solucion alternativa a la del correo anterior y a grandes rasgos :
Crea un campo numerico indexado sin duplicados , en la tabla recibos
Cuando vayas a lanzar la consulta de datos anexados , averigua primero con
la funcion DMax el valor mas alto del campo
Luego añade el (dato averiguado + 1) a la consulta de datos anexados
Saludos
Ramon
"Jesús - DENIMATICA" <JessDEN...@discussions.microsoft.com> escribió en
el mensaje news:1A76D58B-B9D4-4174...@microsoft.com...
Gracias de nuevo Ramón
Jesús
Justo en eso estoy, pero no funciona en consultas (o al menos no se como
hacerlo...).
Además, de esa forma obtendría el mismo número en todos los registro ¿verdad?
Tengo que salir a un cliente, pero tengo que encontrar una solución sin
tener que hacerlo en un formulario...
Private Sub Cuadro_combinado38_AfterUpdate()
Dim NumeroFactura As Double
Dim NombreCliente As String
Dim ValorFactura As Double
NombreCliente = Cuadro_combinado38.Column(1)
ValorFactura = Cuadro_combinado38.Column(2)
NumeroFactura = Nz(DMax("IdFactura", "Facturas"), 0) + 1
CurrentDb.Execute " INSERT INTO Facturas (IdFactura,Cliente, Valor)
VALUES( " & NumeroFactura & ", '" & NombreCliente & "', " & ValorFactura &
");"
End Sub
Saludos
Ramon
"Jesús - DENIMATICA" <JessDEN...@discussions.microsoft.com> escribió en
el mensaje news:D4AC0039-3B04-47D2...@microsoft.com...
Esta función la conozco, pero sirve para formularios, no para consultas...
Perdona las molestias Ramón, pero no quiero usar un formulario para generar
los registros (genero entre 100 y 500 cada vez para confeccionar las remesas
en disquette y llevarlas al banco).
Estoy usando "eRemesas" para generar los recibos en soporte magnético,
funciona bien, aunque no contestan a mis email de ayuda para otros temas. No
se si debo adquirir algo de quien no recibo respuesta...
Si conoces alguna utilidad para ello ya sería "demasié pal cuerpo".
Gracias de nuevo
Jesús
Saludos
Ramon
"Jesús - DENIMATICA" <JessDEN...@discussions.microsoft.com> escribió en
el mensaje news:92377612-E211-4E63...@microsoft.com...
Saludos
Ramon
"Jesús - DENIMATICA" <JessDEN...@discussions.microsoft.com> escribió en
el mensaje news:92377612-E211-4E63...@microsoft.com...
En el primer mensaje lo explico:
"Tengo una tabla RECIBOS sin datos con varios campos donde añado registros.
Uno de ellos, NRECIBO, ha de ser numérico y correlativo.
Agrego registros desde una "consulta de datos anexados" (coje los datos de
otra tabla y los añade la tabla RECIBOS) y se ejecuta desde
un formulario independiente (un botón, no se ven los datos).
Puedo usar el autonumérico, pero si se produce algún error, no puedo editar
ningún registro y siempre hay algo que corregir, pues algún registro no se
actualizó antes de ejecutar la consulta y no se sabe hasta entonces...."
creo que lo que quieres no se puede hacer con una consulta.
En lugar de una consulta puedes hacer la copia de los datos de una
tabla a otra por código con dos recordsets, leyendo los datos de una
tabla y añadiéndolos en la otra generando el número consecutivo en el
código. Esto es más o menos lo que te están proponiendo.
En ocasiones parecidas yo he usado dos numeraciones una con un
autonumérico y en otra columna un número que, después de anexar los
datos, en otra consulta hago igual al autonumérico. La primera columna
con el autonumérico no se puede modificar a mano pero la segunda sí si
es necesario. De todas formas con esto habría que hacer algo para
reinicializar el autonumérico a 1 antes de cargar los datos.
Saludos,
Valentín Playá
Sonotronic S.A.
Madrid
********************************************************************************************
On 25 jun, 08:07, Jesús - DENIMATICA
> > > "Jesús - DENIMATICA" <JessDENIMAT...@discussions.microsoft.com> escribió en
> > > el mensajenews:D4AC0039-3B04-47D2...@microsoft.com...
> > > > Gracias Ramón
>
> > > > Justo en eso estoy, pero no funciona en consultas (o al menos no se como
> > > > hacerlo...).
> > > > Además, de esa forma obtendría el mismo número en todos los registro
> > > > ¿verdad?
>
> > > > Tengo que salir a un cliente, pero tengo que encontrar una solución sin
> > > > tener que hacerlo en un formulario...
>
> > > > "Ramon" wrote:
>
> > > >> Hola nuevamentre
>
> > > >> Una solucion alternativa a la del correo anterior y a grandes rasgos :
>
> > > >> Crea un campo numerico indexado sin duplicados , en la tabla recibos
> > > >> Cuando vayas a lanzar la consulta de datos anexados , averigua primero
> > > >> con
> > > >> la funcion DMax el valor mas alto del campo
> > > >> Luego añade el (dato averiguado + 1) a la consulta de datos anexados
>
> > > >> Saludos
> > > >> Ramon
>
> > > >> "Jesús - DENIMATICA" <JessDENIMAT...@discussions.microsoft.com> escribió
> > > >> en
> > > >> el mensajenews:1A76D58B-B9D4-4174...@microsoft.com...
Creo que seguimos sin entendernos...
Me explico:
Tabla CLIENTES. (3.000 registros)
Campos Nombre, Población, Fecha... y Cantidad€.
Tabla RECIBOS. (Vacia inicialmente)
Campos Nombre, Fecha, ... Cantidad€ y NRecibo.
Formulario condiciones (para filtrar los registros por fechas, bancos, etc.
con un botón que ejecuta la consulta.
Ejecuto una consulta de datos agregados origen CLIENTES destino RECIBOS.
Hay un autonumérico que es el NRecibo. Todo perfecto hasta que se equivocan
en el filtro, datos, etc.
Entonces, he de eliminar los agregados (todos los del final), compactar...
rollo patatero puesto que lo he de hacer yo, y no el usuario.
Gracias de nuevo Ramón
Eso estoy intentando, pero sin exito.
con un formulario es facil generar el consecutivo para cada registro nuevo,
pero no encuentro como hacerlo para la consulta...
Gracias, Jesús
"Valentín Playá" wrote:
> > > > >> el mensajenews:1A76D58B-B9D4-4174...@microsoft.com....
Otro problema es que no tengo idea de código, puedo "entender" lo que hará
el código escrito, pero no se como aplicarlo, es decir como aquél que "lo
entiendo pero no lo hablo".
es que no se puede hacer con una consulta lo que tu quieres. ¿Sabes
escribir código que abra dos recordsets para leer de uno y grabar en
otro?.
Saludos,
Valentín
*************************************************************************************
On 26 jun, 09:19, Jesús - DENIMATICA
<JessDENIMAT...@discussions.microsoft.com> wrote:
> Gracias Valentín
>
> Eso estoy intentando, pero sin exito.
>
> con un formulario es facil generar el consecutivo para cada registro nuevo,
> pero no encuentro como hacerlo para la consulta...
>
> Gracias, Jesús
>
>
>
> "Valentín Playá" wrote:
> > Jesús,
>
> > creo que lo que quieres no se puede hacer con una consulta.
>
> > En lugar de una consulta puedes hacer la copia de los datos de una
> > tabla a otra por código con dos recordsets, leyendo los datos de una
> > tabla y añadiéndolos en la otra generando el número consecutivo en el
> > código. Esto es más o menos lo que te están proponiendo.
>
> > En ocasiones parecidas yo he usado dos numeraciones una con un
> > autonumérico y en otra columna un número que, después de anexar los
> > datos, en otra consulta hago igual al autonumérico. La primera columna
> > con el autonumérico no se puede modificar a mano pero la segunda sí si
> > es necesario. De todas formas con esto habría que hacer algo para
> > reinicializar el autonumérico a 1 antes de cargar los datos.
>
> > Saludos,
>
> > Valentín Playá
> > Sonotronic S.A.
> > Madrid
> > ********************************************************************************************
> > > > > >> > Jesús- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -
No tengo ni idea, como le dije a Ramón, "...no tengo idea de código, puedo
"entender" lo que hará el código escrito, pero no se como aplicarlo, es decir
como aquél que "lo entiendo pero no lo hablo"..."
Jesús
"Valentín Playá" wrote:
> > > > actualizó antes de ejecutar la consulta y no se sabe hasta entonces....."
> > > > > > el mensajenews:D4AC0039-3B04-47D2...@microsoft.com....
"Jesús - DENIMATICA" <JessDEN...@discussions.microsoft.com> escribió en
el mensaje news:40EA9F02-25B4-40E1...@microsoft.com...