Ajuda - Busca - Membros - Calendário
Versão Completa: Sql No Delphi
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
Daniel Lourenco
Olá pessoal, sou iniciante em Delphi e gostaria de saber se é possível fazer um select específico com a clausula "count" utilizando parâmetros, conforme abaixo:

cds_visitas.Close;
sds_visitas.Close;
cds_visitas.CommandText:='select count(num_visita) from visitas where cod_cliente like:Pcodvisita';
cds_visitas.Params[0].AsInteger:=StrToInt(DBEdit13.Text);
cds_visitas.Open;

Quando eu faço isso pelo ibexpress (firebird) funciona direito, já pelo Delphi dá o erro abaixo:

" ... não é um valor inteiro válido..."

Agora, se eu mudo o select conforme abaixo funciona, mas ele não faz o que eu preciso que é fazer um count no campo num_visita da minha tabela:

cds_visitas.Close;
sds_visitas.Close;
cds_visitas.CommandText:='select * from visitas where cod_cliente like:Pcodvisita';
cds_visitas.Params[0].AsInteger:=StrToInt(DBEdit13.Text);
cds_visitas.Open;

Será que existe uma solução para utilizar as opções do select especificamente a um campo usando count, Max, min, etc ?
Pelo que percebi, no firebird só consigo fazer selects trazendo todos os registro na memória “ select * from...”?

Se eu fizer isso também dá errado: 'select num_visita from visitas where cod_cliente like:Pcodvisita';

Agradeço se puder me ajudar...

Att. Daniel Lourenço.
paulobergo
Olá Daniel!

Mais o menos desde 1997 eu migrei meus aplicativos Clipper para Delphi, usando SQL da própria BDE, inicialmente com tabelas Fox26 e atualmente dBaseIV e VisualDBaseIV...

Então, sugiro que você experimente executar sua query usando o SQLBuilder primeiro ou o DBExplorer, para verificar se ela retorna um valor inteiro válido na contagem de registros...

Bom... fiz isso também... vê se ajuda!
CODE
- Criando uma tabela Visual dBASE7

create table 'visitas.dbf'
(
idvisitas autoinc,
num_visita char(4),
cod_cliente char(5)
)

- Incluindo algumas informações:

insert into 'visitas.dbf' (num_visita, cod_cliente) values ('0001','00044')
insert into 'visitas.dbf' (num_visita, cod_cliente) values ('0002','00223')
insert into 'visitas.dbf' (num_visita, cod_cliente) values ('0004','00145')
insert into 'visitas.dbf' (num_visita, cod_cliente) values ('0003','00031')
insert into 'visitas.dbf' (num_visita, cod_cliente) values ('0005','00145')
insert into 'visitas.dbf' (num_visita, cod_cliente) values ('0006','00032')
insert into 'visitas.dbf' (num_visita, cod_cliente) values ('0007','00031')
insert into 'visitas.dbf' (num_visita, cod_cliente) values ('0008','00044')
insert into 'visitas.dbf' (num_visita, cod_cliente) values ('0009','00223')
insert into 'visitas.dbf' (num_visita, cod_cliente) values ('0010','00045')

- verificando

select * from 'visitas.dbf'
order by cod_cliente

idvisitas num_visita cod_cliente
        4 0003       00031
        7 0007       00031
        6 0006       00032
        1 0001       00044
        8 0008       00044
       10 0010       00045
        3 0004       00145
        5 0005       00145
        2 0002       00223
        9 0009       00223

- Contando as visitas ao cliente '00044'

Procedure TForm1.Button1Click(Sender: TObject);
Var
  iVisitas: LongInt;
  sCodCliente: String;
Begin
  sCodCliente := '00044';
  iVisitas := 0;
  With query1 do Begin
    SQL.Clear;
    SQL.Add('select count(cod_cliente) qtvisitas');
    SQL.Add('from ":temp:visitas.dbf"');
    SQL.Add('where cod_cliente="'+sCodCliente+'"');
    Prepare;
    Open;
    iVisitas := FieldByName('qtvisitas').AsInteger;
    Close;
    If iVisitas=0 then
      ShowMessage('Não teve nenhuma visita!')
    Else If iVisitas=1 then
      ShowMessage('Só teve uma visita!')
    Else
      ShowMessage('Foram '+IntToStr(iVisitas)+' visitas!');
    {EndIf}
  End;{With query1 do Begin}
End;


Ok?

Abraços!
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.