Ver Mensaje Individual
  #1  
Antiguo 31-07-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Reputación: 21
Angel.Matilla Va por buen camino
Problema con un generador

Estoy trabajando con FB 2.5. En una tabla tengo definidos un procedimeinto y un generador de la siguiente forma:

Código:
IbSql->Close();
IbSql->SQL->Text = "CREATE GENERATOR Id_poblacion";
try
{
     IbSql->ExecQuery();
     Query->Transaction->Commit();
}
catch(Exception *Exc)
{
     Query->Transaction->Rollback();
}

IbSql->Close();
IbSql->SQL->Text = "CREATE PROCEDURE Gen_poblacion RETURNS (Codigo INTEGER) AS BEGIN Codigo = GEN_ID(Id_poblacion, 1); END";
try
{
     IbSql->ExecQuery();
     Query->Transaction->Commit();
}
catch(Exception *Exc)
{
     Query->Transaction->Rollback();
}
Al cargar la tabla sobre la que trabaja actualizo el valor del generador así:

Código:
Query->Close();
Query->SQL->Text = "SELECT MAX(Codigo) Codigo FROM Poblacion";
Query->Open();

if (!Query->Transaction->InTransaction)
     Query->Transaction->StartTransaction();

IbSql->Close();
IbSql->SQL->Text = "SET GENERATOR Id_poblacion TO " + FormatFloat("0", Query->FieldByName("Codigo")->AsInteger);
try
{
     IbSql->ExecQuery();
     Query->Transaction->Commit();
}
catch(Exception *Exc)
{
     Query->Transaction->Rollback();
}
Esto me deja un valor, correcto, en el mismo de 58657. Sin embargo si trato de obtener el nuevo valor para una ficha nueva, al ejecutar el TIBStoredProc así:
Código:
spPoblacion->Close();
spPoblacion->UnPrepare();
spPoblacion->Prepare();
spPoblacion->ExecProc();
Poblacion->Tag = spPoblacion->ParamByName("Codigo")->Value;
El valor que me devuelve es el 22779, 22780, etc. en vez de 58658 como debiera ser. Y me tiene total. ¿Alguna idea de que puede estar pasando?
Responder Con Cita