4D v16Conjuntos y selecciones temporales |
||||||||||||||||||||||||||||||||
|
4D v16
Conjuntos y selecciones temporales
|
Tema | Conjunto | Selección temporal |
Espacio en memoria para un registro | 1 bit | 4 bytes |
Conservar la ordenación | No | Sí |
Conservar el registro actual | No | Sí |
Reunión | Sí | No |
Intersección | Sí | No |
Diferencia | Sí | No |
Guardar en disco | Sí | No |
Tamaño memoria de una selección de 10 registros de 20 000 | 20 000 bits o 2500 bytes | 10 x 4 bytes = 40 bytes |
Alcance | Local, Proceso, Interproceso | Proceso, Interproceso |
Sólo es posible comparar conjuntos de la misma tabla.
Atención: el funcionamiento de un conjunto implica la utilización durante un tiempo limitado y eventualmente de semáforos (ver la documentación 4D para mayor información).
De hecho, un conjunto hace corresponder un bit a la posición física de cada registro de la tabla. En caso de eliminación y posterior adición de registros, el contenido anterior de un registro físico podría ser reemplazado por el nuevo contenido que ya no está en línea con lo que el conjunto se supone que representa.
Sea metódico en el uso de los conjuntos, que son una manera eficiente y rápida para comparar selecciones.
Para conservar una selección, hay una tercera solución que implica el uso de un array que contiene su identificación utilizando el comando SELECTION TO ARRAY.
Puede usar una cuarta solución utilizando los clusters almacenados, por ejemplo, en los BLOBs.
Evidentemente, cuando los conjuntos y las selecciones ya no son necesarias, usted puede liberar memoria borrándolos.
CLEAR SET("SetName")
CLEAR NAMED SELECTION("SelectionName")
En este vídeo, vamos a aprender cómo conservar una selección y a realizar funciones (unión, intersección, diferencia).
Los conjuntos son una forma sencilla de intersectar las listas de registros de una misma tabla.
Los conjuntos son una de las formas que puede utilizar para poner una selección en espera de modo que pueda utilizarse de nuevo más adelante.
Al realizar una operación en dos conjuntos, se obtiene un nuevo conjunto que contiene el resultado de la operación realizada (de acuerdo con la teoría de conjuntos convencional).
Vamos a aplicar estos principios de inmediato a la lista de intervenciones en el formulario de navegación. Podemos crear un juego de la selección actual.
Vamos a crear un botón que busque todas las intervenciones que se iniciaron antes de las 9:00 a.m.
Aquí está el método del botón:
QUERY([Interventions];[Interventions]Intervention_Time
y vamos a crear un segundo botón que nos dará todas las intervenciones que no se han realizado al 100%. Podemos programar este botón así:
QUERY([Interventions];[Interventions]Progress<100)
Por el momento, en el archivo que importamos, el % de avance no se especifica.
Así que primero vamos a aplicar una fórmula en todas las intervenciones. Aquí tenemos una selección de 11,732 intervenciones en las que vamos a aplicar una fórmula y especificar que:
Si ahora hacemos un informe para comprobar lo que los valores de % de avance se han llenado, vemos que van de 0 a 100.
Por supuesto, si hacemos clic en el primer botón y luego en el segundo, habremos perdido la selección creada durante el primer clic.
Así que en el primer botón, puede ser útil, después de la búsqueda, conservar la información en un conjunto que podemos llamar "Morning_Interventions".
CREATE SET([Interventions];"Morning_Interventions")
Igualmente, aquí, luego de recuperar el conjunto de las intervenciones que no han terminado, llamamos este conjunto "Interventions_in_progress".
CREATE SET([Interventions];"Interventions_in_progress")
Entonces podemos comparar los conjuntos:
UNION("Morning_Interventions";"Interventions_in_progress";"Interventions_Result")
Podemos probar las diferentes posibilidades ejecutando el formulario de navegación.
Tomamos todas las intervenciones, hay 11.732 y aquí (después de hacer clic en los botones de búsqueda), aún tenemos 11.732.
¿Por qué? Recuerde que en el vídeo anterior, añadimos en la función Navigation_Function, al final, esta línea nos da el número de registros encontrados después de que se crea una nueva selección.
vNumRecords:=Records in selection([Interventions])
Vamos a copiar este código y aplicarlo a los 2 botones de búsqueda.
En la actualidad, no tenemos el puntero de la tabla aquí, vamos a procesar las intervenciones.
Luego podemos copiar esta línea de código para los otros 4 botones:
Ahora, si volvemos al formulario de navegación, tenemos:
Las intervenciones antes de las 9:00 a.m. + las intervenciones que están en un 100%, las intervenciones de las 9:00 a.m. en curso o de las 9:00 a.m. terminadas, no cambia el número que está aquí.
¿Por qué? Esto se debe a que la simple creación de un conjunto no implica su uso.
En este botón aquí, después de que hemos creado la unión que crea un tercer conjunto, se debe indicar el conjunto particular que debe ser utilizado.
Así que vamos a modificar el código y:
Y de esa manera podemos probar:
Para completar este enfoque, vamos a cerrar el formulario y lanzar nuevamente el método Navigation para verificar su funcionamiento.
Si hacemos clic sobre uno de los tres botones a la derecha, un mensaje de error indica que los conjuntos no existen. Naturalmente, los conjuntos deben existir antes de que podamos usarlos.
Vamos a hacer seguimiento a la creación de estos conjuntos, haciendo clic en el primer botón de búsqueda.
Podemos ver, en la lista de la izquierda, el tema "Conjuntos", que muestra la lista de los conjuntos existentes en el proceso se está rastreando. En la actualidad, no hay ninguno.
Cuando el método se ejecuta:
Y luego veremos, que como el conjunto ya existe, es sólo la cantidad la que cambia.
Es necesario tener en cuenta que un conjunto es sólo una lista de registros que no necesariamente es la selección actual, ya que ahora la selección actual de la tabla Interventions contiene 601 registros.
Cuando pasamos al comando USE SET, la selección ahora contiene un número de registros que coinciden con el número indicado en el conjunto y la variable vNumRecords también se adaptará en consecuencia.
Otro uso de los conjuntos que es muy conveniente consiste en seleccionar un cierto número de registros y a continuación indicar que queremos volverlos la selección actual, es decir, que cuando hagamos clic en el botón, haya sólo estos X registros.
Para ello, debemos:
El código es el siguiente:
$SetName:="Userset_"+String(Milliseconds)
GET HIGHLIGHTED RECORDS($TablePointer->;$SetName)
USE SET($SetName)
vNumRecords:=Records in selection($TablePointer->))
En otras palabras, vamos a:
Podemos probar:
En este nivel, tenemos:
En nuestro array, ahora tenemos la lista de registros que seleccionamos.
Un conjunto se compone de un bit por registro y por lo tanto no conserva el orden de clasificación.
Cuando sea necesario conservar esta información, debe utilizar comandos relacionados con las selecciones temporales:
COPY NAMED SELECTION y USE NAMED SELECTION
Aquí vamos a agregar un botón que nos permite:
Ahora tenemos la posibilidad de almacenar dos selecciones que tendrán en cuenta el orden de clasificación.
Las selecciones existen en la memoria pero no se utilizarán.
A continuación, vamos a:
Demos un vistazo a este ejemplo. Si tomamos todas las intervenciones:
Ahora:
Producto: 4D
Tema: Conjuntos y selecciones temporales
Autoformación ( 4D v16)