![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
|
Consultar tablas de dos bases de datos
Tengo dos bases de datos en Firebird y necesito conectar ambas para poder importar los datos de una a otra. Estoy usando C++ Builder con los elementos de conexión de interbase, pero no sé si se puede hacer algo así o tendré que exportar los datos.
|
|
#2
|
||||
|
||||
|
Usa 2 IBDatabase, 2 IBTransaction, 2 IBquery, cada uno a una BD.
Select en una e insert en la otra.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#3
|
||||
|
||||
|
Sí, eso lo tengo claro, pero lo que no veo es como hacerlo. ¿Leo los datos de una con una select y los asigno a variables o puedo hacer directamente un cosa así?
|
|
#4
|
||||
|
||||
|
Entre BDs distintas no puedes hacerlo así, tendrías que hacerlo mediante un 'stored procedure' o 'trigger'.
Lo que puedes hacer es un bucle, algo más o menos así:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#5
|
||||
|
||||
|
Muchas gracias. Probaré y ya os diré como ha ido.
|
|
#6
|
||||
|
||||
|
No sé que hago mal. Estoy usando este código:
Código:
for (nItem = 0; nItem < slImporta->Count; nItem ++)
{
cAux = "";
if (!tColegio->InTransaction)
tColegio->StartTransaction();
Query->Close();
qTemp->Close();
qImporta->Close();
qImporta->SQL->Text = "SELECT ";
switch (StrToInt(slImporta->Strings[nItem]))
{
default:
qTemp->SQL->Text = "SELECT RDB$FIELD_NAME FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME = :Tabla";
qTemp->ParamByName("Tabla")->AsString = UpperCase(cTablas[nItem]);
qTemp->Open();
for (; !qTemp->Eof; qTemp->Next())
{
qImporta->SQL->Text = qImporta->SQL->Text + qTemp->FieldByName("RDB$FIELD_NAME")->AsString.Trim() + ", ";
cAux = cAux + qTemp->FieldByName("RDB$FIELD_NAME")->AsString.Trim() + ", ";
}
qImporta->SQL->Text = StringReplace(qImporta->SQL->Text.SubString(1, qImporta->SQL->Text.LastDelimiter(",") - 1).Trim(), "\r\n", "", oReplace) + " FROM " + cTablas[nItem];
cAux = cAux.SubString(1, cAux.LastDelimiter(",") - 1).Trim();
Query->SQL->Text = "INSERT INTO " + cTablas[nItem] + " (" + cAux + ") VALUES (:" + StringReplace(cAux, ", ", ", :", oReplace) + ")";
break;
case 2:
qImporta->SQL->Text = "SELECT DISTINCT Registro, Padre FROM Alumnos";
Query->SQL->Text = "INSERT INTO AluPad (Alumno, Padre) VALUES (:Alumno, :Padre)";
break;
case 3:
qImporta->SQL->Text = "SELECT Entidad, Nombre FROM Bancos";
Query->SQL->Text = "INSERT ITNO Bancos (Entidad, Nombre) VALUES (:Entidad, :Nombre)";
break;
case 7:
qImporta->SQL->Text = "SELECT A.Padre, B.Cuenta, B.Defecto FROM Alumnos A, Cuentas B WHERE A.Referencia||A.Recibo = B.Referencia ORDER BY Padre";
Query->SQL->Text = "INSERT INTO Cuentas (Padre, Cuenta, Defecto) VALUES (:Padre, :Cuenta, :Defecto)";
break;
case 14:
qImporta->SQL->Text = "SELECT DISTINCT A.Padre_Ape, A.Padre_Nom, A.Registro, A.Padre_Sex, A.Padre_Dni, A.Domicilio, A.Cpostal, A.Poblacion, A.Provincia, A.Telefono, A.Correo, B.Domicilia, A.Padre_Obs FROM Padres A, Alumnos B WHERE A.Registro = B.Padre ORDER BY Padre_Ape, Padre_Nom, Registro";
Query->SQL->Text = "INSERT INTO Padres (Padre_Ape, Padre_Nom, Registro, Padre_Sex, Padre_Dni, Domicilio, Cpostal, Poblacion, Provincia, Telefono1, Correo, Domicilia, Padre_Obs) VALUES (:Padre_Ape, :Padre_Nom, :Registro, :Padre_Sex, :Padre_Dni, :Domicilio, :Cpostal, :Poblacion, :Provincia, :Telefono1, :Correo, :Domicilia, :Padre_Obs)";
break;
}
qImporta->Open();
for (; !qImporta->Eof; qImporta->Next())
{
if (!tColegio->InTransaction)
tColegio->StartTransaction();
Query->Close();
for (int nParam = 0; nParam < Query->ParamCount; nParam ++)
Query->Params->Items[nParam]->Value = qImporta->Fields->Fields[nParam]->Value;
try
{
Query->ExecSQL();
tColegio->Commit();
}
catch(...)
{
tColegio->Rollback();
}
}
}
Cita:
Última edición por Casimiro Noteví fecha: 16-10-2013 a las 14:00:14. |
|
#7
|
||||
|
||||
|
No he dicho nada. Estaba definiendo mal una transacción. Disculpad.
|
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Consultar Varias Bases de Datos | amerika111 | Firebird e Interbase | 4 | 03-05-2011 22:20:42 |
| Consultar 2 bases de datos | Michael | SQL | 2 | 05-03-2009 23:58:03 |
| JOIN de dos tablas en dos bases de datos diferentes | gluglu | Firebird e Interbase | 3 | 12-02-2005 12:39:48 |
| consulta a tablas de bases de datos externas | odin | SQL | 4 | 23-09-2004 17:07:27 |
| Usar tablas de dos bases de datos distintas | davidcm | SQL | 2 | 26-06-2003 17:05:05 |
|