Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20.6
Conjuntos
|
Comparación | Selección actual | Conjuntos |
Número por tabla | 1 | ilimitado |
Ordenable | Sí | No |
Puede guardarse en disco | No | Sí |
RAM por registro (en bytes) | Número de registros selec.* 4 | Número total de registros/8 |
Combinable | No | Sí |
Contiene registro actual | Sí | Sí, como el del momento de la creación |
El conjunto pertenece a la tabla en la cual se ha creado. Las operaciones sobre conjuntos sólo pueden realizarse entre los conjuntos que pertenecen a la misma tabla.
Los conjuntos son independientes de los datos, esto significa que después de realizar modificaciones a una tabla, un conjunto podría no ser exacto. Hay muchas operaciones que pueden hacer que un conjunto no sea exacto. Por ejemplo, si crea un conjunto de todos los habitantes de Madrid y cambia los datos de uno de los registros por Barcelona, el conjunto no cambia, porque el conjunto es simplemente la representación de una selección de registros. La eliminación y el remplazo de registros también pueden volver el conjunto obsoleto, al igual que la compactación de datos. La exactitud de los conjuntos sólo se puede garantizar si los datos de la selección original no han cambiado.
Puede utilizar tres tipos de conjuntos:
Notas:
La siguiente tabla indica los principios de visibilidad de los conjuntos en función de su alcance y de dónde fueron creados:
Proceso cliente | Otros procesos en el mismo cliente | Otros clientes | Proceso servidor | Otros procesos en el servidor | |
Creación en un proceso client | |||||
$test | X | ||||
test | X | X (Trigger) | |||
<>test | X | X | |||
Creación en un proceso servidor | |||||
$test | X | ||||
test | X | ||||
<>test | X | X |
Un conjunto puede ser creado al interior de una transacción. Es posible crear un conjunto de registro creados dentro de una transacción y un conjunto de registros creados o modificados fuera de la transacción. Cuando la transacción termina, debe borrarse el conjunto creado durante la transacción, porque podría no ser una representación exacta de los registros, especialmente si la transacción se canceló.
El siguiente ejemplo borra los registros duplicados de una tabla que contiene información de personas. Un bucle For...End for pasa por todos los registros, comparando el registro actual con el registro anterior. Si el nombre, dirección, y código postal son iguales, el registro se añade a un conjunto. Al final del bucle, el conjunto se convierte en la selección actual y la selección actual anterior se borra:
CREATE EMPTY SET([Personas];"Duplicados")
` Crear un conjunto vacío para los registros duplicados
ALL RECORDS([Personas])
` Seleccione todos los registros
` Ordenar los registros por código postal, dirección y nombre
` de manera que los duplicados estén juntos
ORDER BY([Personas];[Personas]CodigoPostal;>;[Personas]Direccion;>;[Personas]Nombre;>)
` Inicializar las variables que conservan los campos del registro anterior
$Nombre:=[Personas]Nombre
$Direccion:=[Personas]Direccion
$CodigoPostal:=[Personas]CodigoPostal
` Ir al segundo registro para compararlo con el primero
NEXT RECORD([Personas])
For($i;2;Records in table([Personas]))
` Bucle por los registros a partir de 2
` Si el nombre, dirección y código postal son los mismos
` del registro anterior, es un registro duplicado.
If(([Personas]Nombre=$Nombre)&([Personas]Direccion=$Direccion)&
([Personas]CodigoPostal=$CodigoPostal))
` Añadir registro actual (el duplicado) al conjunto
ADD TO SET([Personas];"Duplicados")
Else
` Guardar el nombre, dirección y código postal de este registro para compararlo con el siguiente
$Nombre:=[Personas]Nombre
$Direccion:=[Personas]Direccion
$CodigoPostal:=[Personas]CodigoPostal
End if
` Pasar al siguiente registro
NEXT RECORD([Personas])
End for
` Utilizar los registros duplicados encontrados
USE SET("Duplicados")
` Borra los registros duplicados
DELETE SELECTION([Personas])
` Eliminar el conjunto de la memoria
CLEAR SET("Duplicados")
En lugar de borrar inmediatamente los registros al final del método, puede mostrarlos en pantalla o imprimirlos, de manera que pueda realizar una comparación más detallada.
4D administra un conjunto sistema llamado UserSet, el cual guarda automáticamente las selecciones de registros más recientes realizadas por el usuario en pantalla. De esta forma, puede mostrar un grupo de registros con MODIFY SELECTION o DISPLAY SELECTION, pedirle al usuario seleccionar algunos y devolver el resultado de esta selección manual en un conjunto.
4D Server: aunque su nombre no comienza con el carácter "$", el conjunto sistema UserSet es un conjunto cliente. De manera que cuando utilice INTERSECTION, UNION y DIFFERENCE, asegúrese de comparar UserSet únicamente con otros conjuntos clientes. Para mayor información, por favor consulte las descripciones de estos comandos como también la sección 4D Server, conjuntos y selecciones temporales del manual 4D Server.
Sólo hay un UserSet por proceso. Cada tabla no tiene su propio UserSet. UserSet se asocia a una tabla sólo cuando se muestra una selección de registros para la tabla.
4D administra el conjunto UserSet para los formularios listados mostrados en modo Diseño o utilizando los comandos MODIFY SELECTION o DISPLAY SELECTION. Sin embargo, este mecanismo no está activo para subformularios.
El siguiente método ilustra cómo mostrar registros para permitir al usuario seleccionar algunos registros, y luego utiliza UserSet para mostrar los registros seleccionados:
` Mostrar todos los registros y permitir al usuario seleccionar algunos de ellos.
` Luego muestre esta selección utilizando UserSet para cambiar la selección actual.
FORM SET OUTPUT([Personas];"Mostrar") ` Definir el formulario de salida
ALL RECORDS([Personas]) ` Selección de todas las personas
ALERT("Presione Ctrl o Comando y haga clic para seleccionar los registros.")
DISPLAY SELECTION([Personas]) ` Mostrar las personas
USE SET("UserSet") ` Utiliza las personas seleccionadas
ALERT("Usted eligió las siguientes personas.")
DISPLAY SELECTION([Personas]) ` Mostrar las personas seleccionadas
Los comandos APPLY TO SELECTION, DELETE SELECTION, ARRAY TO SELECTION y JSON TO SELECTION crean un conjunto sistema llamado LockedSet cuando se utilizan en un entorno multiproceso.
Los comandos de búsqueda crean igualmente un conjunto sistema LockedSet cuando encuentran registros bloqueados en el contexto de "búsqueda y bloqueo" (ver el comando SET QUERY AND LOCK).
LockedSet indica cuáles registros fueron bloqueados durante la ejecución del comando.
Producto: 4D
Tema: Conjuntos
Manual de lenguaje 4D ( 4D v20)
Manual de lenguaje 4D ( 4D v20.1)
Manual de lenguaje 4D ( 4D v20.2)
Manual de lenguaje 4D ( 4D v20.3)
Manual de lenguaje 4D ( 4D v20.4)
Manual de lenguaje 4D ( 4D v20.5)
Manual de lenguaje 4D ( 4D v20.6)