Fórum Montagem comando SQL de pesquisa no server #6896
18/06/2009
0
Ola Pessoal !
Partindo do principio, que tenho uma aplicação multi-camadas, utilizando WebService, e que na aplicação cliente eu não posso ter nenhum comando SQL, vamos ao cenário:
Na primeira tela do programa, o usuario tem que informar alguns parametros de pesquisa, e depois clicar no botão 'Pesquisar'. Este botão vai consumir um servico de pesquisa no banco de dados, a partir destes parametros informados.
Como faço para montar este comando SQL, no server, sabendo que esta consulta pode ser um SQL complexo, com varios JOIN'S entre tabelas ?
Exemplo : Tenho uma tabela de material que tem ligação com a tabela de lotacao e uma ligacao com a tabela de codigo estrutural. Quando o usuario clica no botão 'Pesquisar' eu mostra para ele os campos : codigo do material, descricao do material, descricao do codigo estrutural e descricao da lotacao num grid. Então como faria para montar este SQL no server ?
PS : Eu não quero colocar no server, uma query e um provider para cada consulta. No server, tenho somente uma query e um provider que uso para TODAS as consultas do meu sistema.
[]'s
Ines Brotto
Frame Brotto
Curtir tópico
+ 0
Responder
Posts
19/06/2009
Rodrigo Mourão
Olá Ines;
Sempre digo aos meus alunos e clientes que existe mil e uma maneiras de preparar Neston, basta você inventar uma. A mesma coisa ocorre com o Delphi. No seu caso especificamente uma das soluções seria ter no servidor de aplicação, métodos disponíveis que iriam executar este consulta. Neste caso citado você poderia ter um método chamado ListaProdutos, este método poderia ter tantos parâmentros quantos necessários. Suponha que você pudesse passar ou não o nome do produto, código, nome do fabricante e código de barra.
Lembrando que o usuário pode informar um dos parâmetros, todos ou nenhum isso vai depender do que ele preenche na tela de consulta. No servidor o método ficaria mais ou menos assim:
Procedure ListaProdutos(DescProduto: String = ""; Código: Integer = 0; DescFabricante: String = ""; CodBarra: Integer = 0)
Com isso temos valores default para os parâmetros e na implementação poderia ficar assim:
Procedure ListaProdutos(DescProduto: String = ""; Código: Integer = 0; DescFabricante: String = ""; CodBarra: Integer = 0)
var
Cmd: TStringList;
begin
Cmd:= TStringList.Create;
Cmd.Add('select p.codigo, p.descricao, p.preco, p.estoque, p.barra, f.descricao ');
Cmd.Add(' from produto p, fabricante f');
Cmd.Add(' where p.idfabricante = f.idfabricante');
if DescProduto <> EmptyStr then
Cmd.Add(' and p.descricao like '+QuotedStr(DescProduto+'%'));
if DescFabricante <> EmptyStr then
Cmd.Add(' and f.descricao like '+QuotedStr(DescFabricante+'%'));
if Codigo <> 0 then
Cmd.Add(' and p.codigo = '+IntToStr(codigo));
if CodBarra <> 0 then
Cmd.Add(' and p.barra ='+IntToStr(CodBarra));
SuaQueryPadrao.Sql.Add(CMD.Text);
O resto do seu procedimento aqui !!
end;
end;
Bem Ines, esta é uma das soluções. Assim você poderia seguir o mesmo procedimento e criar quantos métodos forem necessários, montando neles os comandos sql e passando para esta query única que você tem na sua aplicação.
Espero ter ajudado !!
Abs!!
Sempre digo aos meus alunos e clientes que existe mil e uma maneiras de preparar Neston, basta você inventar uma. A mesma coisa ocorre com o Delphi. No seu caso especificamente uma das soluções seria ter no servidor de aplicação, métodos disponíveis que iriam executar este consulta. Neste caso citado você poderia ter um método chamado ListaProdutos, este método poderia ter tantos parâmentros quantos necessários. Suponha que você pudesse passar ou não o nome do produto, código, nome do fabricante e código de barra.
Lembrando que o usuário pode informar um dos parâmetros, todos ou nenhum isso vai depender do que ele preenche na tela de consulta. No servidor o método ficaria mais ou menos assim:
Procedure ListaProdutos(DescProduto: String = ""; Código: Integer = 0; DescFabricante: String = ""; CodBarra: Integer = 0)
Com isso temos valores default para os parâmetros e na implementação poderia ficar assim:
Procedure ListaProdutos(DescProduto: String = ""; Código: Integer = 0; DescFabricante: String = ""; CodBarra: Integer = 0)
var
Cmd: TStringList;
begin
Cmd:= TStringList.Create;
Cmd.Add('select p.codigo, p.descricao, p.preco, p.estoque, p.barra, f.descricao ');
Cmd.Add(' from produto p, fabricante f');
Cmd.Add(' where p.idfabricante = f.idfabricante');
if DescProduto <> EmptyStr then
Cmd.Add(' and p.descricao like '+QuotedStr(DescProduto+'%'));
if DescFabricante <> EmptyStr then
Cmd.Add(' and f.descricao like '+QuotedStr(DescFabricante+'%'));
if Codigo <> 0 then
Cmd.Add(' and p.codigo = '+IntToStr(codigo));
if CodBarra <> 0 then
Cmd.Add(' and p.barra ='+IntToStr(CodBarra));
SuaQueryPadrao.Sql.Add(CMD.Text);
O resto do seu procedimento aqui !!
end;
end;
Bem Ines, esta é uma das soluções. Assim você poderia seguir o mesmo procedimento e criar quantos métodos forem necessários, montando neles os comandos sql e passando para esta query única que você tem na sua aplicação.
Espero ter ajudado !!
Abs!!
Responder
Gostei + 0
23/06/2009
Rodrigo Mourão
Olá Inês !!
Estaremos colocando o chamado com oconcluído, caso ainda tenha alguma dúvida é so reabrir o chamado.
Estamos sempre à disposição.
Abs!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Estaremos colocando o chamado com oconcluído, caso ainda tenha alguma dúvida é so reabrir o chamado.
Estamos sempre à disposição.
Abs!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)