PDA

Ver la Versión Completa : Busqueda de datos en dos bases distintas


jafera
13-08-2011, 11:47:53
Hola a todos.

Uso FB 1.5 y D6

A ver si me explico bien con el problema que tengo:

Tengo dos datamodules en la aplicacion, uno con los datos de la base general y otro con las fotos, imagenes, etc. (lo hice así por un tema de peso)

Pues bien necesitaría armar una consulta mas o menos así:


SELECT * FROM DATAMODULE1.TABLE1
WHERE ID NOT IN (SELECT ID FROM DATAMODULE2.TABLA1)


para que me devuelva todos los registro de datamodule1.tabla1 que no tengan foto en datamodule2.tabla1

Gracias

Josep

guillotmarc
14-08-2011, 11:36:24
Hola Josep.

No se puede.

Tienes que actualizarte a Firebird 2.5, con esa versión sí que se puede realizar algo de este estilo (los EXECUTE STATEMENT se pueden desviar a distintas bases de datos).

Con Firebird 1.5 no tienes más remedio que hacer el cálculo en Delphi, recorriendo todos los registros de Tabla1 y consultando si tienen Foto en Tabla2 (con un Locate, o bien lanzando una segunda consulta).

Salut xiquet.

jafera
14-08-2011, 13:08:47
Gracias por la respuesta.

De momento no puedo actualizar a FB 2.5 ya que la base de datos de la gestión de la empresa rula con esta versión y el cambio a 2.5 es muy a la
largaaaaaaa.

Si quiero hacer lo que me dices de recorrer los registros, supongo que debo crear una nueva tabla en base1 con los datos básicos de base2.tabla1 que quiero controlar.

Es correcto?

Si es así debo actualizar base1.tabla1 cada vez que añada una foto en base2.tabla1?

Saludos

Josep

guillotmarc
15-08-2011, 10:09:04
Hola Josep.

Puedes hacerlo así, pero yo en realidad me refería a lanzar dos consultas desde Delphi, atacando a las dos tablas en las dos bases de datos.

Entonces solo tienes que recorrer todos los registros en la primera consulta, y mirar si existen en la segunda consulta (por ejemplo con un .Locate).

Salut

jafera
16-08-2011, 11:44:53
Gracies Marc.

No acabo de verlo claro.

Si yo hago


Select Distinct CODI_C from BOM0001F


me devuelve los registros que tengo en la tabla de los camiones con foto, correcto. Esto esta en la base de datos 1.

Si despues quiero hacer un


Select * from BOM0001
Where ID not in //CODI_C de la tabla anterior


Esto está en la base de datos 2

no se como hacerlo ya que si hago un locate como me comentas me devolverá un solo registro y yo lo que quiero (bueno, pretendo:confused::confused:) es sacar un listado.

Igual es que pretendo hacer algo que no se puede o mi conocimiento sql no da para más.

Saludos

Josep

guillotmarc
17-08-2011, 01:10:11
Hola Josep.



no se como hacerlo ya que si hago un locate como me comentas me devolverá un solo registro y yo lo que quiero (bueno, pretendo:confused::confused:) es sacar un listado.


En efecto, esto solo te devuelve un registro, indicando si ese camión tiene foto o no tiene foto. Por eso tienes que hacer un bucle comprobando todos los camiones (aunque probablemente deberías hacerlo al revés, primero consultas la tabla BOM0001, y mediante un bucle, para cada uno de sus registros compruebas con un Locate si existe su equivalente en BOM0001F, es decir, si ese camión tiene foto o no tiene foto).

Si al final quieres sacar un listado de los camiones que no tienen foto, entonces para hacerlo muy sencillo, te recomiendo que añadas un campo TE_FOTO en la tabla de camiones, y cuando hagas el recorrido comprobando cada camión, si tiene foto o no tiene foto, en ese momento le actualizas su campo TE_FOTO.

Una vez calculado correctamente ese campo para todos los camiones, entonces ya puedes sacar sin problemas un listados de solo los camiones sin foto.

Salut.

jafera
17-08-2011, 15:20:48
Gracias Marc.

Tal y como me sugieres al final he puesto un campo foto (S o N) en la tabla de camiones, actualizando este campo a S cada vez que añado una foto y a N si es que la borro y no tengo más que una foto, en caso de que tenga más de una y borre una sola no le digo que marque a N.

Saludos "agostiniano-calurosos"

Josep