Problemas ao retornar um select na grig

Saudações, família Scriptcase!
Estou com dificuldade em imprimir os dados na minha grid com o seguinte código:

$sql=“SELECT ((na_corporativa_um/nr_corporativa_um)*100) FROM avaliacao
WHERE Date(data_dois) =’[data]’ AND matricula_avaliador=[matricula_avaliador] ORDER BY matricula_avaliado”;
sc_lookup(rs,$sql);

if({rs}===false || empty({rs})){
sc_error_message(“Alguns dados não foram inseridos…”);
}

$tamanho = sizeof({rs});
for($i=0;$i<$tamanho;$i++)
{

{desempenho_u}={rs[$i][0]};
}

O que acontece é que não está a devolver os valores exactos. Está a assumir o valor 80 para todos os registos.

Gostaria de saber onde estou a falhar.

{desempenho_u} = 0;

No início do evento onrecord.

Ideal mesmo é que esse select acima fosse um subselect no sql principal da aplicação.

1 Curtida

Saudações, Grande Mestre!
Todo o código que postei acima está mesmo no método onrecord, mas está a exibir dados errados.

Pela imagem, ao fazer (5/4)*100 o resultado seria 125, mas está a exibir 80.

Primeiro Zere o conteúdo do campo desempenho no inicio do evento.
depois coloque em modo debug, e avalie o select de cada linha ou de um echo em $tamanho ou em $i depois do for.

1 Curtida

Zerei o conteúdo do campo desempenho tal como me instruiu;
Activei o modo debug e dei echo as duas variáveis, $tamanho e $i e eis o resultado:
Para $i exibe 0123;
Para $tamanho exibe 4444.
Não sei como solucionar este problema que está comigo há mais de 2h:00.

O WHERE do seu Select está baseado em 2 globais e em nenhum campo referente ao registro da linha que está lendo, então toda vez que o select é executado em cada linha o resultado sempre será o mesmo.

1 Curtida

E qual seria a solução, Grande Mestre?
A minha cabeça até já está a doer. KKKKK

A Regra de Negócio é sua, vc tem que saber qual o resultado deveria apresentar em cada linha.

Só sei que o resultado vai ser o mesmo pois em seu select (sc_lookup) na onrecord o where não condiciona os dados ao registro lido (linha que a onrecord está lendo).

1 Curtida

A regra de negócio é simples:
Eu preciso achar a percentagem entre dois números e popular à um campo vazio da grid que criei na DB.
Por exemplo (5/4)*100 daria 125, mas está a apresentar 80.
Fiz um teste eliminando o WHERE, os valores saíram de 80 a 100.

Estou a ficar tonto com algo que me parece ser muito simple, Mestre.

Não deve funcionar porque o onrecord já é executado a cada registro,
então ele está repetindo o valor

Troca esta parte
$tamanho = sizeof({rs});
for($i=0;$i<$tamanho;$i++)
{

{desempenho_u}={rs[$i][0]};
}

por esta
{desempenho_u}={rs[0][0]};

Se for de outra tabela, acredito que precisa colocar no WHERE um ‘id’ de cada tabela para referenciar os registros,
Ex.: id = {idavaliacao}

No caso de serem campos da mesma tabela das Configurações SQL, pode ser
Na Instruções SQL ((na_corporativa_um/nr_corporativa_um)*100) AS desempenho_u
ou
No Onrecord {desempenho_u} = ((na_corporativa_um/nr_corporativa_um)*100)

1 Curtida

Saudações, família Scriptcase!
Consegui ultrapassar o problema utilizando os próprios campos da tabela na Grid.
Muito obrigado mais uma vez pelo apoio.
Atenciosamente,
Belmiro Constantino

1 Curtida