Hola,
Estoy intentando crear una secuencia de comandos de una ventana de diálogo que solicita al usuario que seleccione 2 tablas de datos de un par de cuadros de lista que muestran todos los nombres de tablas actualmente abiertas. La ventana de diálogo, el cuadro de lista y el proceso de selección funcionan según lo previsto; sin embargo, una vez que tengo los 2 nombres de tabla seleccionados como variables, golpeo un obstáculo cuando trato de asociarlos a las referencias de la tabla de datos. Las referencias de la tabla de datos son necesarias para realizar el trabajo en las tablas seleccionadas más adelante en el código.
Los problemas aparecen en las dos últimas líneas con el siguiente error para dt1.
El argumento debe contener la referencia de la tabla de datos en el acceso o evaluación de la "Tabla de datos actuales", Tabla de datos actuales / * ### * / (SourceData)
Me doy cuenta de que SourceData y TargetData son objetos de lista con solo 1 elemento cada uno, así que intenté convertir a cadena antes de asociarlos como un nombre de tabla de datos, pero eso no funcionó.
Cualquier ayuda es muy apreciada. Por favor, consulte la sección de secuencia de comandos a continuación.
tablas abiertas = {} ;
por ( t = 1 , t <= NTable () , t ++, Insertar en ( tablas abiertas , Tabla de datos ( t ) << GetName )) ;
SeleccioneDataWindow = Nueva ventana ( "Seleccionar tablas de datos" , << Modal ,
SourcePanel = Caja de panel ( "Tabla de datos de origen" ,
SourceListBox = Cuadro de lista ( tablas abiertas , Max Seleccionado ( 1 ))) ,
TargetPanel = Caja de panel ( "Tabla de datos de destino" ,
TargetListBox = Cuadro de lista ( tablas abiertas , Max Seleccionado ( 1 ))) ,
Caja de alineación ( NCol ( 2 ) , Caja de botones ( "De acuerdo" ,
Datos fuente = SourceListBox << GetSelected ;
TargetData = TargetListBox << GetSelected ) ,
Caja de botones ( "Cancelar" , Detener () ))
) ;
dt1 = CurrentDataTable ( Datos fuente ) ;
dt2 = CurrentDataTable ( TargetData ) ;
Esto funcionó perfectamente. ¡Gracias Dave!
Primero quieres usar la función. Tabla de datos y no la tabla de datos actuales en las dos últimas líneas.
El argumento de la tabla de datos debe ser el nombre de la cadena. Si muestra el contenido de SourceData y TargetData, verá que hay listas. Esto se debe a que, en general, los cuadros de lista le permiten al usuario seleccionar varios elementos. Por lo tanto, aunque está restringiendo el número de elementos seleccionados a uno, la selección se devuelve como una lista.
Puedes reemplazar las dos últimas líneas con esto:
dt1 = Data Table( SourceData[1] );
dt2 = Data Table( TargetData[1] );
Así que ahora se está utilizando el primer elemento de las listas.
Por supuesto, esto supone que el usuario ha seleccionado al menos un elemento de cada lista. Puede agregar validación a una ventana modal. Después de la línea que contiene el mensaje modal agregue:
<<ONVALIDATE>0 & NItems(TargetData)>0,
isValid = 1
,
isValid = 0;
Beep()
);
isValid
),</ONVALIDATE>
Obviamente, puede extender esta validación (por ejemplo, para verificar que los nombres de origen y destino no sean idénticos).