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:
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:
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:
--#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, 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
:
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
:
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