Clipper/FiveWin - Añadir o eliminar campos en tiempo de ejecución

 
Vista:

Añadir o eliminar campos en tiempo de ejecución

Publicado por Antonio Belando (55 intervenciones) el 01/05/2007 09:49:22
Desearía saber como añadir y/o borrar campos en tiempo de ejecución.

Saludos cordiales.
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:Añadir o eliminar campos en tiempo de ejecución

Publicado por Gabriel Pascual (913 intervenciones) el 01/05/2007 17:33:19
Muy sencillo:

1) Creas una estructura con los campos nuevos vacia y un nombre temporal
2) Abres la tabla nueva
3) Le haces un append from tabla vieja
4) Cierras la tabla con los datos nuevos
5) Borras la tabla anterior
6) Renombras la tabla nueva con el nombre
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:Añadir o eliminar campos en tiempo de ejecución

Publicado por Antonio Belando (55 intervenciones) el 01/05/2007 19:33:59
Hola Gabriel, gracias por contestar, me podrías poner un pequeño ejemplo.
Verás, es que he probado con lo que pongo a continuación y no me da resultado:

CREATE Temp1
APPEND BLANK
REPLACE Field_Name WITH ‘NuevoCampo’, Field_type WITH ‘C’, Field_len WITH 40, Field_dec WITH 0
CLOSE
CREATE Temp2 FROM Temp1
ERASE Temp1.dbf
USE Temp2
APPEND FROM MiFichero

-He creado un fichero extendido (Temp1) con un campo (NuevoCampo)
-Creo un nuevo fichero (Temp2) desde el fichero extendido (Temp1)
-Borro el fichero extendido (Temp1)
-Uso el fichero Temp2 y hago un APPEND FROM de la tabla vieja o existente, pero no me añade nada. En Temp2 solo aparece el campo que he creado.
Supongo que no lo hace porque APPEND FROM, lo que hace es añadir registros de una base a otra, pero si en la nueva no están definidos los mismos campos que tiene la vieja, no añade nada.

Te agradecería, como te pido un ejemplo, Gracias de nuevo.
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:Añadir o eliminar campos en tiempo de ejecución

Publicado por Antonio Belando (55 intervenciones) el 02/05/2007 15:13:41
Hola de nuevo Gabriel, no hagas caso de la anterior nota, he resuelto lo que me has dicho, así:

LOCAL aEstruct
USE BDvieja NEW
aEstruct := BDVieja->(DBSTRUCT())
AADD(aEstruct, { "FieldNew", "C", 40, 0 })
DBCREATE("Temp", aEstruct)
USE
USE Temp NEW
APPEND FROM BDvieja
USE
ERASE BDvieja.dbf
ERASE Temp.dbt
RENAME Temp.dbf TO BDvieja.dbf

Mi pregunta ahora, es como puedo dejar la Base de Datos como estaba, es decir como hago ahora para borrar el campo añadido (FieldNew).

Saludos cordiales.
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:Añadir o eliminar campos en tiempo de ejecución

Publicado por Antonio Belando (55 intervenciones) el 02/05/2007 19:43:32
Hola de nuevo Gabriel, siguiendo lo expuesto en la anterior nota, he hecho alguna modificación para intentar volver al estado anterior, es decir eliminar el campo que hemos añadido:

LOCAL aEstruct , aEstruInicial
USE BDvieja NEW
aEstruInicial := BDVieja->(DBSTRUCT())
aEstruct := BDVieja->(DBSTRUCT())
AADD(aEstruct, { "FieldNew", "C", 40, 0 })
DBCREATE("Temp", aEstruct)
USE
USE Temp NEW
APPEND FROM BDvieja
USE
ERASE BDvieja.dbf
ERASE Temp.dbt
RENAME Temp.dbf TO BDvieja.dbf

//sigo con el programa y al terminar, he de dejar la BDVieja con los campos que tenía:

DBCREATE("Temp", aEstruInicial)
USE Temp NEW
APPEND FROM BDVieja

Haciendolo así, no funciona. Parece como si estuviera trabajando un bucle sin fin.
Por si afecta para algo, he de comentar que la BDVieja diene 25 campos y dos de ellos son memo.

Quisiera saber como hacer el proceso de eliminación automático como he hecho para añadir.

Saludos cordiales.
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