Consultas anidadas a BBDD externas


([N2] pnogueira) #1

Muy buenas.

He intentado realizar una consulta anidada a una BBDD externa, usando tanto lenguaje velneo como la clase VSqlDatabase de JavaScript, y en ninguno de los casos he logrado que me funcione. Lo que estoy intentando hacer concretamente es importar unos albaranes de otra aplicación, por lo que ejecuto un select sobre la tabla de cabeceras de albarán correspondiente, y dentro del proceso de recorrer los registros, lo que quiero es por cada albarán que encuentre ejecutar otro select que me lea las líneas de dicho albarán de otra tabla, pero por lo que parece ninguno de los dos lenguajes soporta el ejecutar una consulta SQL dentro de otra.

¿Alguien me podría ilustrar un poco más al respecto?

Gracias por adelantado.


([N3] pacosatu) #2

Hola pnogueira.

No veo por qué debe haber problemas al ejecutar consultas ODBC anidadas si usas diferente manejador en el comando BD: Crear manejador …
De todas formas no creo que esa sea la manera más efectiva de realizar la consulta a una BBDD externa.

Si por cada cabecera de Albarán haces una consulta ODBC nueva, el proceso va a ser lento.

Yo haría una única consulta SQL trayendo todas las cabeceras con sus líneas y procesas todo de conjuntamente.

Saludos
Paco Satué


([N2] pnogueira) #3

Hola Paco.

Muchas gracias por tu respuesta.
La verdad es que no probé a crear dos manejadores con lenguaje velneo, pero sí probé en JavaScript con dos objetos VSqlDatabase y al hacer un open y un executeSQL del segundo el comportamiento es como si “sobreescribiera” el resultado del primer select y no sigue recorriendo los registros de los albaranes.

Sí que pensé en hacer una única consulta con un join de ambas tablas pero no se por qué se me metió en la cabeza que hacer eso con ODBC (no tengo mucha experiencia con él) sería mucho más lento tratándose de tablas DBF.

Probaré lo que tu dices de crear dos manejadores además de con la consulta única y usaré el que rinda mejor de los dos.

Gracias de nuevo y un saludo,
Pablo Nogueira


([N4] ccuesta) #4

Hola pnogueira,
a mí me ha pasado lo mismo, es como si la segunda consulta que lanzaras en el mismo proceso de la primera no reconociera que es otra diferente.

Opté por la solución de Paco: Una gran consulta SQL con todos los datos que necesito y, en algunos casos, con llamadas SQL posteriores en otros procesos para que no hubiera conflictos de bloqueos.


([N2] pnogueira) #5

Hola ccuesta.

Gracias por la información. :slight_smile:

Al final también opté por la solución de Paco. Como se trata de una importación que se va a ejecutar una sola vez no veo tan necesario el andar realizando pruebas de rendimiento.

Un saludo,
Pablo Nogueira


([N3] pacosatu) #6

Hola Pablo.

Me alegro que lo hayas resuelto de esa manera. Ya sabes, lo importante es ser productivo.

Gracias por comentar la solución adoptada y dejar el hilo bien rematado.
Que cunda el ejemplo.

Saludos
Paco Satué