Data enviroment orden de apertura de tablas

Tengo un DE de un form en el cual efectúo un filtro sobre una tabla (filter) utilizando una variable de otra tabla, la cual no esta disponible al momento de abrir la tabla que filtro, ¿hasta ahí se entiende?, esto hace que me de un error ya que ma dice que el alias xxx (de la tabla por la variable que filtro) no existe, luego de mucho renegar, llegue a la conclusión que la forma de solucionar esto es hacer que la tabla sobre la cual filtro se abra primero y luego la tabla filtrada, pero la única forma que encontré fue insertando en este orden las tablas, la pregunta: ¿Existe alguna forma de asignar en el DE el orden en el cual se abren las tablas?
Respuesta
1
El orden de apertura de tablas lo determinas en el dataenvironment de tu formulario. Es el mismo orden en que agregas las tablas al entorno de datos del formulario. Puedes cambiar ese orden modificando la propiedad name de cada tabla del entorno de datos.
Pero la solución al problema que tú tienes creo que va por otro lado.
Si haces click derecho sobre la ventana del entorno de datos (no sobre una tabla) se abrirá un menú en el cual tienes la opción código.
Al seleccionarla se abre el editor de código para los eventos del entorno de datos. Busca el evento beforeopentables (antes de abrir las tablas). En ese evento introduce el código para abrir tu tabla en forma manual (la que necesitas que se abra primero)
Algo así:
* dataenvironment/beforeopentables*
use miprimeratabla in 0 alias mitabla1
public mivariable
* busca el registro que necesitas y almacena el dato en tu variable publica *
Luego, en el entorno de datos abres las otras tablas y estableces la condición de filtrado con la variable publica.
No te olvides de que también debes incluir el siguiente código en el evento afterclosetables (luego de cerrar tablas) de tu dataenvironment:
Use in mitabla1
Release mivariable
Seguro solucionas con esto.
Suerte
Primero que nada agradezco tu pronta respuesta.
Sobre modificar la propiedad Name de la tabla ya lo había probado (cambie cursor8 por cursor1), pero no cambia el orden de apertura. (Lo chequeo desde el alias()). En realidad la solución que me das es la que ya tengo. Así:
* dataenvironment/beforeopentables*
SELECT 20
USE lectreloj
*dataenvironment/afterclosetables*
CLOSE TABLES all
el filtro es una expresion de este tipo: IIF(tip_per="J" AND fecha>=lectreloj.fecdesq AND fecha<=lectreloj.fechasq,.t.,IIF(tip_per="M" AND fecha>=lectreloj.fecdesm AND fecha<=lectreloj.fechasm,.t.,.f.))
Tendría que almacenar varias variables, pero la pregunta en definitiva es si existe alguna forma de modificar el orden de apertura de las tablas sin tener que quitarlas a todas y volverlas a agregar. No me gusta la idea de tener una tabla abierta sin verla en el DE.
Muy bien.
Me gusta la gente que busca soluciones sólidas ! Te felicito.
Prueba lo siguiente y se me quemaron los libros !
Abre el entorno de datos de tu formulario y haz clic derecho sobre la parte vacía (no sobre una tabla), luego selecciona propiedades y busca la propiedad "InitialSelectedAlias"
Según la referencia del lenguaje es la primera tabla en seleccionarse, ahora no sé si la primera en abrirse.
En tu caso yo opté por la solución que te comenté esta mañana, y no necesariamente debes utilizar variables, perfectamente puedes colocar tu expresión de filtro haciendo clic en Fx del cuadro de propiedades de la tabla que deseas filtrar.
Si no funciona eso, solo se me ocurre la posibilidad que pongas las propiedades AUTOOPENTABLES Y AUTOCLOSETABLES (del Dataenvironment) en .F. y abras tus tablas manualmente desde el evento OPENTABLES del Dataenvironment.
Suerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas