Fórum Como fazer uma busca quot;dentroquot; de uma busca? #210961

01/02/2004

0

Galera, olá pra todos!

Bem...
Eu gostaria de saber se é possível fazer uma busca ´dentro´ de uma busca?

Tipo:
Tenho um BD Interbase onde tenho vários modelos de carros quando quero selecionar o modelo ´GOL´ (esse tipo de busca eu sei fazer)
Ex:

Select * from ACarros
Where Marca like ´Modelo´
Order by data

(depois no form eu uso o esquema do parambyname no EDIT do form pra selecionar que eu quero o modelo ´GOL´)

Mas e se eu quiser que dentro dessa busca só me retorne os modelo ´GOL´ que sejam do ano ´1997´ e com cor ´AZUL´...



Como eu faço isso?
O que mais eu tenho que em SQL ou em Pascal pra que isso aconteça?


Desde já agradeço a todos!!!!


Dark Knight

Dark Knight

Responder

Posts

01/02/2004

Drakkar

É só colocar sua SQL assim:

Select * from ACarros
Where Marca like :Modelo And
Ano=:Ano And
Cor=:Cor
Order by data

E depois passar os parametros antes de abrir a Query.

Flws.


Responder

Gostei + 0

02/02/2004

Chico Gois

Beleza!

Uma vez precisei fazer isso e achei esta dica legal em:

http://www.elivaldo.com.br/

Normalmente a linguagem SQL possui flexibilidade o bastante para você obter os mais variados resultados de seleção de registros.

Acontece que eventualmente você pode chegar a uma situação onde precisaria construir uma query com base no resultado de outra query. Aí complica, certo?

Mas nestes caso você vai usar algumas API´s do BDE e o problema se tornará uma tarefa bem simples. Veja como:

Vamos imaginar uma query simples, apenas para efeito de entendimento desta questão: Você possui uma tabela chamada vendas.db com os campos DataVenda e Valor.

A nossa primeira query vai extrair o mês do campo DataVenda juntamente com o campo Valor. A sentença seria então a seguinte:

SELECT
  EXTRACT(MONTH FROM datavenda) AS mes, valor
  FROM vendas

Agora precisamos salvar o resultado dessa query em uma tabela. Mas como fazer? Vamos utilizar a API DbiSaveChanges para salvar a query e a API DbiGetCursorProps para obter o nome que o BDE utilizou para salvar a query. O código é o seguinte:

var
  QrName: string;
begin
  // salva a query em um arquivo temporário
  DbiSaveChanges(Query1.Handle);
  // obtém o nome do arquivo temporário e fecha a primeira query
  DbiGetCursorProps(Query1.Handle, Props);
  QrName := Props.szName;
end;
Feito isso basta fazer a segunda query com base no arquivo que acabamos de salvar. Veja como fica um código completo usando este recurso:

procedure TForm1.Button1Click(Sender: TObject);
var
  Props: CURProps;
  QrName: string;
begin
  // abre a primeira query
  Query1.SQL.Text :=
    ´SELECT EXTRACT(MONTH FROM datavenda) AS mes, valor FROM vendas´;
  Query1.Open;
  // salva a query em um arquivo temporário
  DbiSaveChanges(Query1.Handle);
  // obtém o nome do arquivo temporário e fecha a primeira query
  DbiGetCursorProps(Query1.Handle, Props);
  QrName := Props.szName;
  Query1.Close;

  // abre a segunda query pegando o resultado da primeira
  // que está salva no arquivo S
  Query2.SQL.Text := ´SELECT mes, SUM(valor) FROM "´ +
    QrName + ´" GROUP BY mes´;
  Query2.Open;
  ...
  // apaga o arquivo temporário da primeira query
  DeleteFile(QrName + ´.db´);
end;





Espero que ajude

Inté+


Responder

Gostei + 0

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

Aceitar