Me imagino qeu son vistas locales
Si es asi cuando creas la vista local esta graba la estructura y si cambias la longitud de un campo en una tabla tienes que hacer lo mismo con la vista o volver a crear la vista.
En un sistema que hice hace tiempo utilizer vista locales y las creaba en el formulario, al crearla en el formulario esta sustituia la vista que ya estaba creada y asi si cambiaba la estrutura de mi tabla la vista se creaba con con las modificaciones de la estructura de la tabla.
Pero la consecuencia era que cada vez que creaba la vista esta eliminaba la anterior y creaba la nueva, esto lo hacia cada vez que se ejecutaba el programa, entonces la base de datos la DB crecia ya que como sabes los registros borrados son logicos.
Entonces pense que poniendo una opcion de mantenimiento que cuando compactara e indizara las tablas del sistema eata opcion hiciera los mismo con la base de datos que como ya sabes no es mas que una tabla dbf con extension DBC.
Pero siempre hay un pero, el usuario nunca usaba esta opcion ya que era super estable y nunca se corrompio los indices.
Asi que mi solucion final fue:
En mi formulario load.
Abro mis tablas
y antes de crear mi vista pregunto si existe con el comando INDBC("MI_VISTA_LOCAL", "VIEW") si existe la abro y sigue el programa si no existe la creo.
Ahora bien si necesito cambiar la estructura de la tabla pues la cambio y elimino la vista compilo mi programa y listo, cuando se ejecuta el programa este al ver que no existe la vista local el la crea y funciona sin ningun problema.
Ojo cuando elimino la vista en mi entorno de desarrollo abro la base de datos en forma exclusiva y el hago un PACK.
Mas o menos asi un fragmento del programa:
IF .NOT. INDBC("WorkRetenciones ", "VIEW")
CREATE SQL VIEW WorkRetenciones AS SELECT *, RECNO() AS recno_act ;
FROM Retenciones WHERE NUMERO=?nlNumero ORDER BY nrocomprob
********* Proceso del View de Retenciones ****************
DBSETPROP('WorkRetenciones', 'View', 'Tables','Retenciones')
DBSETPROP("WorkRetenciones.id", 'Field', 'UpdateName', 'Retenciones.id')
DBSETPROP("WorkRetenciones.NUMERO", 'Field', 'UpdateName', 'Retenciones.NUMERO')
DBSETPROP("WorkRetenciones.COMPROBANT", 'Field', 'UpdateName', 'Retenciones.COMPROBANT')
Mis vistas son locales y actualizable.
Espero haber ayudado.
Saludos
Jorge Galván
Caracas-Venezuela