Campo numérico correlativo en consultas

Estimado Telemaco un placer saludarte!
Mi consulta esta vez es la siguiente,
como puedo hacer para que una consulta pueda tener un campo donde numere los registros empezando por el 0(cero)en el primer registro 1 en el que le sigue en forma correlativa todos los registros de la consulta se entiende, ¿no?.
Saludos - Gawry
Respuesta
1
A ver, dame una idea de porque necesitas enumerar, es decir, si no tienes un valor enumerado es complicadito, ya que la única manera seria llenando una tabla temporal (utilizando un insert), así recorreias las tabla o tabla con un for, y le asignarías a un campo el valor del for, ahora si llenas un formulario con una consulta podemos agregar un campo calculado, que sea igual al valor CurrentRecord del formulario...
Me avisas...
Att:telemaco
Mira la consulta esta compuesta por varias tablas de origen que están relacionadas lo que necesito que la consulta me numere a partir de 0 al 53 que es el total de registros que posee la consulta. Necesito enumerar porque cada numero representa años desde año 0 al 53 seria un período. Sino podes ampliarme el tema de for porque es una consulta con muchas tablas.
Y disculpa la demora en contestar...
Bueno, aver te digo como seria por medio de una tabla, a ver en el ejemplo que te daré tengo tres tablas, "Cargos", "Empeados" (estas dos serán la que arme la consulta para insertar en una tabla)... la tabla "Miconsulta", que sera la que contendrá la consulta con los valores correlativos o consecutivos... esta ultima tabla cntendra estos campos:
Posición: (es donde colocare el consecutivo)
Codcar
Cargo
Funci
Nomemp
(Osea serán 5 campos, los 4 últimos serán de la una consulta y el primero el consecutivo)
Bueno en el evnto click de un botón haremos todo, llamaremos MiBoton al botón...
**********************
Private sub MiBoton_Click()
dim RegConsulta as Object
sql = "SELECT CARGOS.CODCAR, CARGOS.CARGO, CARGOS.FUNCI, EMPLEADOS.NOMEMP
FROM CARGOS INNER JOIN EMPLEADOS ON CARGOS.CODCAR = EMPLEADOS.CODCAR;"
Set RegConsulta = currentdb.OpenRecordSet(SQL)
SQL = "DELETE * FROM MICONSULTA:" 'Debo borrar la tabla porque es temporal y
serivira para mostrar la consulta cada vez que la necesite
'Verificamos si hay registros
If RegConsulta.recordCount > 0 then
'si los hay los recorreré
RegConsulta.MoveLast
RegConsulta.MoveFirst
For i=0 to RegConsulta.recordCount - 1
SQL = "INSERT INTO MICONSULTA VALUES (" & I & "," & RegConsulta("CODCAR") & ",'" & RegConsulta("CARGO") & "','" & RegConsulta("FUNCI") & "','" & RegConsulta("NOMEMP") & "');"
CurrentDb.execute sql
Regconsulta.MoveNext
Next I
End If
end Sub
**************************
Bueno RegConsulta es un tipo Object (Objeto) que en realidad es un recordset (por como lo utilice)...
Sabes que los recordset me sirven para almacenar registros de una consulta, lo que primero que se hace es eliminar todos los datos de la tabla "temporal", Mi consulta... ya que esta tabla se llenara con los datos que necesito en el momento... debemos poblar el recordset con la consulta (Set RegConsulta = currentdb. OpenRecordSet(SQL))... hay que verificar si hay registros (If RegConsulta. recordCount > 0 )
Si es mayor a cero (osea hay registros) el recordcount, para poderlo recorrer, debo actualizar el total de registros (el problema de este recordset es que si la consulta me devuelve 20 registros y consulyo la propiedad recordcount, siempre me dirá 1, por eso debo recorrerla (RegConsulta. MoveLast y luego RegConsulta. MoveFirst) al ir al ultimo y luego al primer registro, hay se la propiedad recordcount queda actualizada)...
Ahora hago un for donde recorre de 0 (porque me comentas que se debe enumerar de cero) hasta el total de registros menos 1 (RegConsultas:RecordCount - 1)
Ahora en el for haré la consulta de inserción, donde insertare el consecutivo (que en este caso sera la variable i del for, ya que esta ira desde cero hasta el total de registros -1), y ademas insertare los campos necesarios que me devuelve el recordset...
Bueno, no se si ya conocías este tipo de programación, o de pronto te complique...
Si te parece, me puedes enviar una bd, donde tenga las tablas que necesitamos, y yo te ayudo a crear la tabla, y la función que te permita hacer lo que te mencione a:
[email protected]
Att:telemaco
Voy a probar tu ejemplo y te digo.
En este link http://accessvbafaq.mvps.org/item.asp?pagina=67 vi algo de lo que quiero hacer lo probé y funcionó ese ejemplo pero la diferencia es que yo tengo varias tablas que forman mi consulta y se pierde la correlatividad porque tengo el campo años ordenado en ascendente y al hacer lo de ese link se pierde el orden de los años.me fijo tu ejemplo y te cuento-gracias y saludos
Voy a mirar también la página que me dices... y a ver si te la adapto...
Aunque a veces mi idea de utilizar tablas temporales, es para cuando una consulta sea pesada, o no de los resultados esperados la utilizo.
Att:telemaco
Si quieres hagamos algo, mandame las tablas y como deseas ver la consulta (osea que campos irían y su orden en la consulta) a:
[email protected]
Y te devuelvo con el ejercicio devuelto.
Att:telemaco
Hola, Telemaco
EStoy probando tu ejemplo pero tengo algunas dudas:
Creé las tres tablas que mencionás, en las tablas cargos, ¿empleados y mi consulta que otros campos debería crear en las tablas cargos y empleados?
¿Solo con las tres tablas funciona tu ejemplo?
¿El botón con el código lo hice a través de un formulario que depende de la tabla Mi consulta pero cuando hago click no pasa nada o debe ser independiente?
No se si soy claro.
¿Serian con las tres tablas y el formulario? Esas serían mis dudas un saludo!
Ok, voy a prepararla y te lo envío saludos
Listo... lo espero
Te envíe el archivo de vuelta me avisas si te llego... pues no confío en Hotmail... a veces no me llegan los archivos, o hay error al tratar de abrirlos.
Att:telemaco

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas