Hola Roman:
Me refería a que lo solucionés tal como tú me sugerías en la primera respuesta.
Código:
procedure TfrmPrincipal.ModificarCampo(Tabla, NombreCampo: String; TipoCampo: TFieldType;
Longitud: Integer);
var
Consulta: String;
Begin
// Añade un campo temporal con la nueva estructura.
Consulta:='alter table "'+Tabla+'" add CampoTemp';
Case TipoCampo Of
ftBoolean: Consulta:=Consulta+' boolean';
ftDate: Consulta:=Consulta+' date';
ftString: Consulta:=Consulta+' char('+IntToStr(Longitud)+')';
ftInteger: Consulta:=Consulta+' integer';
ftFloat: Consulta:=Consulta+' numeric';
End;
With Datamodulo.qryConsultas Do
Begin
Close;
SQL.Clear;
SQL.Add(Consulta);
ExecSQL;
End;
// Actualiza el campo temporal con la información del campo a modificar.
Consulta:='update "'+Tabla+'" set CampoTemp='+NombreCampo;
With Datamodulo.qryConsultas Do
Begin
SQL.Clear;
SQL.Add(Consulta);
ExecSQL;
End;
// Elimina el campo a Modificar
Consulta:='alter table "'+Tabla+'" drop '+NombreCampo;
With Datamodulo.qryConsultas Do
Begin
SQL.Clear;
SQL.Add(Consulta);
ExecSQL;
End;
// Vuelve a crear el campo modificado con la nueva estructura.
Consulta:='alter table "'+Tabla+'" add '+NombreCampo;
Case TipoCampo Of
ftBoolean: Consulta:=Consulta+' boolean';
ftDate: Consulta:=Consulta+' date';
ftString: Consulta:=Consulta+' char('+IntToStr(Longitud)+')';
ftInteger: Consulta:=Consulta+' integer';
ftFloat: Consulta:=Consulta+' numeric';
End;
With Datamodulo.qryConsultas Do
Begin
Close;
SQL.Clear;
SQL.Add(Consulta);
ExecSQL;
End;
// Actualiza el campo a modificar con la información del campo temporal.
Consulta:='update "'+Tabla+'" set '+NombreCampo+'=CampoTemp';
With Datamodulo.qryConsultas Do
Begin
SQL.Clear;
SQL.Add(Consulta);
ExecSQL;
End;
// Elimina el campo temporal.
Consulta:='alter table "'+Tabla+'" drop CampoTemp';
With Datamodulo.qryConsultas Do
Begin
SQL.Clear;
SQL.Add(Consulta);
ExecSQL;
End;
End;
Un abrazo.