Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Consulta Entre Conexiones ADO (https://www.clubdelphi.com/foros/showthread.php?t=92126)

oscarac 03-08-2017 20:00:52

Consulta Entre Conexiones ADO
 
tengo 2 conexiones ADO

ADO1 = se conecta a una base de datos SQL (hay consultas)
ADO1 = se conecta a una tabla excel

lo que quiero hacer es eliminar informacion en una tabla asociada a ADO1 pero que no se encuentren en la lista de ADO2

se entiende?

algo asi

Código Delphi [-]
Delete from #Ventas where N_factura in (Select Documento From ado2.Tbl1)

ecfisa 03-08-2017 21:05:44

Hola

Creo que la consulta debería ser:
Código SQL [-]
DELETE FROM TABLA1 T1
WHERE NOT EXISTS (SELECT T2.REF_ID FROM TABLA2 T2 WHERE T2.REF_ID = T1.ID)

Saludos :)

Neftali [Germán.Estévez] 04-08-2017 10:32:25

Que yo sepa debes hacerlo de forma manual.
No es posible "montar" ni "ejecutar" una SQL que involucre 2 conexiones TADOConnection.

Sólo se me ocurre un recorrido secuencial, pero la viabilidad depende del número de registros que tengas.

antoineL 04-08-2017 11:35:31

Cita:

Empezado por oscarac (Mensaje 519956)
tengo 2 conexiones ADO

ADO1 = se conecta a una base de datos SQL (hay consultas)
ADO2 = se conecta a una tabla excel

lo que quiero hacer es eliminar informacion en una tabla asociada a ADO1 pero que no se encuentren en la lista de ADO2

Una conexión ADO es un acceso a un entorno. Las operaciones las ejecutan el proveedor de datos, que puede ser en otra máquina, conceptualmente es otro programa. Para hacer que este proveedor ejecute una operación, tiene que tener a mano los datos con las cuales opera. En tu caso, sería pedir a ADO1 hacer la operación, con acceso a los datos de la tabla Excel.

Solución 1: pasar los parámetros necesario al proveedor de datos que opera la tabla SQL para conectarse a la tabla Excel; poder arbitrariamente complejo, en cualquier caso no será muy sencillo de portar a otro SQL o otra versión de SQL o de Excel...

Solución 2: replicar en la base SQL en una nueva tabla los datos necesarias extraídas de la tabla Excel (una sencilla lista con las referencias de los datos en Excel), luego aplicar la operación en ADO1 contra estos datos entonces locales

Solución 2: hacer las operaciones manualmente una por una en ADO1, consultando a cada vez a ADO2.

APO 17-08-2017 11:52:36

Una tercera solución, podría ser importar los registros de la conexión ADO2 de excel, a una tabla temporal de la conexión ADO1. Entonces sí que podrías eliminar la información que quieras desde la misma conexión ADO1, pudiendo ser algo así:

Delete from #Ventas where N_factura in (Select Documento From Tabla_Temporal)

ElDioni 17-08-2017 17:34:33

No se si la primera tabla es de SQL Server o de que SQL, en caso de que sea la primera opción podrías vincular la hoja de calculo de excel dentro del mismo gestor de BBDD con lo que podrías seguir utilizando la tabla independientemente y los datos serían accesibles desde las consultas de SQL Server.


https://msdn.microsoft.com/es-es/lib...=sql.110).aspx

Saludos


La franja horaria es GMT +2. Ahora son las 20:24:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi