Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
Conjuntos
|
Comparação | Seleção atual | Conjuntos |
Número por tabela | 1 | ilimitado |
Ordenável | Sim | Não |
Pode ser salvo em disco | Não | Sim |
RAM por registro (em bytes) | Número de registros selec.* 4 | Número total de registros/8 |
Combinável | Não | Sim |
Contém registro atual | Sim | Sim, como o do momento da criação |
Pode utilizar três tipos de conjuntos:
A tabela a seguir indica os princípios de visibilidade dos conjuntos em função de seu alcance e de onde foram criados:
Processo Cliente | Outros processos no mesmo cliente | Outros clientes | Processo Servidor | Outros processos no servidor | |
Criação em um processo cliente | |||||
$test | X | ||||
test | X | X(Trigger) | |||
<>test | X | X | |||
Criação em um processo servidor | |||||
$test | X | ||||
test | X | ||||
<>test | X | X |
Um conjunto pode ser criado dentro de uma transação. É possível criar um conjunto de registro criados dentro de uma transação e um conjunto de registros criados ou modificados fora da transação. Quando a transação termina, o conjunto criado durante la transação deve ser apagado, porque poderia não ser uma reapresentação exata dos registros, especialmente se a transação for cancelada.
O seguinte exemplo apaga os registros duplicados de uma tabela que contem informação de Pessoas. Um loop For...End for passa por todos os registros, comparando o registro atual com o registro anterior. Se o nome, endereço, e código postal forem iguais, o registro é adicionado a um conjunto. Ao final do loop, o conjunto é convertido na seleção atual e a seleção atual anterior é apagada
CRIATE EMPTY SET([Pessoas];"Duplicados")
` Criar um conjunto vazio para os registros duplicados
ALL RECORDS([Pessoas])
` Selecione todos os registros
` Ordenar os registros por código postal, endereço e nome
` de maneira que os duplicados estejam juntos
ORDER BY([Pessoas];[Pessoas]CodigoPostal;>;[Pessoas]Endereço;>;[Pessoas]Nome;>)
` Inicializar as variáveis que conservam os campos do registro anterior
$Nome:=[Pessoas]Nome
$Endereço:=[Pessoas]Endereço
$CodigoPostal:=[Pessoas]CodigoPostal
` Ir ao segundo registro para compará-lo com o primeiro
NEXT RECORD([Pessoas])
For($i;2;Records in table([Pessoas]))
` Loop pelos registros a partir de 2º
` Se o nome, endereço e código postal forem os mesmos
` do registro anterior, é um registro duplicado.
If(([Pessoas]Nome=$Nome)&([Pessoas]Endereço=$Endereço)&
([Pessoas]CodigoPostal=$CodigoPostal))
` Adicionar registro atual (ou duplicado) ao conjunto
ADD TO SET([Pessoas];"Duplicados")
Else
` Salvar o nome, endereço e código postal deste registro para compará-lo com o próximo
$Nome:=[Pessoas]Nome
$Endereço:=[Pessoas]Endereço
$CodigoPostal:=[Pessoas]CodigoPostal
End if
` Passar ao próximo registro
NEXT RECORD([Pessoas])
End for
` Utilizar os registros duplicados encontrados
USE SET("Duplicados")
` Apaga os registros duplicados
DELETE SELECTION([Pessoas])
` Eliminar o conjunto da memória
CLEAR SET("Duplicados")
4D administra um conjunto sistema chamado UserSet, o qual guarda automaticamente as seleções de registros mais recentes realizadas pelo usuário em tela. Desta forma, pode mostrar um grupo de registros com MODIFY SELECTION ou DISPLAY SELECTION, pedir ao usuário que selecione alguns entre eles, e transformar os resultados desta seleção manual em um conjunto que você pode nomear.
4D Server: apesar de seu nome não começar com o caractere "$", o conjunto sistema UserSet é um conjunto cliente. Assim, quando usar INTERSECTION, UNION e DIFFERENCE, tenha certeza de comparar UserSet apenas com outros conjuntos clientes.
Apenas há um UserSet por processo. Cada tabela não tem seu próprio UserSet. UserSet é associado a uma tabela apenas quando uma seleção de registros para a tabela é mostrada.
4D administra o conjunto UserSet para os formulários listados mostrados em modo Desenho ou utilizando os comandos MODIFY SELECTION ou DISPLAY SELECTION . Entretanto, este mecanismo não está ativo para sub-formulários.
O seguinte método ilustra como mostrar registros para permitir ao usuário selecionar alguns registros, e depois utiliza UserSet para mostrar os registros selecionados:
` Mostrar todos os registros e permitir ao usuário selecionar alguns deles.
` Depois mostre esta seleção utilizando UserSet para modificar a seleção atual.
FORM SET OUTPUT([Pessoas];"Mostrar") ` Definir o formulário de saída
ALL RECORDS([Pessoas]) ` Seleção de todas as Pessoas
ALERT("Pressione Ctrl ou Comando e clique para selecionar os registros.")
DISPLAY SELECTION([Pessoas]) ` Mostrar as Pessoas
USE SET("UserSet") ` Utiliza as Pessoas selecionadas
ALERT("Você escolheu as seguintes Pessoas.")
DISPLAY SELECTION([Pessoas]) ` Mostrar as Pessoas selecionadas
Os comandos APPLY TO SELECTION, DELETE SELECTION e ARRAY TO SELECTION e JSON TO SELECTION criam um conjunto sistema chamado LockedSet quando são utilizadas em um ambiente multi-processo.
Os comandos de pesquisa criam igualmente um conjunto sistema LockedSet quando encontram registros bloqueados no contexto de "pesquisa e bloqueio" (ver o comando SET QUERY AND LOCK).
LockedSet indica quais registros foram bloqueados durante a execução do comando.
Produto: 4D
Tema: Conjuntos
Manual de linguagem 4D ( 4D v20 R7)