WHERE DINAMICO NO FILTRO.

(pauloper) #1

Ola Pessoal,
Preciso de uma dica.
Estou executando (adicionando clausura WHERE em tempo de execucao) numa consulta a Macro:

sc_select_where(add) = “AND where b.idsetor = [glo_setor]”;

Que filtra a consulta conforme o Setor liberado no Login. Ate aqui tudo OK.
Ele filtra corretamente os dados conforme a macro.
O problema é quando chamo o Filtro da Consulta, informo uma pesquisa por Nome,
por exemplo e quando clico para executar a consulta pelo Filtro retorna um erro:

ERROR: syntax error at or near “where” at chacacter 99
select … where a.nome like '%PAULO’where b.idetor = 11

ou seja, quando executo o Filtro ele informa mais uma clausula WHERE, dando o erro.

O correto seria:
select … where a.nome like ‘%PAULO’ AND b.idetor = 11

ALGUEM TEM ALGUMA IDEIA DE COMO RESOLVER ???
Obrigado.

Paulo.

(Rodrigo Lins) #2

Bom Dia,

Quando utiliza-se o filtro da aplicação e o “where dinâmico”, tem que verificar se já existe um WHERE para no caso, não ser duplicado o mesmo, além do mais, o que foi colocado por você está errado não existe “AND where…”. De qualquer maneira, existe uma variável que verifica se o SQL da aplicação possui um WHERE ou não.

Exemplo:

if (empty({sc_where_atual})){

 sc_select_where(add) = "where b.idsetor = [glo_setor]";

} else {

 sc_select_where(add) = "AND b.idsetor = [glo_setor]";

}

Coloque este código no evento onInit da sua consulta.

Espero ter ajudado.

Rodrigo Lins.

(pauloper) #3

OK Rodrigo, ja tinha feito isso,mas mesmo assim nao funciona.
faça um teste; crie uma consulta, sem where e use a marcro,
voce vai ver que funciona na consulta, mas quando voce clica
para impressao, PDF, gerar grafica nao funciona.

Nao seria isso o Bug do SC ???

Paulo.