Hola, estoy intentando hacer un gestor de consultas que permita a mis usuarios acceder a información de la base de datos seleccionando ellos mismos lo que necesiten. Ya he desarrollado alguna herramienta de este tipo antes en otros entornos basándome en sentencias sql donde parametrizando la vinculación entre tablas se hace fácil para el usuario llegar a lo que necesita.
En V7 veo que hay posibilidad de acceso por ODBC pero me encuntro con la dificultad de enlazar tablas. He probado que esta opción funciona:
select facturas_emitidas.ID as “di” ,descripcion, facturas_emitidas_lin.id as “dilin”, precio
from facturas_emitidas, facturas_emitidas_lin
where facturas_emitidas.num_factura=‘VN1057’ and facturas_emitidas_lin.facturas_emitidas=59
Pero no funciona si en lugar del 59 (Que es el ID de facturas_emitidas) pongo “facturas_emitidas.ID” que es como debería ser para no tener que poner un literal.
Según la escueta ayuda de vODBC, la cláusula WHERE es usada para especificar los criterios de selección basados en una condición de búsqueda. Por lo tanto no sirve para establecer relaciones entre tablas como en SQL estandar.
Seguramente no es necesario indicar las relaciones entre tablas porque en Velneo ya están especificadas de forma permanente en el proyecto de datos.
En tu caso, la relación facturas_emitidas_lin.facturas_emitidas = facturas_emitidas.ID es implícita cuando pones:
FROM facturas_emitidas, facturas_emitidas_lin
Gracias por la respuesta Paco, pero no funciona. Aunque velneo “conoce” la vinculación de las tablas y sería muy sencillo implementarlo a la hora de hacer consultas, lo he probado y no funciona.
Si no especificas los límites en la parte “where” de las dos tablas, lo que hace es devolver todos los registros de la segunda tabla para cada uno de la primera, sin tener en cuenta vinculación alguna.
De todas formas investigando un poco más he visto que puede hacerse mediante una subconsulta:
select facturas_emitidas.ID as di ,descripcion, facturas_emitidas_lin.id as dilin, precio
from facturas_emitidas, facturas_emitidas_lin
where “facturas_emitidas”.“num_factura”=‘VN1057’
and “facturas_emitidas_lin”.“facturas_emitidas” = (select ID from facturas_emitidas where “facturas_emitidas”.“num_factura”=‘VN1057’)
No es muy elegante pero creo que me valdrá.
Lo dicho, gracias por la inspiración.
Sí, a mi tampoco me resulta muy elegante pero esto es lo que me respondieron en soporte:
“El problema es la cláusula where, ésta solamente puede ser usada en consultas sencillas, con una única tabla, pero no con una consulta con más tablas. En este segundo caso sería necesario hacer la consulta sin el where y extraer, de la lista obtenida, el registro deseado”
He hecho alguna prueba con vODBC.
Usando Velneo como cliente ODBC, imposible hacer nada, el vClient se cierra constantemente.
Usando otra herramienta, efectívamente he comprobado que el JOIN entre 2 tablas se respeta cuando el orden de las tablas es plural,maestro en la cláusula FROM.
Así tu consulta SQL quedaría:
SELECT facturas_emitidas.ID as di, descripcion, facturas_emitidas_lin.id as dilin, precio
FROM facturas_emitidas_lin, facturas_emitidas
WHERE facturas_emitidas_lin.facturas_emitidas = (SELECT ID FROM facturas_emitidas WHERE num_factura = ‘VN1057’)
Lo que no me funciona es poner una condición para la tabla facturas_emitidas, por eso no se puede usar:
WHERE facturas_emitidas.num_factura = ‘VN1057’
De todas formas el vODBC está muy verde, es un estado de Beta permanente. Por lo tanto no es fiable para producción.
De momento es una herramineta muy básica.
Yo estuve haciendo pruebas hace tiempo con Crystal reports utilizando el ODBC de Velneo y cada vez que intentaba hacer una consulta que utilizara más de una tabla el Crystal reports rompía.
Es una pena porque según la documentación debería ser muy potente y abriría el mundo velneo a toda clase de herramientas. En fin esperemos que se lo “curren” y termine de estar en esa eterna versión beta.