Delphi - Alter table en Interbase 5 ???

 
Vista:

Alter table en Interbase 5 ???

Publicado por Marcos (31 intervenciones) el 25/11/2003 11:06:51
Hola debo cambiar la estructura de una tabla, actualmente es de tipo char de 15 caracteres y debe ser de 17, probé con:
alter table xxx nombre modify varchar(17) y no funciona
alter table xxx nombre varchar(17) y no funciona

el campo es nombre y tiene 15 caracteres.

Alguna idea???

De antemano muchas gracias.

Marcos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Alter table en Interbase 5 ???

Publicado por Luciano J DG (2 intervenciones) el 06/12/2003 17:21:38
Lo que sucede es que para poder modificar el campo, primero debes eliminar el que existe y luego crearlo con el tamaño correcto, lo que provocara que pierdas los datos que tenias en el campo, ademas de que la posicion del campo va a ser la ultima (otro problema si utilizas insert con SQL), lo que tenes que hacer es lo siguiente:

/* Agregamos un campo temporal con el tamaño correcto */
ALTER TABLE CLIENTES
ADD TEMP$$BARRIO VARCHAR50 NOT NULL

/* Movemos los datos al nuevo campo creado*/
UPDATE CLIENTES
SET
TEMP$$BARRIO=BARRIO

/* Borramos el campo viejo */
ALTER TABLE CLIENTES
DROP BARRIO

/* Creamos el campo nuevamente, pero con el tamaño correcto */
ALTER TABLE CLIENTES
ADD BARRIO VARCHAR50 NOT NULL

/* Movemos nuevamentes los datos al nuevo campo */
UPDATE CLIENTES
SET
BARRIO=TEMP$$BARRIO

/* Eliminamos el campo temporar */
ALTER TABLE CLIENTES
DROP TEMP$$BARRIO

Lo unico que restaria seria escribir el script que modifique los metadatos para que quede en la posicion origina, pero esto te lo explico si te hace falta... (deja la tabla y lo hacemos directamente con los campos de tu tabla)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Alter table en Interbase 5 ???

Publicado por Rock (1 intervención) el 04/07/2011 14:29:16
SELECT r.RDB$FIELD_NAME AS field_name, f.RDB$FIELD_LENGTH AS field_length, f.RDB$FIELD_NAME AS NomIndexCamp FROM RDB$RELATION_FIELDS r LEFT JOIN RDB$FIELDS f ON r.RDB$FIELD_SOURCE = f.RDB$FIELD_NAME WHERE r.RDB$RELATION_NAME= ''taula'' and r.RDB$FIELD_NAME = ''camp'' ORDER BY r.RDB$FIELD_POSITION

qtat := Query1.FieldByName('Field_length').AsInteger;
NomIndexCamp := Query1.FieldByName('NomIndexCamp').AsString;

update RDB$FIELDS set RDB$FIELD_LENGTH = 60, RDB$CHARACTER_LENGTH = 15 where RDB$FIELD_NAME = ''NomIndexCamp ''
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar