4D v16Conjuntos e seleções temporais |
||||||||||||||||||||||||||||||||
|
4D v16
Conjuntos e seleções temporais
|
Tema | Conjunto | Seleção temporal |
Espaço em memória para um registro | 1 bit | 4 bytes |
Conservar a ordem | Não | Sim |
Conservar o registro atual | Não | Sim |
Reunião | Sim | Não |
Interseção | Sim | Não |
Diferença | Sim | Não |
Guardar em disco | Sim | Não |
Tamanho memória de uma seleção de 10 registros de 20 000 | 20 000 bits ou 2500 bytes | 10 x 4 bytes = 40 bytes |
Alcance | Local, Processo, Interprocesso | Processo, Interprocesso |
Só é possível comparar conjuntos da mesma tabela.
Atenção: O funcionamento de um conjunto implica a utilização durante um tempo limitado e, eventualmente, semáforos (consulte a documentação de 4D para obter mais informações).
Na verdade, um conjunto faz corresponder um bit à posição física de cada linha da tabela. No caso de exclusão e posterior adição de registros, o conteúdo anterior de um registro físico poderia ser substituído com o novo conteúdo que não está mais em consonância com o que o conjunto é suposto para representar.
Ser metódico na utilização de conjuntos, que são uma maneira eficiente e rápida para comparar as equipes.
Para preservar uma seleção, há uma terceira solução que envolve o uso de uma matriz que contém a sua identificação usando o comando SELECTION TO ARRAY.
Você pode usar uma quarta solução usando os clusters armazenados, por exemplo, nos BLOBs.
Obviamente, quando as seleções e os conjuntos não são mais necessários, você pode liberar memória por excluí-los.
CLEAR SET("SetName")
CLEAR NAMED SELECTION("SelectionName")
Neste vídeo, vamos aprender como conservar uma seleção e a realizar funções (união, intersecção, diferença).
Os conjuntos são uma forma simples de interceptar as listas de registros de uma mesma tabela.
Os conjuntos são uma das formas que pode utilizar para colocar uma seleção em espera de modo que possa ser utilizado novamente mais a frente.
Ao realizar uma operação em dois conjuntos, é obtido um novo conjunto que contém o resultado da operação realizada (de acordo com a teoria de conjuntos convencionais).
Vamos aplicar estes princípios de imediato à lista de intervenções no formulário de navegação. Podemos criar um jogo da seleção atual.
Vamos a criar um botão que procure todas as intervenções que se iniciaram antes das 9:00 a.m.
Aqui está o método do botão:
QUERY([Interventions];[Interventions]Intervention_Time
E vamos a criar um segundo botão que nos dará todas as intervenções que não foram realizadas aos 100%. Podemos programar este botão assim:
QUERY([Interventions];[Interventions]Progress<100)
CREATE SET([Interventions];"Morning_Interventions")
Igualmente, aqui, logo de recuperar o conjunto das intervenções que não terminaram chamamos este conjunto "Interventions_in_progress".
CREATE SET([Interventions];"Interventions_in_progress")
Então podemos comparar os conjuntos:
UNION("Morning_Interventions";"Interventions_in_progress";"Interventions_Result")
Podemos provar as diferentes possibilidades executando o formulário de navegação.
Tomamos todas as intervenções, há 11.732 e aqui (depois de fazer clique nos botões de pesquisa), ainda temos 11.732.
Por quê? Lembre que no vídeo anterior, adicionamos na função Navigation_Function, ao final, esta linha nos dá o número de registros encontrados depois de que é criado uma nova seleção.
vNumRecords:=Records in selection([Interventions])
Agora, se voltamos ao formulário de navegação, teremos:
As intervenções antes das 9:00 a.m. + as intervenções que estão em um 100%, as intervenções das 9:00 a.m. em curso ou das 9:00 a.m. terminadas, não muda o número que está aqui.
Por que? Porque a simples criação de um conjunto não implica seu uso.
Neste botão aqui, depois de que criamos a união que cria um terceiro conjunto, se deve indicar o conjunto particular que deve ser utilizado.
Assim que vamos a modificar o código e:
E desta maneira podemos provar:
Para completar este enfoque, vamos a fechar o formulário e lançar novamente o método Navigation para verificar seu funcionamento.
Se fazemos clique sobre um dos três botões à direita, uma mensagem de erro indica que os conjuntos não existem. Naturalmente, os conjuntos devem existir antes poder usá-los.
Vamos a fazer seguimento à criação destes conjuntos, fazendo clique no primeiro botão de pesquisa.
E logo veremos, que como o conjunto já existe, é só a quantidade a que muda.
É necessário ter em conta que um conjunto é só uma lista de registros que não necessariamente é a seleção atual, porque agora a seleção atual da tabela Interventions contém 601 registros.Para isso, devemos:
O código é o seguinte:
$SetName:="Userset_"+String(Milliseconds)
GET HIGHLIGHTED RECORDS($TablePointer->;$SetName)
USE SET($SetName)
vNumRecords:=Records in selection($TablePointer->))
Em outras palavras, vamos a:
Podemos provar:
Neste nível, temos:
Em nosso array, agora temos a lista de registros que selecionamos.
Um conjunto se compõe de um bit por registro e, portanto não conserva a ordem de classificação.
Quando seja necessário conservar esta informação, deve utilizar comandos relacionados com as seleções temporais:
COPY NAMED SELECTION e USE NAMED SELECTION
Aqui vamos a adicionar um botão que nos permite:
Demos uma olhada a este exemplo. Se tomarmos todas as intervenções:
Agora:
Produto: 4D
Tema: Conjuntos e seleções temporais
Autoformação ( 4D v16)