Problema com count
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.
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
Curtidas 0
Respostas
Gilvanj
04/11/2004
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
GOSTEI 0
Gameiro
04/11/2004
Muito Obrigado GilvanJ, funcionou certinho.
Até mais.
Até mais.
GOSTEI 0
Gameiro
04/11/2004
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á.
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á.
GOSTEI 0
Gandalf.nho
04/11/2004
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...
query.Open;
if query.IsEmpty then //Se não houver registro...
GOSTEI 0
Gilvanj
04/11/2004
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.
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.
GOSTEI 0