Y nuevamente quiero ver si me puedes ayudar con una duda; tengo una base de datos que acabo de implantar en mi trabajo, anteriormente ya había otra pero en clipper, para lo cual se generaba un .bdf... (desde 2000 al 2002), lo que quiero es generar un reporte con datos específicos para cada una de las tablas, ya intente copiar datos a una sola tabla, pero resulta que uno de los campos no puede tener datos duplicados es algo así como un numero de oficio que no puede estar repetido en el mismo año, más sin embargo como son tres años, este se reinicia para cada año... (hasta yo ya me hice bolas.. Je je).
Estoy encantado de poderte ayudar, pero siéndote sincero no entiendo muy bien el funcionamiento que intentas plantearme... Por favor, intenta aclararme un poco más cómo es este proceso y cual es el problema, ya que no se muy bien como puedo enfocar mi ayuda.
Ok Oscar te explico, tengo 2 tablas "2001" y "2002" las 2 contienen exactamente las mismas variables, acabo de crear otra que la llame "2003" la cual contiene también las mismas variables, la razón por la que se creaban las tablas para cada año es por que existe una variable ("BOLETA" tipo numérico) que cuando comienza un nuevo año esta debe reiniciarse, y esto generaba datos duplicados, lo cual no puede ser ya que es llave primaria y no se pueden repetir los datos. Lo que hice para el 2003 (la que acabo de implantar) el campo BOLETA tiene una diagonal con las ultimas 2 cifras del año que vaya a capturar ej. Si el numero de BOLETA que sigue en el año 2003 es el 234, el usuario deberá capturar 234/03, esto me va a permitir capturar y reiniciar números de boleta para cada año sin ningún problema, hasta aquí bien, ahora lo que necesito es traerme la información del 2001 y 2002 para consultas y reportes (algo así como un histórico), siendo que la información que contiene el campo BOLETA de los años anteriores es diferente a la del 2003 y no puedo copiar los datos anteriores (2001,2002) para después pegarlos en la nueva tabla 2003 De hecho ya trate con hacer un vinculo para cada tabla (2001, 2002) y al momento de crear una consulta me envía un error, ya que no puedo juntar la información de estas 2 tablas, y la razón por la que quiero juntarlas es por que quiero realizar reportes que me arroje datos de las 3 tablas (2001, 2002 y 2003) ej. En un campo NOMBRE escribo un nombre a buscar para que después me arroje un reporte con toda la información de esa persona en los 3 años. No se si con esto que te acabo de explicar amplíe más mi situación y tengas alguna solución a esto, bueno agradezco muchísimo tu atención, tu ayuda y tu tiempo sobre todo, ojala y me puedas ayudar y si no, no importa seguiré tratando hasta dar con la solución.
Ahora ya si que me he centrado... ;-) Lo primero, indicarte que el problema que estas teniendo, aparentemente, es debido a un error inicial de concepto; te explico: - Tienes 3 tablas con los mismos campos y misma estructura. - Tienes un campo en cada una, "boleta", cuyo dato en un mismo año jamás se repite. - Por otro lado ese mismo dato, "boleta", si puede repetirse en dos años diferentes (puede existir la boleta nº 1 para el año 2001, también para el 2002 e incluso para el 2003). - Teniendo todo eso en cuenta, tu campo clave no es unicamente "boleta", sino que tus campos clave son "boleta" y "año", ya que esos dos campos en conjunto si que jamás aparecerán con el mismo valor en más de 1 registro. Por ello, y salvo que el campo boleta lo tengas definido en las tablas como Autonumérico, lo más correcto seria el haber diseñado una única tabla de estructura de campos igual a una de las tablas que tienes, definir como campos clave principal "BOLETA" y "AÑO" e introducir en ella todos los datos de 2001, 2002 y 2003. En el caso de que el campo "Boleta" sea autonumérico, la cosa cambia, ya que esta opción no sería la más recomendable ya que no podrías reiniciar el numero de "Boleta" de año a año. Por otro lado, y utilizando todo tal y como lo tienes hasta ahora, con tres tablas, puedes hacer una consulta de union: - Nueva Consulta (Vista Diseño) - Cancelas la ventana que te muestra las tablas, consultas, etc., a utilizar. - En el menu Ver selecciona Vista SQL. - Introduce: (SELECT * FROM 2001) UNION (SELECT * FROM 2002) UNION (SELECT * FROM 2003) - Grabala y ejecutala. Ahora tienes una consulta con todos los datos de las tres tablas anteriores con la que poder trabajar en posteriores consultas, informes, etc... Espero que estas dos opciones solucionen tu problema. Si tienes alguna duda o consulta no dudes en contactarme de nuevo.
Oscar; Te agradezco infinitamente tu colaboración, ya que me ha sido de gran utilidad, solo quiero hacerte una ultima consulta... la segunda opción me resulto a la perfección, solo que la consulta se ejecuta muy lenta ya que son casi 100,000 registros, a pesar de que esta indexado el campo BOLETA, no se si tendrás alguna otra solución para que se ejecute más rapido la consulta... te agradezco de antemano y estamos en contacto. Saludos!
Me alegro de que te haya podido ser de ayuda. Respecto a tu nueva consulta, darte una mala noticia: No es posible, tal y como has definido las tablas (la 2ª opción) hacerlo más rapido. El motivo es muy sencillo: Al tener por tablas diferentes con datos independientes (al estar en diferentes tablas) y querer trabajar con todos ellos a la vez, debe existir un momento en el que trates esos datos en conjunto; es decir, los unas. Al realizar la union, la hagas como la hagas (la que te he propuesto con una sentencia SQL de union es la más efectiva y recomendada) el motor de Access tardará el tiempo que necesite (cuantos más registros, más tiempos) para unir todos los datos y dejarte operar con ellos. De ahí la tardanza. Si en lugar de esto utilizaras la opción 1 (la de 1 sola tabla con 2 campos clave principales, debería tardarte muchísimo menos, ya que el motor no tiene que hacer uniones de ningún tipo y ademas aquí si tendría en cuenta el uso de los campos clave (aunque eso te serviría para buscar más rapido un dato o ordenar éstos). Siento no poderte dar otra respuesta, pero así es... Lo dicho, me alegro de haberte podido ser un poquito de ayuda. Si te surge alguna duda o problema no dudes en contactarme.