Vistas sobre tablas.

268 views
Skip to first unread message

Kike. Sevilla

unread,
Sep 6, 2017, 10:55:58 AM9/6/17
to Comunidad de Visual Foxpro en Español
Hola Grupo;
Tengo una vista, "V1",  sobre una tabla, "T1" en una Base de Datos de VFP, trabajo con VFP9-SP2.

Supongamos que en T1 cambio la longitud de un campo o lo quito. Cuando llamo a la V1 si el campo antes tenía 10 caracteres y ahora pongo 20 a la hora de llamar a esa vista sólo me da 10 caracteres porque es lo que tiene grabada en la base de datos. Si lo que hago es borrar un campo en T1 al llamar a V1 da error porque no existe el campo.

¿Cómo puedo hacer de forma automática que se regenere sin necesidad de ir vista por vista para arreglar lo anterior?

Espero haberme explicado.

Gracias por la ayuda.

Kike.
Sevilla - España.

Ivan Martinez (imvh.g.c)

unread,
Sep 6, 2017, 11:35:00 AM9/6/17
to publice...@googlegroups.com

Tienes que chequear por programa si ha habido cambios y de acuerdo a esto preceder o no a recrear el formato de la vista.

Ivan Martinez


Libre de virus. www.avg.com

Antonio Meza

unread,
Sep 6, 2017, 11:49:21 AM9/6/17
to Comunidad de Visual Foxpro en Español
Hola!!

Cuando trabaje con DBF lo hice sobre Vistas Locales, y lo que comentas de que si cambias el tamaño de un campo este no se ve reflejado en la vista nunca me paso, creo que mas bien debes tener una mascara en el TextBox o donde muestras el valor porque en la vista solo se guardan los nombres de los campos no su longitud ni tipo.

Lo que si pasa es que si borras el campo de una tabla y que esta agregado en la vista tendrás problemas, lo que debes hacer es primero quitar el campo de la vista y luego borrarlo de la tabla, pero insisto no tiene nada que ver que cambies el tipo y longitud del campo.

Cuando la vista te marca error porque eliminaste un campo te da la opción de editar la vista de forma manual, y buscas el nombre del campo eliminado y lo borras del código de la vista y asunto arreglado.

saludos
Antonio Meza

Jorge Galván Pérez

unread,
Sep 7, 2017, 6:54:22 PM9/7/17
to Comunidad de Visual Foxpro en Español
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
Reply all
Reply to author
Forward
0 new messages