# Persistir marcação das CheckBoxes da Consulta

**URL:** <https://community.latromi.com.br/t/persistir-marcacao-das-checkboxes-da-consulta/696>\
**Category:** Ajuda & Suporte\
**Tags:** form, consulta\
**Created:** [Outubro 19, 2021, 7:29pm UTC](https://community.latromi.com.br/t/persistir-marcacao-das-checkboxes-da-consulta/696 "2021-10-19T19:29:59Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![daniel.giacomelli](https://community.latromi.com.br/user_avatar/community.latromi.com.br/daniel.giacomelli/32/1476_2.png) [@daniel.giacomelli](https://community.latromi.com.br/u/daniel.giacomelli)\
**Post date:** [Outubro 20, 2021, 5:03pm UTC](https://community.latromi.com.br/t/persistir-marcacao-das-checkboxes-da-consulta/696/2 "2021-10-20T17:03:29Z")

</div>

Olá @josimar.picoloto

Pense da seguinte forma: Você não vai mandar os registros de uma Grid para outra, mas sim ocultar de um lado, e mostrar do outro, através de condições nos comandos SQL.

Vou sugerir uma implementação básica a seguir, aí você completa com o que precisar.

## Persistir a CheckBox

A primeira coisa a se fazer é gravar o valor da CheckBox no banco de dados. Neste caso, para não precisar criar colunas em uma tabela que já existe, vamos criar uma tabela nova apenas para gravar o valor das checagens. Vamos deixar preparado para gravar qualquer tipo de checagem:

```sql
CREATE TABLE marcacoes
(
   rotina TEXT NOT NULL,
   chave TEXT NOT NULL
);
ALTER TABLE marcacoes ADD CONSTRAINT pk_marcacoes_rotina_chave (rotina, chave);

```

Quando o registro estiver na tabela, significa que está marcado. Se não estiver, é porque está desmarcado.

| Coluna | Descrição |
| --- | --- |
| rotina | Nome da rotina / operação / entidade. |
| chave | Chave lógica da rotina / operação / entidade |

No seu caso, você poderia gravar assim:

| Coluna | Valor | Comentários |
| --- | --- | --- |
| rotina | VEICULO\_META | Valor fixo que identifica a sua rotina |
| chave | IPY4D79 | Placa do veículo |

Abaixo um exemplo de como inserir na tabela quando o registro for marcado, evitando dupliciades:

```sql
INSERT INTO marcacoes (rotina, chave)
   SELECT 'VEICULO_META', v.placa
   FROM veiculo v
   WHERE v.placa = '{?QUERY placa}'
   AND NOT EXISTS (SELECT 1 FROM marcacoes m WHERE m.chave = v.placa)

```

Para fazer a gravação na Consulta, basta adicionar o Comando SQL abaixo e vincular como referência interna em no Link da coluna usada como CheckBox:

```sql
--#IF {?QUERY coluna_checkbox} = 1

INSERT INTO marcacoes (rotina, chave)
   SELECT 'VEICULO_META', v.placa
   FROM veiculo v
   WHERE v.placa = '{?QUERY placa}'
   AND NOT EXISTS (SELECT 1 FROM marcacoes m WHERE m.chave = v.placa)

--#ELSE

DELETE FROM marcacoes 
WHERE rotina = 'VEICULO_META' 
AND chave = '{?QUERY placa}'

--#ENDIF

```

No Comando SQL acima, com a ajuda das [condições de pre-execução de SQL](https://community.latromi.com.br/t/condicoes-de-pre-execucao-de-sql/540), implementamos a inserção e exclusão da marcação conforme o valor da coluna CheckBox (`1-true` e `0-false`).

## Selecionar os registros marcados

Para selecionar apenas os registros que foram marcados, basta juntar a tabela de veículos com a tabela de marcações usando um `INNER JOIN`:

```sql
SELECT 
   v.*
FROM veiculos v
-- Este JOIN faz com que apenas os veículos marcados sejam exibidos
INNER JOIN marcacoes m ON m.rotina = 'VEICULO_META' AND m.chave = v.placa

```

Para selecionar todos os veículos, e saber quais foram marcados, basta juntar as tabelas usando um `LEFT JOIN`:

```sql
SELECT 
   v.*,
   -- Se houver qualquer valor na chave, 
   -- significa que o JOIN encontrou a marcação. 
   -- Neste caso, retorna "true"
   (m.chave IS NOT NULL) AS marcado
FROM veiculos v
-- Este JOIN faz com que apenas os veículos marcados sejam exibidos
LEFT JOIN marcacoes m ON m.rotina = 'VEICULO_META' AND m.chave = v.placa

```

---

_[View the full topic](https://community.latromi.com.br/t/persistir-marcacao-das-checkboxes-da-consulta/696)._
