![]() |
Sentencia SQL simultanea en dos tablas
Buenas chicos,
La siquiente pregunta esta relacionada con SQl en Delphi XE2. La base de datos con la que trabajo es de ACCES, con TADO. Tengo la siguiente consulta que funciona a la perfección:
Ahora querría que la consulta se hiciera de forma simultánea en dos tablas, la tabla Entradas_Salidas_ECS y la tabla Entradas_Salidas_BEA, (ambas tablas tienen la misma estructura). He probado algo así:
Pero no funciona, al ejecutar la sentencia me salta el siguiente error: "Objeto Parameter mal definido. Se proporcionó información incompleta o incoherente". Buscando por el foro he visto los comandos JOIN ON, LEFT JOIN pero me salta el mismo error. Tenéis idea de como debería ser la estructura correcta de la sentencia para que el SQL me devolviera los resultados encontrados en ambas tablas? Muchas Gracias! |
Si no sabes que es un JOIN deberias darte un estudio sobre SQL. SQL es un lenguaje realmente muy simple, aunque tiene unas cuantas cosas un poco raras (como el orden estricto de los operadores). Con unas pocas horas de estudio y analisis podras operar de forma eficiente por años.
El error es sobre un parametro mal especificado. Tendras que mirar uno a uno cual es. Ademas: condicion1, condicion2 son malos nombres para los parametros. Usa nombres descriptivos. Y es mejor que primero hagas pruebas de los SQL de forma directa en el motor y luego los pases a Delphi. |
Como te dice Mario, El error está en los parámetros.
Al asignar el valor de cada uno de ellos, Determina el tipo de dato para evitar errores.
Y de igual manera, dale una leída a las bases de SQL porque si quieres hacer la consulta en esas dos tablas, necesitas o hacer un join o una union |
Muchas gracias por los comentarios.
Dudo que los parametros esten mal definidos, cuando solo hago mencion a una tabla funciona a las mil maravillas, a la que meto la segunda tabla es cuando da error. Creo que delphi interpreta a la segunda tabla como si fuera un parametro sin definir... A ver que en ecuentro en las bases de sql |
Esa consulta va a traer muchos resultados, específicamente N*M si N es el número de registros en una tabla y M el número de registros en la otra tabla y juraría que eso no es lo que quieres. Ya movorack lo apuntó: necesitas hacer un UNION, no un JOIN.
Toma en cuenta además que, aún suponiendo que lo que quieres es ese JOIN, la consulta va a fallar porque al tener la misma estructura ambas tablas, las columnas -supongo- se llaman igual y el motor debe generar un error de ambigüedad al referirte a las columnas sin anteponer el nombre de la tabla. LineComment Saludos |
Si entendi bien lo que quieres hacer la sentencia se debiera ver algo como (con sample data, claramente):
Pero claramente si las dos tablas son tan similares hay un error de diseno... La solucion real seria fusionar las dos tablas y agregar un campo de 'Tipo de Movimiento' que haga referencia a una nueva tabla donde almacenas ECS, BEA... (para seguir con el ejemplo). Saludos. |
De acuerdo con todos.
Primero:parece que estas haciendo una consulta cuyo resultado no es el que esperas, y Segundo: estas ASUMIENDO y JUZGANDO que el error es en la forma como delphi interpreta la consulta, cuando el error es claro, es de parámetros. Primero, la consulta que estas haciendo es un inner Join impliscito
el cual requiere que definas un criterio por el cual las tablas harán Join
Por otro lado, parece evidente que tus tablas tienen nombres similares de campos, por lo que es necesario que te apoyes con alias para evitar errores de ambiguedades:
Eso a grosso modo, Segundo, cuando defines un parametro dentro de una cadena de texto (Select * from Tabla where Campo =:Parametro), el compilador intentará determinar el tipo de campo que le estas pasando al momento de la asignación del valor del parametro, Asi si dices:
El compilador intentará convertir el valor asignado al valor que considera.. en el caso anterior será a texto, y no a hora. Por eso es mejor forzar el cast como te indicó movorak en su post. Normalmente son los campos de fecha y hora los que presentan mas problemas debido a los diversos formatos que éstos pueden aceptar. intenta hacer una prueba de tu SQL, aislando parametros, algo asi:
Asi, vas probando de uno en uno o de dos en dos, para verificar que cada parametro esta siendo bien interpretado... bye |
La franja horaria es GMT +2. Ahora son las 09:06:07. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi