# 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:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![josimar.picoloto](https://community.latromi.com.br/user_avatar/community.latromi.com.br/josimar.picoloto/32/1102_2.png) [@josimar.picoloto](https://community.latromi.com.br/u/josimar.picoloto)\
**Post date:** [Outubro 19, 2021, 7:29pm UTC](https://community.latromi.com.br/t/persistir-marcacao-das-checkboxes-da-consulta/696/1 "2021-10-19T19:29:59Z")

</div>

Boa tarde Pessoal !  
Daniel, tem algum exemplo onde seja utilizado um checkbox para fazer a seleção da consulta ?  
Preciso criar uma seleção onde o usuário irá marcar quais veiculos irá utilizar para verificação de metas…  
Montei o layout da seguinte forma, estou consultando os veiculos ativos e que seriam base para essa medição que tenho no cadastro de veiculos do Avacon…

Ai com o Checkbox queria jogar eles para a tabela do lado… e de lá vou utilizar no restante das telas para fazer os calculos das metas deles…  
Minha principal dúvida é como “jogar” eles para lá e ter uma marcação de que aquele veiculo está ativo para validações em metas de acompanhamento…

Não sei se consegui transmitir a ideia do que queria fazer…

 ![image](https://community.latromi.com.br/uploads/default/original/1X/7e533e61a9dfcd806a7e2ccea9c357626d802f9e.png)

---

<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

```

---

<div class="post-metadata">

**Author:** ![josimar.picoloto](https://community.latromi.com.br/user_avatar/community.latromi.com.br/josimar.picoloto/32/1102_2.png) [@josimar.picoloto](https://community.latromi.com.br/u/josimar.picoloto)\
**Post date:** [Outubro 21, 2021, 2:19pm UTC](https://community.latromi.com.br/t/persistir-marcacao-das-checkboxes-da-consulta/696/3 "2021-10-21T14:19:13Z")

</div>

> [@daniel.giacomelli](#):
>
> ```nohighlight
> --#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
> 
> ```

Olá Daniel!  
Grato pela ajuda até o momento já consegui evoluir bastante na tela, porém estou enfrentando dificuldades nesse ponto, ou seja, ao selecionar o checkbox ele não está fazendo a insersção na tavela de controle…

Porém não consegui identificar o problema, os testes que realizei fora: Se eu rodar o insert trocando apenas o ‘{?QUERY placa}’ ele faz a insersão, porém se for pelo check box não,

> [@](#):
>
> ```nohighlight
> --#IF {?QUERY marcado} = 0 ***TESTEI TANTO COM 0 COMO COM 1***
> 
> INSERT INTO silvestrin.checkmarcacoes (rotina, chave)
> SELECT 'VEICULO_META', v.placa
> FROM veiculo v
> WHERE v.placa = '{?QUERY placa}'
> AND NOT EXISTS (SELECT 1 FROM silvestrin.checkmarcacoes m WHERE m.chave = v.placa)
> 
> --#ELSE
> 
> DELETE FROM silvestrin.checkmarcacoes
> WHERE rotina = 'VEICULO_META' 
> AND chave = '{?QUERY placa}'
> 
> --#ENDIF
> 
> ```

Tens algum dica de onde posso estar cometendo o erro ?

---

<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 21, 2021, 5:07pm UTC](https://community.latromi.com.br/t/persistir-marcacao-das-checkboxes-da-consulta/696/4 "2021-10-21T17:07:20Z")

</div>

@josimar.picoloto, eu criei este exemplo usando o modo legado de valores booleanos, (0 e 1)

![image](https://community.latromi.com.br/uploads/default/original/1X/d8b14e507a66f9c4764f42abe4ab4bcbcb5b0fba.png).

Se essa opção estiver desmarcada na sua Consulta, faça a condição da seguinte forma:

```sql
--#IF {?QUERY marcado} 

--#ELSE

--#ENDIF

```

---

<div class="post-metadata">

**Author:** ![josimar.picoloto](https://community.latromi.com.br/user_avatar/community.latromi.com.br/josimar.picoloto/32/1102_2.png) [@josimar.picoloto](https://community.latromi.com.br/u/josimar.picoloto)\
**Post date:** [Outubro 21, 2021, 5:48pm UTC](https://community.latromi.com.br/t/persistir-marcacao-das-checkboxes-da-consulta/696/5 "2021-10-21T17:48:32Z")

</div>

A opção até estava marcada…  
tentei desmarcar e então testar da outra maneira porém sem sucesso também…

---

<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 21, 2021, 5:55pm UTC](https://community.latromi.com.br/t/persistir-marcacao-das-checkboxes-da-consulta/696/6 "2021-10-21T17:55:04Z")

</div>

Nestes exemplos que criei, o nome da coluna é “marcado”. Você usou este mesmo nome?

Tente colocar isso no início do Comando SQL (antes das condições):

```sql
-- Marcado: {?QUERY marcado}

```

Aí então habilite o **Log de Usuário** e veja como o SQL está sendo executado. Pode postar aqui os comandos para verificarmos.

---

<div class="post-metadata">

**Author:** ![josimar.picoloto](https://community.latromi.com.br/user_avatar/community.latromi.com.br/josimar.picoloto/32/1102_2.png) [@josimar.picoloto](https://community.latromi.com.br/u/josimar.picoloto)\
**Post date:** [Outubro 25, 2021, 2:10pm UTC](https://community.latromi.com.br/t/persistir-marcacao-das-checkboxes-da-consulta/696/7 "2021-10-25T14:10:19Z")

</div>

Dani, Segue logs…  
Parametros da consulta:

![image](https://community.latromi.com.br/uploads/default/original/1X/76f2889d677fcd3f373383b45ed579ec4a131dc2.png)

Consulta:

```auto
Select
'' AS leg_ativoinativo
,'' AS leg_tipodefrota
,veiculo.tipofrota as tipofrota
,veiculo.placa as placa
,marcaveiculo.descricao as marca
,marcaveiculo_modelo.descricao as modelo
,veiculo.anofabricacao as ano

,veiculo.ativoinativo
,veiculo.proprietario 
,veiculo.empresa 
,(silvestrin.checkmarcacoes.chave IS NOT NULL) AS marcado

from veiculo

LEFT JOIN silvestrin.checkmarcacoes
ON silvestrin.checkmarcacoes.rotina = 'VEICULO_META'
AND silvestrin.checkmarcacoes.chave = veiculo.placa

left join marcaveiculo 
on marcaveiculo.codigo = veiculo.marcaveiculo 

left join marcaveiculo_modelo
on marcaveiculo_modelo.codigo = veiculo.modeloveiculo 

where veiculo.tipofrota = 1
and veiculo.tipoveiculo = 'CVTR'
and veiculo.ativoinativo = 1
and veiculo.empresa = 1

order by veiculo.placa

```

SQL do Checkbox:

```auto
-- Marcado: {?QUERY marcado}

--#IF {?QUERY marcado} = 1

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

--#ELSE

DELETE FROM silvestrin.checkmarcacoes
WHERE rotina = 'VEICULO_META' 
AND chave = '{?QUERY placa}'

--#ENDIF

```

LOG:

```auto

****************************Sql Command****************************

-- Marcado: NULL

DELETE FROM silvestrin.checkmarcacoes
WHERE rotina = 'VEICULO_META' 
AND chave = 'IQY1A39'

```

---

<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 26, 2021, 10:17pm UTC](https://community.latromi.com.br/t/persistir-marcacao-das-checkboxes-da-consulta/696/8 "2021-10-26T22:17:41Z")

</div>

Boa Tarde @josimar.picoloto

Estive estudando este caso e acho que descobri um Bug.

Pelo fato das [Condições de pre-execução de SQ](https://community.latromi.com.br/t/condicoes-de-pre-execucao-de-sql/540)L serem declaradas dentro de comentários de linha do SQL, o sistema não considera necessário levar do Browser para o Servidor o valor das colunas que estão sendo utilizadas nas condições. Neste caso, as condições só funcionam quando os valores utilizados no teste também são usados em alguma parte do Comando SQL.

Para contornar este problema, tente adicionar o valor da coluna “marcado” no comando SQL apenas para que o valor seja enviado ao servidor no momento da checagem, e me avise se funcionou.

Exemplo:

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

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

--#ELSE

DELETE FROM silvestrin.checkmarcacoes
WHERE rotina = 'VEICULO_META' 
AND chave = '{?QUERY placa}'

--#ENDIF

-- A linha abaixo serve apenas para garantir que o valor da coluna será enviado para o servidor
;SELECT {?QUERY marcado} AS marcado

```

---

<div class="post-metadata">

**Author:** ![josimar.picoloto](https://community.latromi.com.br/user_avatar/community.latromi.com.br/josimar.picoloto/32/1102_2.png) [@josimar.picoloto](https://community.latromi.com.br/u/josimar.picoloto)\
**Post date:** [Outubro 27, 2021, 4:56pm UTC](https://community.latromi.com.br/t/persistir-marcacao-das-checkboxes-da-consulta/696/9 "2021-10-27T16:56:37Z")

</div>

Dani!  
Agora funcionou!  
Obrigado pela ajuda ai
