Boa tarde, tenho uma aplicação de controle que é um filtro, com essas informações eu abro um grid. Porém, gostaria de saber como eu faço isso, pois tenho 5 campos, e o grid vai filtrar apenas se os 5 forem verdadeiros… Eu gostaria que o usuario tivesse liberdade para escolher um ou dois atributos, e mesmo que ele deixasse os outros sem selecionar o grid filtrasse somente as opções escolhidas, alguem pode me ajudar?
Você pode criar uma variável na grid sendo o where.
Exemplo
Where [var_where_vindodocontrole]
E no controle no onValidade você verifica qual campo foi preenchido e vai montando o valor da query (guardando em outro campo).
Exemplo
controle campo código, nome, campo1, campo2, campo3
on Validate
// criado para guardar o valor do where final
{campo} = " 1=1 "; //iniciando o campo asim as demais condições entram sempre como and
if(!empty({nome}))
{
{campo} .= " AND nome like ‘{nome}%’ ";
}
if(!empty({campo1}))
{
{campo} .= " AND camposql = ‘{campo1}’ ";
}
e assim por diante
Depois edite a ligação control -> grid
irá pedir parâmetro para var_where_vindodocontrole e você passa aquele campo que acumulou o valor. //chamei de campo
Valeuu! Ajudou muito mesmo, mas só mais uma dúvida, como deixar como padrão um campo em branco em um field do tipo Select? Porque ele já vem com um valor (o primeiro do banco), eu gostaria que o primeiro fosse empty para poder fazer isso. Obrigado pela atenção.
Coloque usar título = sim e escreva algo como Selecione no campo ao lado.
Não sei se a sintaxe esta errada, mas não me retorna nenhum registro, o que pode estar errado?
{campo} = " 1=1 ";
if(!empty({trator}))
{
{campo} .= " AND cod_tr = ‘{trator}’ ";
}
if(!empty({colheita}))
{
{campo} .= " AND cod_co = ‘{colheita}’ ";
}
if(!empty({caminhao}))
{
{campo} .= " AND cod_ca = ‘{caminhao}’ ";
}
if(!empty({mt_colhei}))
{
{campo} .= " AND mt_colheitadeira = ‘{mt_colhei}’ ";
}
if(!empty({mt_cavalo}))
{
{campo} .= " AND mt_cavalo = ‘{mt_cavalo}’ ";
}
if(!empty({mt_trator}))
{
{campo} .= " AND mt_trator = ‘{mt_trator}’ ";
}
[variavel_where_composta] = {campo};
sc_redir(grid_balancaTransacao);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
E no grid fiz o seguinte select
SELECT
id,
cod_tr,
cod_co,
cod_ca,
carreta_01,
carregamentoTRA1,
carreta_02,
carregamentoTRA2,
mt_colheitadeira,
mt_cavalo,
mt_trator,
data_inicio,
data_final,
hora_inicio,
hora_final,
latitude_conexao_tr_co,
longitude_conexao_tr_co,
latitude_conexao_tr_ca,
longitude_conexao_tr_ca,
status,
id_identificacao_co,
id_identificacao_ca,
dataInsertBalanca,
idTransacao_RaspCampo,
propriedade,
id_pacote
FROM
balancaTransacao
WHERE
‘[var_where_composta]’
Erro ao acessar o banco de dados
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘tr6655’ ‘’ at line 1
select count(*) from balancaTransacao where ’ 1=1 AND cod_tr = ‘tr6655’ ’
Tirei então as ’ ’ dos campos {}… E agora ele me retorna todos os valores do banco, o que pode ser? Obrigado mesmo pela atenção irmão!
Deu certo, era só tirar as aspas da variavel global no Grid. Obrigado mesmo !
Legal, mude para [RESOLVIDO] o título