Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Campo numérico correlativo en una consulta

4,862 views
Skip to first unread message

Jesús - DENIMATICA

unread,
Jun 24, 2008, 3:26:00 AM6/24/08
to
Buenas

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

Ramon

unread,
Jun 24, 2008, 4:29:53 AM6/24/08
to
Hola Jesus

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...

Ramon

unread,
Jun 24, 2008, 4:47:30 AM6/24/08
to
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" <JessDEN...@discussions.microsoft.com> escribió en
el mensaje news:1A76D58B-B9D4-4174...@microsoft.com...

Jesús - DENIMATICA

unread,
Jun 24, 2008, 4:49:00 AM6/24/08
to
Gracias Ramón, pero no es exactamente lo que necesito. Ya lo había visto,
pero creo que no es lo que busco (o al menos no se como adaptarlo...).

Gracias de nuevo Ramón

Jesús

Jesús - DENIMATICA

unread,
Jun 24, 2008, 4:57:02 AM6/24/08
to
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

unread,
Jun 24, 2008, 5:29:17 AM6/24/08
to
Hola Jesus
Te pongo un ejemplo
En el evento despues de actualizar de un cuadro combinado del que extraigo
un nombre de cliente y un valor de factura
La tabla en la que inserto el registro la llamo Facturas
El campo donde inserto el numero de factura es "IdFactura"

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...

Jesús - DENIMATICA

unread,
Jun 24, 2008, 6:47:01 AM6/24/08
to
Gracias Ramón

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

Ramon

unread,
Jun 24, 2008, 4:58:33 PM6/24/08
to
Hola Jesus
No acabo de entender eso de que tiene que ser desde una consulta, desde un
formulario puedes lanzar una consulta , de echo eso es lo que hace el
ejemplo que te mande, si explicaras mejor tu problema y expusieras el codigo
que estas usando y/o la consulta , quizas podriamos ayudarte mejor

Saludos
Ramon

"Jesús - DENIMATICA" <JessDEN...@discussions.microsoft.com> escribió en

el mensaje news:92377612-E211-4E63...@microsoft.com...

Ramon

unread,
Jun 24, 2008, 4:49:46 PM6/24/08
to
Hola Jesus
No acabo de entender eso de que tiene que ser desde una consulta, desde un
formulario puedes lanzar una consulta , de echo eso es lo que hace el
ejemplo que te mande, si explicaras mejor tu problema y expusieras el codigo
que estas usando y/o la consulta , quizas podriamos ayudarte mejor

Saludos
Ramon

"Jesús - DENIMATICA" <JessDEN...@discussions.microsoft.com> escribió en

el mensaje news:92377612-E211-4E63...@microsoft.com...

Jesús - DENIMATICA

unread,
Jun 25, 2008, 2:07:00 AM6/25/08
to
Gracias de nuevo Ramón

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...."

Ramon

unread,
Jun 25, 2008, 9:55:22 AM6/25/08
to
Hola Jesus
Pues es lo que te decia dos mensajes antes , el autonumerico lo generas tu, averiguando antes de lanzar la consulta , el numero nuevo que has de poner
Solo tienes que adaptar el ejemplo que te mande , a tu caso particular
 
Private Sub Cuadro_combinado38_AfterUpdate()                   ' este podria ser el procedimiento de tu boton
Dim NumeroFactura As Double                               
             ' declaras la variables
Dim NombreCliente As String
Dim ValorFactura As Double
NombreCliente = Cuadro_combinado38.Column(1)                ' aqui se extraen valores de un cuadro combinado que a su vez esta vinculado a una tabla
ValorFactura = Cuadro_combinado38.Column(2)                   ' de donde extraemos datos a incluir en la tabla que vamos creando
NumeroFactura = Nz(DMax("IdFactura", "Facturas"), 0) + 1  
' aqui se averigua el numero que hemos de poner en el autonumerico
                                                                                         ' Ahora lanzamos la consulta

 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:BF7219BD-9ED1-41C5...@microsoft.com...

Valentín Playá

unread,
Jun 25, 2008, 8:40:01 PM6/25/08
to
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
********************************************************************************************
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...

Jesús - DENIMATICA

unread,
Jun 26, 2008, 3:16:03 AM6/26/08
to
Gracias Ramón

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

Jesús - DENIMATICA

unread,
Jun 26, 2008, 3:19:01 AM6/26/08
to
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:

> > > > >> el mensajenews:1A76D58B-B9D4-4174...@microsoft.com....

Jesús - DENIMATICA

unread,
Jun 26, 2008, 3:24:00 AM6/26/08
to
Ramón

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".

Valentín Playá

unread,
Jun 26, 2008, 10:31:02 AM6/26/08
to
Jesús,

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 -

Jesús - DENIMATICA

unread,
Jun 26, 2008, 11:53:01 AM6/26/08
to
Gracias Valentín

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....

Ramon

unread,
Jun 26, 2008, 2:46:42 PM6/26/08
to
Hola Jesus
Si cuelgas o me mandas un ejemplo con lo que utilizas ahora, te lo retorno
con lo que necesitas
Saludos
Ramon

"Jesús - DENIMATICA" <JessDEN...@discussions.microsoft.com> escribió en
el mensaje news:40EA9F02-25B4-40E1...@microsoft.com...

0 new messages