Alterar cláusula WHERE dinamicamente

Olá pessoal,

Estou tentando alterar a cláusula WHERE do SQL da aplicação através do código abaixo no evento onScriptInit mas, embora não retorne erro algum, também não executa nada. Como é só um teste, estou passando para a cláusula o valor da variável que recebe o código do Perfil de usuário (1).

if (empty({sc_where_atual})){ sc_select_where(add) = "WHERE ID = ".[vlPerfil]; } else { sc_select_where(add) = " AND ID = ".[vlPerfil]; };

Alguém sabe o porque de não estar funcionando?

Grato,

Ilano.

Só funciona em Grid (Consulta).

Então não tem como fazer o mesmo utilizando aplicações do tipo Formulário?

Usando essa macro não.

Então, qual macro e como utilizo?

tem que usar uma global jogar a instrução nela dinamicamente e colocar essa global no sql do formulário.

Oi pessoal, eu estou com um problema nesse sentido.

Em uma grid, a consulta dos campos é fixa. O que eu preciso mudar é a causa WHERE. Ora o filtro é um campo inteiro e hora é um filtro texto.

Quando filtro é TEXTO, o grid retorna o seguinte erro:
-1: ERROR: syntax error at or near “” LINE 1: …view_empresa_completa WHERE pes_id_responsavel = '12345678… ^

No SQL do grid eu tenho o seguinte:

SELECT campo1, campo2 FROM view_empresa_completa WHERE [par_ClausulaWhere]

Na chamada do grid eu tenho o seguinte:

$_sClausulaWhere = “emp_id = {e.emp_id}”; // parametro numerico
(…)
$_sClausulaWhere = "pes_id_responsavel = ‘{e.pes_id_responsavel}’ "; // parametro texto

{c_grupo_resp} = “”;
sc_link (c_grupo_resp, grid_grupo_empresa, par_ClausulaWhere=$_sClausulaWhere; par_Titulo = “EMPRESAS VINCULADAS A: “.$_sTemp, “Grupo de empresas”,”_self”);

Alguém me ajuda?

Apenas complementando, aparentemente o gerador de código está incluindo uma contra-barra antes das aspas simples.

Não use where no SQL principal, em vez disse utilize a macro sc_select_where(add) (Veja webhelp) no evento onscriptinit.

Ja tentei isso Haroldo, mas ao gerar o código, a string where campo1 = ‘abc’ acaba virando where campo1 = \‘abc\’.

cole o seu código aqui entre as tags do editor [code] e [/code]

Perfeito, vou refazer o código com essa macro e já posto.

Na chamada da GRID:

	$_sClausulaWhere = " where pes_id_responsavel = '{e.pes_id_responsavel}' ";
	{c_grupo_resp} = "<img src='".[vg_CaminhoIcone]."ico_grupo_resp_16.png' />";
	sc_link (c_grupo_resp, grid_grupo_empresa, par_ClausulaWhere=$_sClausulaWhere; par_Titulo = "EMPRESAS VINCULADAS A: ".$_sTemp, "Grupo de empresas","_self");

No SQL da GRID:

SELECT
    emp_id,
    emp_ativa,
    fk_pes_id,
    emp_numero,
    pes_id_responsavel,
    emp_statushonorario,
    emp_vinculocliente,
    emp_vinculohonorario,
    pes_nome,
    pes_apelido,
    fk_scl_id
FROM
    view_empresa_completa
ORDER BY 
    pes_apelido

No evendo onScriptInit da GRID:

sc_select_where(add) = [par_ClausulaWhere];

Mensagem de erro:

Captura de Tela 2022-05-10 às 14.03.12

Se voce substituir par_ClausulaWhere=$_sClausulaWhere; por par_ClausulaWhere=" where pes_id_responsavel = '{e.pes_id_responsavel}' "; ?

Eliminando uma passo, acho q o problema é q o SC adiciona os barras para evitar erros com aspas

Tente passar um url_encode no.parametro da chamada da.grid, e um url_decode antes da macro sc_select_where

1 Curtida

João, a tua dica funcionou! Como eu vou usar filtros diferentes, vou ter que incluir um parametro a mais na chamada. Mas isso é tranquilo.

Obrigado a todos!

1 Curtida