Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-11-2003
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 22
Jose_Pérez Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 12-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 13-11-2003
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 22
Jose_Pérez Va por buen camino
Eso me estaba temiendo.

Gracias.
Responder Con Cita
  #4  
Antiguo 13-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #5  
Antiguo 14-11-2003
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 22
Jose_Pérez Va por buen camino
Ya lo socioné del otro modo. De todos modos es bueno saberlo.

Gracias.
Responder Con Cita
  #6  
Antiguo 14-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #7  
Antiguo 17-11-2003
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:58:36.


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
Copyright 1996-2007 Club Delphi