Copiar una columna en otra de una consulta access

Te comento:
Tengo una función con la que numero cada registro de una consulta del 1 al ultimo. El problema es que en la vista hoja de datos de la consulta si me paso de registros y muevo la barra de desplazamiento se actualiza la numeración (no se porque) y el primer registro ya no es el numero 1, sino que es otro numero distinto. Se me ha ocurrido que si al principio paso los resultados a otra columna ya no se modificara, o ¿hay alguna manera de hacer que una vez realizada la consulta se mantenga la columna fija y no cambie, aunque yo mueva la barra de desplazamiento?
Respuesta
1
Para numerar registros de una consulta utilizamos la función en un nuevo módulo:
'------------------------------------------
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
'------------------------------------------
Si hacemos la siguiente consulta SQL:
"SELECT numerarSQL([Dato]) AS RegNum, * FROM Tabla" nos dará la numeración, pero al ir cambiando de registro o mover la barra de desplazamiento irá cambiando los datos de numeración ya que la variable nOrden es de tipo STATIC. Para que ello no ocurra debemos decirle que comience a numerar desde el 1 con el siguiente "SELECT numerarSQL(Null), * FROM Tabla WHERE 1=0".
Pero como no queremos dos consultas por separado, las unimos en una sola mediante la palabra reservada UNION ALL como la siguiente:
"SELECT numerarSQL([Dato]) AS RegNum, * FROM Tabla
UNION ALL
SELECT numerarSQL(Null), * FROM Tabla WHERE 1=0"
Con la misma, ya no tendrás otras numeraciones al cambiar de registros y menos al desplazar tu barra.
Espero haberte ayudado,
Saludos,
Mayor información en:
http://accessvbafaq.mvps.org/item.asp?pagina=67
Hola Diego, gracias por tu ayuda, ya he creado el modulo, pero te pediría una aclaración.
Ya que tengo que modificar muchas consultas, si no te importa te escribo una consulta SQL concreta que tengo y tu me la modificas, según lo hagas tu en las demás ya lo hago yo.
SELECT Datos.[Nivel 1], Datos.[Nivel 2], Datos.[Nivel 3], Datos.Cliente, [nombre dato].[Dato 1], Datos.[Dato 1], [nombre dato].[Dato 2], Datos.[Dato 2], Datos.Espesor, Datos.[Masa superficial], Datos.[Fecha ensayo], Datos.[Ref ensayo], Datos.[Descrip Sistema], Datos.[Tablas/graficas], Datos.[Cerram Portador], Datos.[Info Montaje], Datos.Croquis, Datos.Otros, Datos.Tabla, Datos.Clasif
FROM [nombre dato] INNER JOIN Datos ON [nombre dato].[Nivel 1] = Datos.[Nivel 1]
WHERE (((Datos.Cliente) Like [Formularios]![Formulario AUDIOTEC]![Cuadro combinado92] & "*"));
La tabla principal es la tabla Datos.
Lo siguiente, copia y pega en tu editor SQL.
SELECT numerarSQL(Datos.Nivel1) As Registro, Datos.[Nivel 1], Datos.[Nivel 2], Datos.[Nivel 3], Datos.Cliente, [nombre dato].[Dato 1], Datos.[Dato 1], [nombre dato].[Dato 2], Datos.[Dato 2], Datos.Espesor, Datos.[Masa superficial], Datos.[Fecha ensayo], Datos.[Ref ensayo], Datos.[Descrip Sistema], Datos.[Tablas/graficas], Datos.[Cerram Portador], Datos.[Info Montaje], Datos.Croquis, Datos.Otros, Datos.Tabla, Datos.Clasif
FROM [nombre dato] INNER JOIN Datos ON [nombre dato]. [Nivel 1] = Datos.[Nivel 1]
UNION ALL SELECT numerarSQL(Null), * FROM [nombre dato] INNER JOIN Datos ON [nombre dato]. [Nivel 1] = Datos.[Nivel 1]
WHERE (((Datos.Cliente) Like [Formularios]![Formulario AUDIOTEC]![Cuadro combinado92] & "*")) AND 1=0;
Ejecuta y prueba el conteo de registros.
Salugos
Siento volverte a molestar, pero sigue dándome error:
"El numero de columnas de las 2 tablas o consultas seleccionadas para una consulta de union no coincide"
Si necesitas cualquier cosa sobre el diseño de las tablas o lo que sea preguntame
Gracias y disculpa ser tan pesado, pero lo necesito de verdad
Enviame tu bd con las tablas que utilizas en tu consulta y tu consulta. Solo con ellos, voy a introducirlo y te envío nuevamente. Mi correo es [email protected]
Agradezco tu interés, pero no pudo mandártela porque ocupa 1200 megas, seguiré probando con lo que me has puesto hasta que solucione el problema. Muchas gracias.
Ok, una recomendación, al hacer UNION ALL, debes tener la misma cantidad de tablas y columnas en ambas. Podrías primero generar tu consulta sin el conteo de registros (así sencillo como lo tenías a la cual llamaremos 'ConsultaBase'), luego crea otra consulta en base a esa primera haciendo el siguiente:
"SELECT numerarSQL([Campo]) AS Registro, * FROM ConsultaBase
UNION ALL
SELECT numerarSQL(Null), * FROM ConsultaBase WHERE 1=0"
Muy probablemente ya te funcione.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas