Ver Mensaje Individual
  #7  
Antiguo 17-11-2003
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Reputación: 22
Jose_Pérez Va por buen camino
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.

Última edición por Jose_Pérez fecha: 04-01-2005 a las 14:46:36.
Responder Con Cita