Tablas vinculadas con vODBC


([N4] ccuesta) #1

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.

¿Alguien sabe como vincular dos tablas con vODBC?

Gracias de antemano.


([N3] pacosatu) #2

Hola ccuesta.

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

Pruébalo.
Saludos
Paco Satué


([N4] ccuesta) #3

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.


([N3] pacosatu) #4

Hola ccuesta.

Me “chirría” mucho esa sentencia SQL.
Ahora no puedo probar el componente vODBC.

Consulta a soporte ya que una cosa tan sencilla tiene que tener una mejor solución.

Saludos
Paco Satué


([N4] ccuesta) #5

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


([N4] Infortic) #6

Puf, nunca he usado el vODBC, sabiendo esto la verdad que limita mucho mucho su uso.

Doy por supuesto que tampoco funciona JOIN no?


([N4] ccuesta) #7

No, “join” tampoco funciona


([N3] pacosatu) #8

Hola ccuesta.

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.

Saludos
Paco Satué


([N4] gontorre) #9

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.

Un saludo

Gonzalo Torre


([N4] ccuesta) #10

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.

En cualquier caso, gracias por la ayuda.
Carlos