(RESOLVIDO) - Contar registros

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 .

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:

if ($qtd_projetos_prop > 1)

por isto:

if ($qtd_projetos_prop > "1")

Meu código está assim em onValidate:

/**
 * 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.

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

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.

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.

Teria como colocar o sql da tabela projetos, para gente fazer os testes.

Att Arquimedes

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!

Guto, tem skype? Me adicione: robertewem.

Não uso skype…tenho msn… o msn q tá no teu perfil é esse mesmo…vou te adicionar lá.

Mas uma vez quero agradecer a todos que me ajudaram. Consegui resolver o meu problema. Vou postar agora como ficou o código do meu onValidate:

//Selecionando o limite de projetos que podem ser submetidos da tabela edital
$sql_limite = "SELECT lim_projetos FROM edital";

sc_lookup(ds, $sql_limite);

if (!empty({ds}))
	{
		$maximo_projetos = {ds[0][0]} - 1;	
	}

/**
 * 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 > $maximo_projetos)
	{
		sc_error_message('Este proponente já submeteu o máximo de projetos permitidos.');
		sc_error_exit();
 	}

Um mudança em relação aos códigos postados anteriormente por mim é que faço um select em uma tabela que contem o máximo de projetos, porque assim tem como tá mudando isso via aplicação, sem precisar mexer no código.

Percebi que basta eu subtrair 1 do número máximo de projetos que podem ser submetidos e funcionou. Testei aumentando, ou seja, ao invés de no máximo um projeto, dois e assim por diante, está funcionando. Quando o usuário tenta submeter um projeto além do máximo permitido, não submete e exibe o erro.

Grato a todos!

Boa Guto, as vezes a solução é parar de programar um pouco e voltar com a cabeça mais arejada.