Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Visual Extend y vfx_checkupdate
Message
De
04/03/2003 22:07:13
Hilmar Zonneveld
Independent Consultant
Cochabamba, Bolivie
 
 
À
04/03/2003 21:35:29
Information générale
Forum:
Visual FoxPro
Catégorie:
Produits tierce partie
Divers
Thread ID:
00761310
Message ID:
00761323
Vues:
44
>1 ) He leido en el manual de VFX que hay una forma de actualizar la Base de Datos automáticamente , pero desgraciadamente no trae ningun ejemplo de como se debe implementar. Si poseen algun ejemplito , se los agradeceria mucho.

El client-site update funciona como sigue: Tienes una base de datos con la estructura "oficial", actualizada. Todas las tablas tienen 0 registros, ya que después se hará "APPEND BLANK".

Copias esta base de datos a una carpeta con un nombre reservado (creo que era UPDATE - por favor, revisa el manual, o el código fuente). La próxima vez que entras al ejecutable, automáticamente se invoca la función de actualización.

Esto es en teoría. En la práctica, hallé que el client-site update frecuentemente da un error, "trigger failed" (falló el desencadenante). Y es que Visual Extend no revisa por relaciones padre-hijo, y no necesariamente copia la tabla padre antes del hijo. El resultado no deja de esperarse (el problema puede surgir si hay actualizaciones en ambas tablas: padre e hijo).

Yo terminé adaptando la idea, y algunas funciones del Visual Extend, para hacer mi propia rutina de actualización. Además, como beneficio adicional, ahora la puedo invocar a la medianoche - fuera del ejecutable principal.

>2 ) Debido a que he intentando hasta la desesperación realizar consultas mediante el comando SELECT SQL con registros borrados ( dicho sea de paso , si se puede realizar ? me avisan , detallo más adelante el ejemplo de lo q quiero hacer ) ; creo que no me queda más remedio que agregarle un campo más a mis tablas ( por ej. el campo : Borrado ) en el cual yo le indicaria si ese registro esta borrado o no.

Sí, puedes hacer este tipo de consulta. Tienes que poner SET DELETED OFF primero.

Pero recomiendo que un registro borrado sea tratado como tal, bajo condiciones normales. El usuario recibe un mensaje de confirmación adecuado, y si dice que sí, bueno pues, el registro se fue. Recuperar registros borrados es muy problemático, en mi opinión.

>
>tabla1.borrado = 'SI'
>
>Esto lo se hacer , mientras se trabaje interactivamente , o sea , puedo indicar en el evento onpostdelete() lo siguiente :
>
>onpostdelete()
>
>replace tabla1.borrado with 'SI'
>dodefault()
>
>Pero el problema es cuando , el borrado ocurre como consecuencia de un trigger. Por ej. : tengo una tabla clientes y vinculada a ésta, una tabla electrodomesticos. El trigger delete , esta activado en modo cascade , o sea que si borro un cliente , automaticamente , me borrará todos sus electrodomésticos.
>En éste caso , ¿ Cómo hago para que "electrodomésticos.borrado" sea remplazado por "SI" ?

Quizás en vez de usar los formularios de Visual Extend, podrías poner este código en un trigger.

>Nota : Como les decía más arriba : las consultas sql no admiten filtrados mediante deleted() , verdad ?
>O sea , el siguiente ejemplo , no es válido ( si alguien sabe como se hace , estaré agradecido ) :
>
>Select Clientes.id,Electrodomesticos.id,Electrodomesticos.cliente from clientes left outer join electrodomesticos on clientes.id = electrodomesticos.cliente where DELETED('clientes') AND DELETED('electrodomesticos')

La razón por la cual no es válido es porque Visual FoxPro hace el equivalente de USE...AGAIN, de modo que no hay ninguna garantía que selecciona los datos del alias "electrodomesticos".

Quizás podrías buscar la manera de separar el query en dos partes, primero uno que te busca los registros borrados (sólo con DELETED(), sin alias - esto no debería causarte problema en una sola tabla), y luego unir el resultado con la otra tabla.

>PD : Para ti Hilmar , gracias por todo , espero no cansarte con tantas preguntas.

No hay problema. Por si acaso, tienes la opción de dirigir un mensaje específicamente a mí (para que no la pase por alto). Te pido que uses esta opción sólo para preguntas de Visual Extend; para otras preguntas, hay suficientes otros expertos que te pueden ayudar. También hay el grupo de discusión NNTP (que se puede acceder con Outlook Express, entre otros), en el servidor news.dfpug.de (hay un grupo de discusión sobre VFX en Inglés, y otro en Alemán).

Saludos,

Hilmar.
Difference in opinions hath cost many millions of lives: for instance, whether flesh be bread, or bread be flesh; whether whistling be a vice or a virtue; whether it be better to kiss a post, or throw it into the fire... (from Gulliver's Travels)
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform