Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   alter table / modify -> Problemas en tablas dbase (https://www.clubdelphi.com/foros/showthread.php?t=5191)

Jose_Pérez 12-11-2003 16:05:55

alter table / modify -> Problemas en tablas dbase
 
Hola de nuevo:

Estoy intentando cambiar la estructura de una tabla dbase...

Código:

alter table "tabla.dbf" modify campo nuevoformato
...pero SQL no me reconoce la palabra modify. He probado con change, en lugar de modify, pero tampoco funciona.

¿Alguien sabe como se hace?.

Saludos.

roman 12-11-2003 18:01:07

No creo que esto sea posible en dbase. Me parece que tendrás que crear una nueva columna, pasar los datos de la anterior a la nueva y finalmente eliminar la anterior.

// Saludos

Jose_Pérez 13-11-2003 09:14:18

Eso me estaba temiendo.

Gracias.

roman 13-11-2003 16:21:24

Otra opción sería utilizar la API del BDE en lugar de SQL. Busca en la ayuda del BDE acerca de la función DbiDoRestructure. En la sección de ejemplos viene uno para cambiar un campo en una tabla paradox o dbase.

// Saludos

Jose_Pérez 14-11-2003 09:35:08

Ya lo socioné del otro modo. De todos modos es bueno saberlo.

Gracias.

roman 14-11-2003 16:29:33

Cita:

Jose_Pérez comentó:
Ya lo socioné del otro modo. De todos modos es bueno saberlo.
¿Y no podrías cooperar con el Club y contarnos cómo fue que lo solucionaste?

// Saludos

Jose_Pérez 17-11-2003 09:24:34

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.


La franja horaria es GMT +2. Ahora son las 20:39:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi