Atualizar campo ao executar uma consulta [RESOLVIDO]

Bom dia, pessoal! Alguém poderia me ajudar nesse caso?

Estou querendo atualizar um campo (vencimento_atual) da tabela ao executar uma aplicação de consulta.
Coloquei o código abaixo na aplicação de consulta, mas o campo (vencimento atual) não recebe valor.

[id_portaria] = {id_portaria};
[termino1_portaria] = {termino1_portaria};
[termino2_portaria] = {termino2_portaria};

if({termino1_portaria} > {termino2_portaria}){
sc_exec_sql (“UPDATE tb_4b_portaria SET vencimento_atual = 2021-01-01 WHERE {id_portaria} = {id_portaria}”);
}else{
sc_exec_sql (“UPDATE tb_4b_portaria SET vencimento_atual = 2022-06-02 WHERE {id_portaria} = {id_portaria}”);
}

Quando se fala em consulta (grid), os campos {} referenciados recebem um valor em cada linha da consulta.

O evento onde esses dados ficam disponíveis (por linha) é o onRecord.

Você não diz onde colocou esse código.

Valendo lembrar que se a configuração da consulta estiver para paginação parcial, a onrecrod sói será executada para os registros visualizados em tela.

Então, estava colocando no OnScriptInit… fiz a mudança para o onRecord e setei as variáveis como entrada, agora aparece erro de sintaxe…

coloque no modo debug.

apresente seu código aqui entre [code] e [/code]

[id_portaria] = {id_portaria};
[termino1_portaria] = {termino1_portaria};
[termino2_portaria] = {termino2_portaria};

if({termino1_portaria} > {termino2_portaria}){
sc_exec_sql (“UPDATE tb_4b_portaria SET vencimento_atual = 2021-01-01 WHERE {id_portaria} = {id_portaria}”);
}else{
sc_exec_sql (“UPDATE tb_4b_portaria SET vencimento_atual = 2022-06-02 WHERE {id_portaria} = {id_portaria}”);
}

Resultado do debug:
1064: Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MariaDB para a sintaxe correta a ser usada perto de ‘“UPDATE tb_4b_portaria SET vencimento_atual = 2021-01-01 WHERE 1 = 1 ”’ na linha 1

WHERE {id_portaria} = {id_portaria} e isso não faz sentido

[id_portaria] = {id_portaria};
[termino1_portaria] = {termino1_portaria};
[termino2_portaria] = {termino2_portaria};

if({termino1_portaria} > {termino2_portaria}){
sc_exec_sql (“UPDATE tb_4b_portaria SET vencimento_atual = '{termino1_portaria}' WHERE {id_portaria} = {id_portaria}”);
}else{
sc_exec_sql (“UPDATE tb_4b_portaria SET vencimento_atual = '(termino2_portaria}' WHERE {id_portaria} = {id_portaria}”);
}

Na verdade, no lugar da data, seria o respectivo campo “termino1_portaria” ou “termino2_portaria” da linha específica… Por isso o WHERE no final.

vencimento_atual = 2022-06-02

você precisa colocar acentuação…
tipo assim : vencimento_atual = ‘2022-06-02’

Entendi, porém, no lugar dessa data é um campo, correspondente a cada linha da tabela, ou seja, terá o preenchimento dinâmico…

cara esse where ñ está fazendo mt sentido … normalmente a gente referencia o update com o id

Não interessa, tem que ser emcapsulado da mesma forma.

Quando for expor um código, ele deve ser exatamente com está em sua aplicação.

o where continua não fazendo sentido pois a condição vai ser sempre verdadeira.

1 Curtida

Eu referenciei com o campo do id por se tratar de uma consulta, mas, pelo que entendi do que o Haroldo comentou, o resultado virá de cada linha apresentada na consulta.

1 Curtida

SIm, extato, afinal é uma consulta.

Agora entendi… porém, mesmo colocando entre aspas simples, o erro de sintaxe permanece…

[id_portaria] = {id_portaria};
[termino1_portaria] = {termino1_portaria};
[termino2_portaria] = {termino2_portaria};

if({termino1_portaria} > {termino2_portaria}){
sc_exec_sql (“UPDATE tb_4b_portaria SET vencimento_atual = '{termino1_portaria}'”);
}else{
sc_exec_sql (“UPDATE tb_4b_portaria SET vencimento_atual = '(termino2_portaria'”);
}

Resultado do debug:
1064: Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MariaDB para a sintaxe correta a ser usada perto de ‘“UPDATE tb_4b_portaria SET vencimento_atual = ‘2022-12-12’”’ na linha 1

Essa instrução estará mudando o valor de todos os registros da tabela.

Isso não faz sentido em uma consulta (onrecord)

[id_portaria] = {id_portaria};
[termino1_portaria] = {termino1_portaria};
[termino2_portaria] = {termino2_portaria};

Acredito eu que o where suposto seria:

WHERE id_portaria = {id_portaria}”);

Aqui vc atualiza o vencimento_atual de cada registro exibido na consulta (se id_protaria for chave exclusiva na tabela tb_4b_portaria).

Exatamente, o id_portaria é chave exclusiva nessa tabela.

Vou tentar essa alteração que sugeriu.

Funcionou quase que perfeitamente!!
A consulta fez a atualização, porém, tenho que atualizar a página para que ela exiba o resultado.
Teria alguma forma de ser executado, por exemplo no onScriptInit, para que pudesse executar sem a necessidade desse refresh?

em configuração coloque como paginatal total.

Deu certo!! Muito obrigado pela ajuda, Haroldo e Lucas!

1 Curtida