![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Hay algo que yo no entiendo todavia, o evidentemente no lo aprendi.
Segun lo que estuve haciendo, para conectarme a una base firebird (lo puse al final de todo que la estoy usando) lo que hago es poner en delphi 3 componentes, un IBdatabase con los datos de la base, un IBquery linkeado a esa base y un DataSource linkeado al ibquery. Cuando quiero hacer una consulta, hago IBQuery1.SQL := 'select blablablablablabla'; para ver los resultados pongo un DBGrid linkeado al datasource. Yo en ese query no puedo hacer referencia a dos bases diferentes, porque ese query esta linkeado a una sola base; al igual que el DBgrid no puedo linkearlo a mas de un datasource. |
|
#2
|
||||
|
||||
|
Cita:
pero lo que estoy proponiendo es hacer la referencias a las dos bases de datos en la consulta SQL , tal cual como te he puesto en el ejemplo .Tan solo reemplaza MyBaseName1,MyBaseName2,Table1,Table2,por los nombres de tus Bases de Datos y Tablas respectivamente.Al menos probalo...y luego nos comentas. .
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7 |
|
#3
|
||||
|
||||
|
Si es Firebird lamentablemente ese tipo de consulta no funcionará, a menos que las tablas pertenezcan a una misma base de datos.
En Firebird, hasta el momento, no se pueden realizar consultar entre dos o más bases de datos. Se espera que para la versión 2.5 o 3 se añada dicha característica. Saludos, |
|
#4
|
||||
|
||||
|
Cita:
|
|
#5
|
||||
|
||||
|
Yo me encontré con un problema parecido, pero tenía 2 grandes diferencias con el tuyo:
1.- Sólo tenía que pasar una tabla (parte) de una base de datos Firebird a otra en vez de dos como es tu caso. 2.- Con lo de parte me refiero a que no tenía que pasar la tabla entera, seleccionaba los registros que me interasaban, ya fuera el criterio con un rango entre 2 fechas o por descripción. La selección mayor que tenía que "exportar" como mucho tendría unos 1500 registros, no 6000 como es tu caso. No se como te irá esta solución en cuanto a velocidad y/o rendimiento. Aunque pensándolo bien después de leer esto: Cita:
De todas formas te cuento: Primero habría que hacer un select de la tabla de la base de datos Local1 (si es con el criterio "desde" y "hasta" mencionado antes mejor) con su IBQuery correspondiente (vamos a llamarle IBQuery1). Después la recorremos, y hacemos un select de la tabla de Local2 (IBQuery2) utilizando como criterio por ejemplo el código del registro por el que vamos de IBQuery1. Una vez echo esto montaríamos una cadena con el INSERT, que tendría como campos el Código, Nombre y Precio de IBQuery1 + el precio de IBQUERY2. Ejecutaríamos el INSERT y ya tendríamos un registro en la nueva tabla (puedes usar un IBQuery3 o borrar el SQL de IBQuery2 e insertarlo desde ahí mismo). Mas o menos el código sería algo así:
Obviamente cambiando los nombre de las tablas, campos, controles, etc. por los tuyos. Espero que te sirva ![]() * Nota: cada IBQuery apunta a su IBDatabase correspondiente.
__________________
No hope, no dreams, no love, my only escape is Underground Última edición por Axel_Tech fecha: 02-12-2009 a las 11:34:10. |
|
#6
|
||||
|
||||
|
Axel, sos un tipo groso, entendiste perfecto como era la cosa!
Lo acabo de leer y no estoy en la compu donde tengo el delphi, asi que cuando llegue me pongo a probarlo; te hago una consulta, esto va a hacer un select de la tabla en la base1 desde tal codigo hasta tal codigo; despues va a hacer un select de la segunda tabla en la segunda base donde el codigo sea el mismo que los seleccionados de la base1. Despues va a hacer un insert linea por linea en la tercer base hasta que se termine el select1. Mi consulta era, a veces pasa que en la base2 hay un codigo que no esta en la base1, como en el ejemplo que yo puse en el primer post. Por eso mi idea inicial era tomar el select de la primer base y hacer insert; tomar el select de la segunda base y hacer insert y despues update; y el select de la segunda tambien contemplarlo por lo que haya en los edit en vez de lo que me dio como resultado el select1, entonces si hay un codigo que existe en una pero en la otra no quedaria agregado igual. Igualmente si, la base1 es la que tiene la "mayoria" de los codigos, y entre las bases, si el codigo existe su nombre es igual, o sea que el campo codigo y nombre si los iba a tomar como referencia para crear la tabla nueva. Mi idea, es hacer esto a las N bases, o sea que en el ejemplo son dos, pero ponele que fueran 5 o 20 bases. Volvi a releer tu propuesta, y se me ocurrio lo siguiente (no lo escribo en codigo porque a algo le voy a errar, pero decime si mi teoria seria correcta) Tengo los componentes IBQuery1, 2, 3....N correspondiente a cada base para hacer los select, y un IBQueryX que va a ser el que grabe la info en la tabla que tenga los datos de todas. Empiezo con un select en el query1 desde y hasta lo que me indiquen los edit. Me posiciono en la primer linea; abro un while query1 eof y en una variable string voy agregando como vos hiciste los campos, nada mas que el precio2 lo dejo vacio, uso el queryX para grabar a la tabla nueva. Cuendo termina el while hago un select del query2, igual que el 1, contemplando los edit desde y hasta, abro un while query2 eof y en la variable agrego todo el insert (que si ya se habia insertado con el del query1 lo va a saltear, y sino lo va a agregar) y despues un update (para agregarle el precio2). Termina el while, y asi sucesivamente hasta la cantidad de bases que tenga, un select de la tercera, abro while, insert y update, cierro while; un select de la cuarta, abro while etc etc etc. En teoria funcionara? Te cuento cuando llego a la compu donde tengo delphi. Igualmente, me dieste una idea de como arrancar! mil gracias! Que lindo seria esto si laburara con firebird 2.1, donde podes hacer un "UPDATE OR INSERT" que contempla justo estos casos. Última edición por pnikkosis fecha: 02-12-2009 a las 13:56:53. |
|
#7
|
||||
|
||||
|
Con más de 2 bases de datos se complica la cosa. Yo creo que sí funcionaría, aunque veo un par de inconvenientes:
1.- Con tanto INSERT y UPDATE no se que rendimiento obtendrías. Sería cuestión de probarlo. 2.- Cuando llegas a este punto: Cita:
Tengo en mente otra solución: utilizando tablas temporales (una por cada tabla de cada base de datos) y un procedimiento almacenado con 2 cursores. Las tablas temporales las rellenarías tal y como hemos visto hasta ahora, recorriendo las IBQuery y utilizando el criterio "desde" y "hasta". Una vez rellenas (para evitar errores te recomiendo que las tablas se llamen igual o parecido en la base de datos final, y los campos también) el SP sería algo tal que así:
Un SP es más potente y más rapido que tanto INSERT y UPDATE. Tendrías que depurarlo un poco y adaptarlo a tus necesidades. Como ya he dicho antes todo es cuestión de probarlo.
__________________
No hope, no dreams, no love, my only escape is Underground |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Tomar datos del lector de código de barras | jam888 | OOP | 4 | 22-03-2010 17:53:03 |
| Tomar datos de otra aplicacion | dblx | API de Windows | 4 | 23-12-2008 01:16:38 |
| Tomar datos de excel | vinagre3ro | Internet | 2 | 04-10-2006 09:59:28 |
| Hola soy muy nueva en esto de las bases de datos y deseo imprimir tablas | nuri | Impresión | 1 | 05-07-2005 19:49:31 |
| Como mostrar los datos para luego insertarlos? | judoboy | OOP | 8 | 14-05-2003 09:51:51 |
|