Fórum Problema com count #257147

04/11/2004

0

Pessoal queria saber como faço para usar o comando count:

do jeito que que está este select quando uso count(*), quando vou atribuir o valor de um campo a variavel v_num_fech_caixa, ele da a seguinte mensagem, Field ´num_controle´ not found. se eu não usar o count e usar * from ele funciona só que eu não consigo saber quantos registros que tem.


datamodule1.SQLDataSet3.Close;
    
 datamodule1.SQLDataSet3.CommandText:=´select count(*) from CONTROLE_CAIXA where terminal=:id_terminal and status=:v_status´;
    datamodule1.SQLDataSet3.ParamByName(´id_terminal´).AsString:=id_terminal;
    datamodule1.SQLDataSet3.ParamByName(´v_status´).AsString:=´F´;
    datamodule1.SQLDataSet3.open;
    v_num_fech_caixa:=datamodule1.SQLDataSet3.fieldbyname(´num_controle´).AsInteger



Gameiro

Gameiro

Responder

Posts

04/11/2004

Gilvanj

datamodule1.SQLDataSet3.Close;
    
 datamodule1.SQLDataSet3.CommandText:=´select count(*) from CONTROLE_CAIXA where terminal=:id_terminal and status=:v_status´;
    datamodule1.SQLDataSet3.ParamByName(´id_terminal´).AsString:=id_terminal;
    datamodule1.SQLDataSet3.ParamByName(´v_status´).AsString:=´F´;
    datamodule1.SQLDataSet3.open;
    v_num_fech_caixa:=datamodule1.SQLDataSet3.fieldbyname(´num_controle´).AsInteger


Sem alterar o seu comando do banco de dados, vc pode ler o retorno desta forma:
v_num_fech_caixa:=datamodule1.SQLDataSet3.Fields[0].AsInteger;

E se vc alterar o comando do banco para:
´select count(*) AS Num_Controle from CONTROLE_CAIXA where terminal=:id_terminal and status=:v_status´
Vc conseguirá ler o retorno com datamodule1.SQLDataSet3.fieldbyname(´num_controle´).AsInteger


Responder

Gostei + 0

04/11/2004

Gameiro

Muito Obrigado GilvanJ, funcionou certinho.


Até mais.


Responder

Gostei + 0

04/11/2004

Gameiro

Pensei que havia dado certo mas não deu, o que aconteceu foi o seguinte

ele deveria atribuir a variavel [b:f506f521de]v_num_fech_caixa[/b:f506f521de]:=datamodule1.SQLDataSet3.fieldbyname(´num_controle´).AsInteger este valor do sqldataset, mas quando eu uso o select abaixo ele passa o valor do count , se eu mudo o comando AS num_controle para outro nome me da um erro dizendo que o campo Num_controle não existe.

´select count(*) AS Num_Controle from CONTROLE_CAIXA where terminal=:id_terminal and status=:v_status´


Eu não preciso do valor do count para gravar em lugar nenhum, ele só me ajuda para ver se há uma sessão de caixa aberta, se o valor do count for diferente de zero eu pego o campo num_controle e atribuo a uma variavel, se o count for zero eu informo que o caixa precisa ser aberto.
Eu só preciso saber se há algum registro que esteja de acordo com minha seleção.


Não sei se consegui ser muito claro


Se alguem puder me ajudar agradeço desde já.


Responder

Gostei + 0

04/11/2004

Gandalf.nho

Se você quer só saber se tem um ou mais registros que obedecem seu critério, use IsEmpty.

query.Open;
if query.IsEmpty then //Se não houver registro...


Responder

Gostei + 0

04/11/2004

Gilvanj

A instrução:

select count(*) AS Num_Controle from CONTROLE_CAIXA where terminal=:id_terminal and status=:v_status

faz com que seja apresentado como resposta um campo chamado ´Num_Controle´ cujo conteúdo é a quantidade de registros.
Isto é, está-se apenas atribuindo nome para a quantidade de registros.
Vc pode observar isso utilizando o editor de comandos do banco de dados.

Pelo que vc falou, a impressão que tenho é que a tabela Controle_Caixa tem também um campo chamada Num_Controle. Se for isso, então não está correto mesmo utilizar a instrução que sugeri. E pelo que vc falou, vc precisa saber se a quantidade de registros é zero ou diferente de zero, não havendo necessidade de saber exatamente quantos registros são quando acima de zero. Neste caso, a sugestão de gandalf.nho está mais adequada. Portanto execute o comando

´select Num_controle from CONTROLE_CAIXA where terminal=:id_terminal and status=:v_status´

e verifique se o query retornou IsEmpty=True ou EOF=True para se certificar que nenhum registro foi encontrado com o filtro que vc passou.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar