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

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 156
    • Email
(RESOLVIDO) - Contar registros
« Online: Setembro 01, 2012, 05:18:29 pm »
Boa tarde a todos...

Tenho uma aplicação de controle que faz algumas verificações pra definir o redirecionamento entre outras coisas.
O que eu estou querendo fazer é um select em uma tabela e contar a quantidade de registros encontrados. Tipo quantas linhas terá no array do dataset de resultado. O que eu preciso é se o número de registros encontrados for, por exemplo, maior que 2, então não será possível submeter. Algo assim.

Alguém poderia me orientar por favor?
« Última modificação: Dezembro 20, 2012, 03:11:00 pm por gutoribeiro »

Bernhard

  • Administrator
  • Expert
  • *****
  • Mensagens: 1619
Re:Contar registros
« Responder #1 Online: Setembro 02, 2012, 10:13:40 pm »
Boa noite,

O Sr. pode fazer um SELECT COUNT  na sua tabela com a macro sc_lookup.

att,
Bernhard Bernsmann

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 156
    • Email
Re:Contar registros
« Responder #2 Online: Setembro 03, 2012, 01:33:58 pm »
Boa noite,

O Sr. pode fazer um SELECT COUNT  na sua tabela com a macro sc_lookup.

att,
Bernhard Bernsmann

Certo, entendi, já pesquisei a respeito na web sobre o select count... mas poderia me orientar sobre como tratar isso como um valor, por exemplo, o retorno desse select count se ele for menor ou igual a 2 registros, faça isso, caso contrário, faça aquilo...dentro de if else?

Tipo a estrutura abaixo:

$check_table = 'projetos';    // Nome da tabela
$check_where = "status = 'Em avaliação'"; // Condição

$check_sql = 'SELECT id_proponente'
   . ' FROM '  . $check_table
   . ' WHERE ' . $check_where;
sc_lookup(ds, $check_sql);

if (isset({ds[0][0]}))
   {
   ????
   }
else   
   {
   sc_error_message('Não é possível submeter projeto, pois o proponente já excedeu o máximo de projetos submetidos permitidos!');
   }

Grato pela atenção!

Bernhard

  • Administrator
  • Expert
  • *****
  • Mensagens: 1619
Re:Contar registros
« Responder #3 Online: Setembro 04, 2012, 12:38:56 am »
O SELECT COUNT só retorna 1 valor, que será armazenado na posição
  • [0] do seu array.


Então o que o Sr. precisa fazer é trabalhar em cima do {ds[0][0]} fazendo quaisquer verificações de lógica programacional.

O Sr. pode sempre entrar em contato com nosso suporte.

Att,
Bernhard Bernsmann

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 156
    • Email
Re:Contar registros
« Responder #4 Online: Dezembro 18, 2012, 12:33:16 pm »
Alguém pode me ajudar... tentei o seguinte código

Código: [Selecionar]
/**
 * Recuperando o número de projetos submetidos do proponente
 */

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

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

Testei o comando SQL no sql builder e tá funcionando, mas o código não está barrando, ou seja, quando um determinado proponente já submeteu um projeto, e tenta submeter um segundo, não aparece o erro.

Eu acho que o número que é retornado é uma string e não integer. Tentei armazenar o resultado do {rs[0][0]} em uma variável e tentei converter com int($string) mas também não deu certo.


Alguém pode me ajudar?

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Contar registros
« Responder #5 Online: Dezembro 18, 2012, 12:44:52 pm »
Guto simples.

Faça assim:

Código: [Selecionar]
if(count({rs})>1) {


...
}

Ou ainda:

Código: [Selecionar]
$registros = count({rs});

switch($registros) {
case 1:

break;
case 2:

break;
}

- {rs} é uma matriz a quantidade de retornos dela é a quantidade de registros no banco, ai você nem precisa usar SELECT Count, um select normal buscando qualquer coisa do banco já retorna pra você.
-- Design ou programador eis a questão.

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 156
    • Email
Re:Contar registros
« Responder #6 Online: Dezembro 18, 2012, 05:11:02 pm »
Guto simples.

Faça assim:

Código: [Selecionar]
if(count({rs})>1) {


...
}

Ou ainda:

Código: [Selecionar]
$registros = count({rs});

switch($registros) {
case 1:

break;
case 2:

break;
}

- {rs} é uma matriz a quantidade de retornos dela é a quantidade de registros no banco, ai você nem precisa usar SELECT Count, um select normal buscando qualquer coisa do banco já retorna pra você.

Então fiz assim, mas não funciona... continua submetendo normalmente... na hora q submetesse um projeto, não poderia submeter outro.
Tem alguma ideia?

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.');
}

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Contar registros
« Responder #7 Online: Dezembro 18, 2012, 05:19:00 pm »
Guto rode a aplicação em modo debug, e posta como saiu o SQL. Verifique se não ocorreu nenhum erro. E coloque também um else { sc_error_message('ELSE') } só pra ver o que ocorre.
-- Design ou programador eis a questão.

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 156
    • Email
Re:Contar registros
« Responder #8 Online: Dezembro 18, 2012, 05:38:41 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)

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Contar registros
« Responder #9 Online: Dezembro 18, 2012, 05:41:15 pm »
Isso está no onValidate?

Depois do sc_error_message(), adicione: sc_error_exit();
-- Design ou programador eis a questão.

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 156
    • Email
Re:Contar registros
« Responder #10 Online: Dezembro 18, 2012, 05:58:02 pm »
Então, adicionei sc_error_exit() e agora não submete nada. Aparece o erro de cara e não submete... vou revisar o código todo e verificar se tem alguma outra coisa errada. É um form de controle com dois campos apenas que altera o status do projeto na tabela de Em inscrição para Submetido.

Arquimedes

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 561
  • Ajudar para ser ajudado
Re:Contar registros
« Responder #11 Online: Dezembro 18, 2012, 06:05:16 pm »
agredito que voce deveria especificar qual campo para contagem e nao todos da tabela:

SELECT COUNT(*)

Atenciosamente Arquimedes

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Contar registros
« Responder #12 Online: Dezembro 18, 2012, 06:11:30 pm »
No controle faça assim:

- No onValidate você coloca o que você vai verificar. E feche com sc_error_exit();

- No onValidateSuccess você coloca o update, redirecionamento, seja lá o que você quer fazer.


Pois ai nunca chegará no Update se as suas verificações não forem verdadeiras.
-- Design ou programador eis a questão.

Kleyber

  • Expert
  • *****
  • Mensagens: 2239
    • Email
Re:Contar registros
« Responder #13 Online: Dezembro 18, 2012, 07:23:39 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.
Kleyber Derick

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

gutoribeiro

  • Intermediário
  • ***
  • Mensagens: 156
    • Email
Re:Contar registros
« Responder #14 Online: Dezembro 18, 2012, 08:08:07 pm »
No controle faça assim:

- No onValidate você coloca o que você vai verificar. E feche com sc_error_exit();

- No onValidateSuccess você coloca o update, redirecionamento, seja lá o que você quer fazer.


Pois ai nunca chegará no Update se as suas verificações não forem verdadeiras.

Sim, vou reorganizar o código dessa forma...deve ser isso sim.