Como colocar ema variável global em uma instrução Sql ?

Olá pessoal, gostaria de fazer um Sql onde o parâmetro para consulta seria uma variável global.

Ex:

$sql = “SELECT group_id FROM sec_usuariousers_groups WHERE login = “.[usr_login].””;

No caso, quero saber a Id assim que o usuário loga no sistema, porém não sei colocar uma variável global em uma instrução sql!

Alguém pode me ajudar?

Grato!

Olá,

A instrução abaixo está na aplicação app_Login:

$sql = “SELECT
app_name,
priv_access,
priv_insert,
priv_delete,
priv_update,
priv_export,
priv_print
FROM public.sec_groups_apps
WHERE group_id IN
(SELECT
group_id
FROM
public.sec_users_groups
WHERE
login = '”. [usr_login] .")";

sc_select(rs, $sql);

Veja em negrito para que o conteúdo da variável seja utilizada

Att,

Jocimar

Ola Jocimar, eu vi esse exemplo no código gerado pelo SC em aplicação Login, porém essa lógica não deu certo! Pelo menos para o que eu queria fazer! Então fiz de uma forma bem simples:

$user = [usr_login]; // Aqui declarei uma variável onde receberá uma global, no caso o usuário.
$sql = “SELECT group_id FROM sec_usuariousers_groups WHERE login = ‘$user’”; // Aqui passei a variável como parâmetro.
sc_lookup(rs, $sql); // A parti daqui criei um laço if, else pra pegar o resultado do Select e tratar para o determinado fim… no caso, checar qual é a “group_id” do usuário logado.

Muito obrigado pela ajuda!

Abração!

Olá Fred,

Tenho tentado utilizar a macro sc_select() dentro do evento onAfterInsert, porém não consigo tratar o resultado, ou seja, não funciona.

Fiz assim:

Adicionei no evento onAfterUpdate do “formulário de um registro” o código abaixo, porém ao utilizar o sc_alert para verificar o que está capturando o mesmo retorna o conteúdo “count” (sem as aspas). Também tentei utilizar pelo menos 3 campos da tabela (loccod, indcod, cieseq), e o resultado após o sc_select() ao utilizar o sc_alert() é “loccod, indcod, cieseq”.

Objetivo do meu código: Ao incluir um novo registro pai, ou alterar, devo verificar se na tabela filho a existência na sequência 00001:

  • Caso exista, então atualizar alguns campos pela tabela PAI
  • Caso não exista, então adicionar o registro na tabela FILHO (também adicionei este código em onAfterInsert)

$cCIESEQ = “00001”;
sc_select(rs, “SELECT count(*)
FROM web_gerencia.tbl_cgcie
WHERE loccod = '”. {loccod} ."’ AND
indcod = ‘". {indcod} ."’ AND
cieseq = ‘". $cCIESEQ ."’" );
sc_alert( {rs} );

if ({rs} !== false){
sc_alert(“Estou em 1”);
}else{
sc_alert(“Estou em 2”);
}
O resultado da condição if() é sempre mostrar “Estou em 1”, independente se o registro exista ou não.
Também já mudei a condição para “if (count(rs)>1)”, e também permanece mostrando apenas “Estou em 1”.
Após vários testes, não consigo fazer o sc_select() (já testei também pelo sc_lookup()) trazer os resultados esperados, porém em várias funções que criei ao projeto, com a mesma lógica funcionam sem problemas, consigo capturar o resultado, tratar o resultado do resultset, usar o seu conteúdo e tudo mais, porém nestes eventos não consigo.

O que mudar para resolver esta situação nestes eventos ?
Até o momento tentei de tudo, utilizei variáveis locais, mudei para a macro sc_lookup() e nada, realmente não consigo de forma alguma tratar o resultado do sc_select() dentro deste evento, e não sei o que devo fazer.
Se estou tentando fazer algo que realmente não irá funcionar, ou se é algo errado na minha lógica!

Alguém aqui no fórum utiliza ou já utilizou destes eventos para para uso com sc_select() / sc_sql_exec() em outras tabelas ?, há algum link ou material onde possa encontrar apoio para estudos para solucionar isto, ou devo esquecer disto ?, pois até o momento já usei pelo menos umas 15:00 hrs testando este evento.
Neste evento só consegui fazer funcionar se usar o sc_sql_exec(), mas tratar um resultset do sc_select() / sc_lookup() isto não encontrei como fazer!

Att,

Jocimar

Veja só jocimar, tente assim {rs}->fields[posição do campo dentro do recordset]

Ex:

$variavel1 = {rs}->fields[0];
$variavel2 = {rs}->fields[1];

etc…

Obrigado Saulo,

Também já tentei assim, … e nada …
Utilizo também assim em várias funções nas bibliotecas que criei, por isto estou testando mais.
Se utilizo o sc_alert() para mostrar o conteúdo dos campos do formulário {}, ou se passo estes campos para variáveis locais ($), o conteúdo destas variáveis retornam o seu conteúdo.
Também utilizei o sc_alert() para mostrar o resultado do sc_select() criado em uma variável local ($sql), também a instrução é ok. O problema está sendo o retorno do resultset, que não há como tratá-la.
A princípio para não parar neste formulário fiz o seguinte:
No evento onAfterInsert estou utilizando o sc_sql_exec() para o INSERT no BD
No evento onAfterUpdate estou utilizando sc_sql_exec() para o UPDATE no BD (porém o que eu queria fazer era ver se no banco de dados já existia a informação, assim faria um UPDATE, caso contrário um INSERT, mas isto agora ficou de fora, até conseguir descobrir o que está acontecendo com o resultset)

Att,

Jocimar

Att,

Jocimar

Quer uma dica, dentro da aplicação vai em Aplicação / Configuração e coloque a aplicação em modo Debug, você vai ver todas as saídas sql que o seu form gerar, vai ficar mais fácil de encontrar o erro.

Saulo,

Obrigado pela dica!
As instruções realizadas no BD são executadas com o conteúdo corretos!
O problema está no tratamento do resultset, após o sc_select() não estou conseguindo tratá-lo!
Fiz diversos testes neste tratamento, mesmo que nas bibliotecas que desenvolvi não há problemas, porém aqui devo estar apanhando!
Após a linha do sc_select() a última condição IF que tenho é:

if ({rs} !== false){
sc_alert(“Alterando o endereço para entrega”);
}
else{
sc_alert(“Incluindo o endereço para entrega”);
}

E sempre entra no “Alterando”. Como mencionei, a condição if já foi testada com rs[0], rs[0] (sc_lookup()), com count( rs ), count( rs{} ), $variavel = $rs->fields[0], … e várias outras formas, porém não há retorna neste resultset!

Esta condição também testei no evento onValidateSuccess, e nada …

Att,

Jocimar

Jocimar tenta isso:

$cCIESEQ = “00001”;
$sql = “SELECT count(*)
FROM web_gerencia.tbl_cgcie
WHERE loccod = '”. {loccod} ."’ AND
indcod = ‘". {indcod} ."’ AND
cieseq = ‘". $cCIESEQ ."’" );

sc_lookup(rs, $sql);
if (isset({rs[0][0]}))
{
[alert] = {rs[0][0]};
}
else
{
echo ‘Erro!’;
}

$alert = [alert];
sc_alert( $alert );
if ($alert !== false){
sc_alert(“Estou em 1”);
}else{
sc_alert(“Estou em 2”);
}

Pessoal, Obrigado pelas dicas !

O que conclui até o momento, o que preciso fazer não funciona !
Não existe retorno no resultset e não há como tratá-lo em condições IF ou qualquer outra …
Vou deixar para testar na nova versão do SC, pois isto cheira a problema nele …

Deixei assim:
onAfterInsert -> sc_sql_exec() para inserir o registro na outra tabela
onAfterUpdate -> sc_sql_exec() para alterar o registro na outra tabela, porém sem a condição IF, onde poderia inserir ou alterar o registro na outra tabela.

Quem sabe num futuro próximo volte nesta aplicação para testar novamente…

Conclusão do tópico (NÃO RESOLVIDO)

Att,

Jocimar

Caros,

O problema abaixo foi resolvido com a dica do Robert

$cCIESEQ = “00001”;

sc_lookup(rs, “SELECT count(*)
FROM web_gerencia.tbl_cgcie
WHERE loccod = '”. {loccod} ."’ AND
indcod = ‘". {indcod} ."’ AND
cieseq = ‘". $cCIESEQ ."’" );

if ({rs[0][0]} != 0){
{
sc_alert(“Estou em 1”);
}else{
sc_alert(“Estou em 2”);
}

Grato,

Jocimar