[RESOLVIDO] Problema SQL ao concatenar string com variável

Criei um método m_php_ObtemUltimoProjetoUsuario() para retornar o último projeto anteriormente acessado pelo usuário logado;
Esse método é chamado no evento OnApplicationInit;

Ao executar a aplicação acontece o erro quando executar a sql abaixo, porque no final não está terminando a string com aspas simples. Não sei porque não concatena apesar de eu ter codificado para terminar a string com esta aspas simples.

O erro só acontece quando eu informo somente letras na variável
(firebird): select max(nr_orc_010), max(nr_seq_010) from dadoscro where nm_usuario = 'admin

Mas, se eu informar número na variável a string é fechada com as aspas simples corretamente
(firebird): select max(nr_orc_010), max(nr_seq_010) from dadoscro where nm_usuario = ‘111’
(firebird): select max(nr_orc_010), max(nr_seq_010) from dadoscro where nm_usuario = ‘a1b1c1’

abaixo trecho do método m_php_ObtemUltimoProjetoUsuario() onde monto a string do sql:

$v_usr_login = [usr_login];
$v_sql = “select max(nr_orc_010), max(nr_seq_010) from dadoscro where nm_usuario = '”.$v_usr_login."’";
sc_lookup(rs, $v_sql);

Pergunto:
Qual a forma correta de montar a string sql ?

Obrigado

Tenta assim:

$v_sql = "select max(nr_orc_010), max(nr_seq_010) from dadoscro where nm_usuario = '$v_usr_login' ";

Ronyan,
Fiz como você me passou.
Agora acontece o erro abaixo:

Fatal error: Uncaught Error: Call to a member function mensagem() on null in C:\Program Files\NetMake\v9\wwwroot\scriptcase\app\CronogramaWeb\form_FERIADOS_PRJ\form_FERIADOS_PRJ_apl.php:4213 Stack trace: #0 C:\Program Files\NetMake\v9\wwwroot\scriptcase\app\CronogramaWeb\form_FERIADOS_PRJ\form_FERIADOS_PRJ_apl.php(495): form_FERIADOS_PRJ_apl->m_php_ObtemUltimoProjetoUsuario() #1 C:\Program Files\NetMake\v9\wwwroot\scriptcase\app\CronogramaWeb\form_FERIADOS_PRJ\form_FERIADOS_PRJ_apl.php(1189): form_FERIADOS_PRJ_apl->ini_controle() #2 C:\Program Files\NetMake\v9\wwwroot\scriptcase\app\CronogramaWeb\form_FERIADOS_PRJ\index.php(2138): form_FERIADOS_PRJ_apl->controle() #3 {main} thrown in C:\Program Files\NetMake\v9\wwwroot\scriptcase\app\CronogramaWeb\form_FERIADOS_PRJ\form_FERIADOS_PRJ_apl.php on line 4213

Obrigado

Ativa o modo debug da aplicação em “Aplicação > Configurações”.
E checa o SQL que tá sendo executado e posta aqui por favor…

Ronyan,

Usando a sintaxe que você me passou usando a variável entre as aspas simples:
–> $v_sql = "select max(nr_orc_010), max(nr_seq_010) from dadoscro where nm_usuario = ‘$v_usr_login’ ";
Acontece o erro que eu postei acima em (Março 15, 2018, 09:14:56 pm);
Nem chega a executar o sql. O select nem chega a aparecer no modo debug.

Quando codifico sem a aspas simples, assim:
–> $v_sql = “select max(nr_orc_010), max(nr_seq_010) from dadoscro where nm_usuario = $v_usr_login”;
O sql que aparece no debug fica sem a aspas simples, e claro gerando erro na execução da instrução sql:
(firebird): select max(nr_orc_010), max(nr_seq_010) from dadoscro where nm_usuario = admin
-104: Dynamic SQL Error SQL error code = -104 Token unknown - line 1, column 74 admin

Considerando a minha primeira postagem deste tópico, já são três formas diferentes que eu tentei erroneamente.

Obrigado.
Abraço.

PS: Se alguém puder me indicar onde encontro estas informações referente a este tópico aqui no fórum ou no site do scriptcase. Agradeço antecipadamente.

Pessoal,

Verifiquei que as duas formas abaixo de concatenar strings são corretas e funcionam:
$v_sql = “select max(nr_orc_010), max(nr_seq_010) from dadoscro where nm_usuario = '”.$v_usr_login."’ ";
$v_sql = "select max(nr_orc_010), max(nr_seq_010) from dadoscro where nm_usuario = ‘$v_usr_login’ ";

Mas quando a string $v_usr_login possui o valor conteúdo ‘admin’ É QUE ACONTECE o erro !
Se o valor da string $v_usr_login tiver outros valores como ‘ADMIN’, ‘Admin’, ‘master’, etc… NÃO ACONTECE o erro !

Pergunto: Alguém já passou por isso ? Seria um bug ? Alguem na netmake pode verificar ?

No aguardo, obrigado.

Oi!

A macro sc_lookup só funciona no evento OnApplicationInit nas aplicações de “menu”.

Se você estiver utilizando outra aplicação, chame o método no evento OnScriptInit

–> http://www.scriptcase.com.br/aprendizagem/documentacao/pt_br/v9/manual/14-macros/01-visao-geral/#sc_lookup

A aplicação é do tipo FORMULÁRIO.
E o sc_lookup() está no método que está sendo chamado no evento OnScriptInit do formulário.

Para encerrar este tópico quero esclarecer aqui que o erro que eu mencionei na postagem anterior em (Março 15, 2018, 09:14:56 pm) estava sendo causado por erro de codificação mesmo. Peço desculpas.

Quanto ao assunto inicial deste tópico “Problema SQL ao concatenar string com variável”:
As duas sintaxes para concatenar string sql firebird abaixo funcionam para sc_lookup():
–> $v_sql = “select max(nr_orc_010), max(nr_seq_010) from dadoscro where nm_usuario = ‘$v_usr_login’ “;
–> $v_sql = “select max(nr_orc_010), max(nr_seq_010) from dadoscro where nm_usuario = '”.$v_usr_login.”’”;

Obrigado a todos,
Especialmente ao Ronyan.