Autor Tópico: (RESOLVIDO) - Contar registros  (Lida 8300 vezes)

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 155
    • Email
Re:Contar registros
« Responder #15 Online: Dezembro 18, 2012, 08:10:53 pm »
O problema inicial foi resolvido... tinha que tá escrito assim: if (count({rs}>1)) e não if (count({rs})>1).

O meu código ficou assim em onValidate:
Código: [Selecionar]
/**
 * Recuperando o número de projetos submetidos do proponente
 */

// Check for record
$check_sql = "SELECT id FROM projetos WHERE (id_proponentes = '{proponente}') AND (status = 'Submetido')";
sc_lookup(rs, $check_sql);

if (count({rs}>1))     // Row found
{
    sc_error_message('Este proponente já submeteu o máximo de projetos permitidos.');
}

Só que agora aparece o erro quando submete o primeiro projeto, mas submete...se eu for submeter o segundo aparece o erro, mas submete do mesmo jeito. O que eu quero é q só consiga submeter um, ou seja, dê o erro mas não submeta (validar)

Guto,

Você tem certeza que isto está certo?
Código: [Selecionar]
if (count({rs}>1))
Porque o COUNT só está sendo fechado DEPOIS da condição, quando deveria ser fechado ANTES. talvez seja por ai o problema.

É verdade... não tá certo não

Arquimedes

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 561
  • Ajudar para ser ajudado
Re:Contar registros
« Responder #16 Online: Dezembro 19, 2012, 05:55:24 am »
Eu acho o seguinte:
a) deve haver a contagem no proponente. É isso?
b)contagem deve ser feita na sql.

conforme isso fiz o codigo abaixo e espero ter ajudado.


sc_lookup(rs,"SELECT count(id_proponentes) FROM projetos WHERE (id_proponentes = '{proponente}') AND (status = 'Submetido'");
if(!empty({rs}))
{
   
   $qtd_projetos_prop= {rs}[0][0];
 
   }

if ($qtd_projetos_prop >=1 )     
{
    sc_error_message('Este proponente já submeteu o máximo de projetos permitidos.');
 
}

Atenciosamente Arquimedes
« Última modificação: Dezembro 19, 2012, 12:47:50 pm por Arquimedes »

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Contar registros
« Responder #17 Online: Dezembro 19, 2012, 09:04:00 am »
Eu acho que a questão não é como se faz o count, sql ou via código, a questão é onde distribuir os códigos em eventos. Uma estrutura boa de se seguir em controle, é o exemplo do login, onValidate e onValidateSuccess, como eu disse anteriormente.
-- Design ou programador eis a questão.

Arquimedes

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 561
  • Ajudar para ser ajudado
Re:Contar registros
« Responder #18 Online: Dezembro 19, 2012, 10:01:07 am »
Eu acho que a questão não é como se faz o count, sql ou via código, a questão é onde distribuir os códigos em eventos. Uma estrutura boa de se seguir em controle, é o exemplo do login, onValidate e onValidateSuccess, como eu disse anteriormente.

 Com certeza vc esta certo em parte, pois se nao colocar a chamada em um envento correto o script nao ira funcionar corretamente ou nao ira funcionar, porém de nada adiante colocar ele no lugar certo e o algoritimo errado.


Att Arquimedes
« Última modificação: Dezembro 19, 2012, 10:04:49 am por Arquimedes »

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 155
    • Email
Re:Contar registros
« Responder #19 Online: Dezembro 19, 2012, 02:53:20 pm »
Reorganizei o código todo, tinham algumas coisas no OnValidate que deveriam estar em OnValidateSucess. Tudo que está em onValidateSucess está funcionando.

Coloquei no OnValidate o código, conforme me indicaram:
Código: [Selecionar]
/**
 * Recuperando o número de projetos submetidos do proponente
 */
$check_sql = "SELECT COUNT(id_proponentes)"
   . " FROM projetos"
   . " WHERE id = '" . {proponente} . "' AND status = 'Submetido'";

sc_lookup(rs, $check_sql);

if (!empty({rs}))
   {
      $qtd_projetos_prop = {rs[0][0]};
   }

if ($qtd_projetos_prop > 1)     
{
       sc_error_message('Este proponente já submeteu o máximo de projetos permitidos.');
  }

Rodei a aplicação em modo debug e esse sql é executado normalmente sem apresentar nenhum erro. Porém, não acontece o erro. Submeto o primeiro projeto de determinado proponente, aí ele muda o status do projeto para "Submetido", tudo normal. Ao tentar submeter um segundo projeto para o mesmo proponente, como ele já submeteu um, deveria ser apresentado o erro, mas isso não ocorre e ele consegue submeter um segundo, um terceiro, quantos quiser.

Alguém mais tem uma ideia? Por favor e obrigado mais uma vez pela atenção de todos.

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Contar registros
« Responder #20 Online: Dezembro 19, 2012, 03:17:19 pm »
Veja o retorno dessa variável $qtd_projetos_prop.

Guto id é uma chave primária auto-increment?

Se for ela é única e se for única você nunca terá um COUNT > 1, use > 0 .
-- Design ou programador eis a questão.

Kleyber

  • Expert
  • *****
  • Mensagens: 2235
    • Email
Re:Contar registros
« Responder #21 Online: Dezembro 19, 2012, 03:19:28 pm »
Guto,

Vamos lá: Como eu não vejo a sua aplicação, fica difícil apontar onde está o erro, mas vendo teu código, posso dar algumas sugestões:

1 - Verifique se na tabela PROJETOS os campos ID e STATUS estão mesmo com os dados gravados;
2 - Verifique se no campo STATUS o que está gravado é realmente "Submetido" ou se está "submetido" ou mesmo "SUBMETIDO", pois uma letra sendo diferente (caixa alta ou caixa baixa) pode causar o problema.
3 - Apenas um palpite: Tente trocar isto:
Código: [Selecionar]
if ($qtd_projetos_prop > 1)
por isto:
Código: [Selecionar]
if ($qtd_projetos_prop > "1")
Kleyber Derick

ITIL® V3 Foundation Certified
Analista de Sistemas
São Luís - Maranhão
www.tkinformidia.net

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 155
    • Email
Re:Contar registros
« Responder #22 Online: Dezembro 19, 2012, 03:59:04 pm »
Meu código está assim em onValidate:
Código: [Selecionar]
/**
 * Recuperando o número de projetos submetidos do proponente
 */
$check_sql = "SELECT COUNT(id_proponentes)"
   . " FROM projetos"
   . " WHERE id_proponentes = '" . {proponente} . "' AND status = 'Submetido'";

sc_lookup(rs, $check_sql);

if (!empty({rs}))
   {
      $qtd_projetos_prop = {rs[0][0]};
   }

if ($qtd_projetos_prop > 1)     
{
       sc_error_message('Este proponente já submeteu o máximo de projetos permitidos.');
  }

/**
 * Outras verificações
 */

// Error parameters
$error_test1 = {documentacao} == '0';    // Error test
$error_test2 = {documentacao_especifica} == '0';
$error_test3 = {declaracao_resposta} == '0';
$error_message = 'Se você não anexou a documentação exigida no edital ou não concorda com a declaração, não será possível submeter o projeto à comissão de avaliação.'; // Error message

// Redirection
if ($error_test1 or $error_test2 or $error_test3)
{
sc_error_message($error_message);
}

No código anterior tinha colocado e na clásula WHERE um id e na verdade era id_proponentes, mas isso não interfere em nada. O código agora está certo. Mas não emite o erro. Os demais erros que verificam apenas se o usuário marcou não em algumas das três perguntas que faço, estão apresentando o erro, que o código mostrado mais abaixo.

É formulário controle em que o primeiro campo é do tipo select em que seleciona os proponentes com o processamento ajax no próximo campo que é o nome do projeto, para exibir apenas os projetos do proponente selecionado.

O retorno da contagem do dataset é um string ou um inteiro? alguém sabe de me dizer isso? Se for string como eu converto aqui no SC é da mesma forma que em PHP tipo colocando int($qtd_projetos_prop)?

Já verifiquei e os dados estão gravados da foram que eu coloquei no código, ou seja, "Submetido". Tanto que se eu fizer essa consulta no SQL Builder ele retorna 1, 2 ou o número de projetos do proponente que tenha o status Submetido.

O Sql está sendo executado, to achando que tem haver com fato do tipo do dado retornado no select count.

Mais alguma ideia? Obrigado pela atenção de todos.

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 155
    • Email
Re:Contar registros
« Responder #23 Online: Dezembro 19, 2012, 04:00:05 pm »
Guto,

Vamos lá: Como eu não vejo a sua aplicação, fica difícil apontar onde está o erro, mas vendo teu código, posso dar algumas sugestões:

1 - Verifique se na tabela PROJETOS os campos ID e STATUS estão mesmo com os dados gravados;
2 - Verifique se no campo STATUS o que está gravado é realmente "Submetido" ou se está "submetido" ou mesmo "SUBMETIDO", pois uma letra sendo diferente (caixa alta ou caixa baixa) pode causar o problema.
3 - Apenas um palpite: Tente trocar isto:
Código: [Selecionar]
if ($qtd_projetos_prop > 1)
por isto:
Código: [Selecionar]
if ($qtd_projetos_prop > "1")

Chequei os dados e eles estão certos e fiz a mudança em "1" e deu na mesma, não chega no erro.

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Contar registros
« Responder #24 Online: Dezembro 19, 2012, 04:01:01 pm »
Tentou o 0?
-- Design ou programador eis a questão.

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 155
    • Email
Re:Contar registros
« Responder #25 Online: Dezembro 19, 2012, 04:13:58 pm »
Tentou o 0?

A qual id te referes? no código ique tinha colocado WHERE id, na verdade é WHERE id_proponentes.

id_proponentes é um campo que armazena o número do id do proponentes da tabela proponentes na tabela projetos, onde é feito o select.

O fato é que colocando o 0 funcionou. Mas to achando isso estranho. Minha dúvida é estando colocado "> 1" significa que só emitir o erro a partir do 3º...ainda não testei...hehehe... Obrigado.

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Contar registros
« Responder #26 Online: Dezembro 19, 2012, 04:22:53 pm »
Guto, o problema que eu acho é que sempre está retornando 1.

Vamos lá vou tentar entender a estrutura da sua tabela.

id_proponente              status
1                                   Submetido
id_proponente              status
1                                   Submetido

Isso é possível? Essa tabela possui 2 proponentes diferentes?

Ou

id_proponente              status
1                                   Submetido
id_proponente              status
2                                   Submetido
id_proponente              status
3                                   Submetido
id_proponente              status
4                                   NULL

Ou essa chave nesta tabela é única?


Já tentou colocar a em modo de debug pegar o SQL e jogar no Administrador?

Vamos tentar entender isso, pois não acho possível.
-- Design ou programador eis a questão.

Arquimedes

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 561
  • Ajudar para ser ajudado
Re:Contar registros
« Responder #27 Online: Dezembro 19, 2012, 04:28:50 pm »
Teria como colocar o sql da tabela projetos, para gente fazer os testes.


Att Arquimedes

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 155
    • Email
Re:Contar registros
« Responder #28 Online: Dezembro 19, 2012, 04:31:51 pm »
Guto, o problema que eu acho é que sempre está retornando 1.

Vamos lá vou tentar entender a estrutura da sua tabela.

id_proponente              status
1                                   Submetido
id_proponente              status
1                                   Submetido

Isso é possível? Essa tabela possui 2 proponentes diferentes?

Ou

id_proponente              status
1                                   Submetido
id_proponente              status
2                                   Submetido
id_proponente              status
3                                   Submetido
id_proponente              status
4                                   NULL

Ou essa chave nesta tabela é única?


Já tentou colocar a em modo de debug pegar o SQL e jogar no Administrador?

Vamos tentar entender isso, pois não acho possível.

O proponente poder ter vários projetos, mas só poderá submeter um, ou seja, na tabela projetos o campo id_proponentes vai poder ter repetições, por exemplo:

tabela projetos:
id      id_proponentes                        status
1                1                                   Em inscrição
2                1                                   Submetido
3                1                                   Em execução
4                1                                   Submetido

O que é chave única é o id que identifica o projeto.

No exemplo acima, se fizer esse mesmo select que está no meu código no sql builder, ele retorna 2, ou seja, existem dois projeto do proponente 1 com status Submetido.

Tenho que entender isso pq depois vou colocar esse número máximo de projetos através de uma variável, pq hoje o limite para submissão é 1, mas pode mudar pra 2 ou 3 sei lá.

Obrigado!

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Contar registros
« Responder #29 Online: Dezembro 19, 2012, 04:34:50 pm »
Guto, tem skype?  Me adicione: robertewem.
-- Design ou programador eis a questão.