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();
}
}
}
Cuando ejecuto este código se montan bien los querys y no hay ningún error, hasta que sale del switch. Cuando pasa por el break me da este mesaje de error: