| 4D v20.1Conjuntos | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|  | 
    4D v20.1
 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 selecionadasOs 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)
	
	
	Manual de linguagem 4D ( 4D v20.1)
	
	
	
 Adicionar um comentário
Adicionar um comentário