Fórum Qual o melhor componente para comandos SQL? #352686
29/01/2008
0
Acho que estou fazendo errado ou usando o componente errado. Descrevo o caso abaixo:
Bem, preciso usar um MAX, um MIN, um SUM e um COUNT. Tentei usar o IBQuery. Na propriedade SQL dele coloquei esse codigo:
SELECT MAX(NRO), MIN(NRO) FROM TBCLI WHERE TBCLI.COD = :COD
Daí no ParamByName do IBQuery eu ponho AsInteger e mando um numero de codigo que é o filtro. Esse cod é unico, ou seja, o SELECT retornará apenas 1 registro.
Eu preciso exibir esse campo NRO, então coloco assim:
Label1.Caption:=inttostr(IBQuery1.FieldValues[´MAX´]); Label2.Caption:=inttostr(IBQuery1.FieldValues[´MIN´]);
Porém o campo está vazio. Esse SELECT não está retornando nada, mas era pra retornar.
Provavelmente estou codificando errado ou utilizando o componente errado. Não sei como fazer, deduzi que fosse assim. Será que alguém, por favor, saberia me explicar a melhor forma de se fazer isso?
Obrigado desde já,
Sérgio Gobbo
Curtir tópico
+ 0Posts
29/01/2008
Ferreia2
más vamos lá, o que pode estar errado e que não vi você passar parâmetros e nem abrir a query.
Se você escreveu o select dentro do componente você deveria fazer assim:
Suaquery.close
suaquery.parambyname(´cod´).asinteger := codigo do cliente
Suaquery.open
ai sim vc pode colocar o valor do campo na label
Gostei + 0
29/01/2008
Sérgio Gobbo
A tabela tem milhares de registros. Nessa tabela tem uma chave estrangeira que seria o codigo de um determinado cliente. Então nela tem registros de varios clientes.
Na hora de fazer a consulta, o usuario vai selecionar um cliente num DBGrid. Daí pego o codigo do cliente e faço um select pra saber o numero maximo e o numero minimo de um pedido. Ou seja, preciso usar um MAX e um MIN na tabela, mas só considerando os registros de um determinado cliente.
SELECT MAX (NRO), MIN (NRO) FROM TBCLI WHERE TBCLI.COD = :COD
Não sei se essa forma acima está correta, mas com ela espero receber o numero maximo e minimo de itens de um pedido desse cliente. (Na tabela o campo NRO é o numero de itens de um pedido, por exemplo, nesse campo pode ter o valor 15, 20, 10, etc)
Depois disso, codifico no Delphi:
IBQuery1.Close; IBQuery1.ParamByName(´COD´).AsInteger:=id; //id é uma variavel com o codigo do cliente que eu quero as informações IBQuery1.Open; Label1.Caption:=inttostr(IBQuery1.FieldValues[´MAX´]); Label2.Caption:=inttostr(IBQuery1.FieldValues[´MIN´]);
Será que essa codificação está correta, porque desta forma, não vem nenhum valor para os campos MAX e MIN do IBQuery1.
Obrigado novamente,
Gostei + 0
29/01/2008
Ferreia2
Se vc fizer SELECT * FROM TBCLI WHERE TBCLI.COD = Valor fixo direto no banco retorna algum registro?
Gostei + 0
29/01/2008
Japa_h
Mas com ADOQUERY, usaria assim:
SELECT MAX (NRO) AS MAXIMO, MIN (NRO) AS MINIMO FROM TBCLI WHERE TBCLI.COD = :COD
Gostei + 0
29/01/2008
Ferreia2
Label2.Caption:=inttostr(IBQuery1.FieldValues[´MIN´]);
Experimenta trocar assim
Label1.Caption:=inttostr(IBQuery1.Fieldbyname(´MAX´).asinteger;
Label2.Caption:=inttostr(IBQuery1.Fieldbyname(´MIN´).asinteger;
Gostei + 0
29/01/2008
Edilcimar
begin
close;
clear
sql.add(´select max (nro) as maximo, min (nro) as minimo from tbcli ´);
sql.add(´where cod = :codigo ´);
parambyname(´codigo´).asinteger := id;
open;
end;
istso deve funcionar
Gostei + 0
30/01/2008
Sérgio Gobbo
Não sei oq houve, mas funcionou da maneira q eu estava fazendo:
SELECT MAX (NRO), MIN (NRO) FROM TBCLI WHERE TBCLI.COD = :COD IBQuery1.Close; IBQuery1.ParamByName(´COD´).AsInteger:=id; //id é uma variavel com o codigo do cliente que eu quero as informações IBQuery1.Open; Label1.Caption:=inttostr(IBQuery1.FieldValues[´MAX´]); Label2.Caption:=inttostr(IBQuery1.FieldValues[´MIN´]);
O formulario que eu estava usando começou a travar loucamente: qualquer componente que eu punha e codificava algum evento, dava um erro louco de que o evento era inválido. Daí eu add outro form, copiei todos os componentes e o código pra esse outro form, e simplismente deu certo. Não entendi realmente, mas esse código acima funciona.
Obrigado a todos pela atenção!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)