Fórum Montar consulta SQL #295772
16/09/2005
0
Olá amigos
estou tentando montar uma consulta sql da seguite maneira:
numa tela tenho vários radiobuttons, alguns combobox e alguns maskedits.
Dependendo da escolha de um ou mais itens acima citados, montar a query.
Ex: O radio button1 escolhe relatorio geral por periodo de data, mas se escolher um combobox que é um cliente e se escolher outros itens como posso montar esta query.
se alguem puder ajudar?
Muito grato
Silvio Guedes
estou tentando montar uma consulta sql da seguite maneira:
numa tela tenho vários radiobuttons, alguns combobox e alguns maskedits.
Dependendo da escolha de um ou mais itens acima citados, montar a query.
Ex: O radio button1 escolhe relatorio geral por periodo de data, mas se escolher um combobox que é um cliente e se escolher outros itens como posso montar esta query.
se alguem puder ajudar?
Muito grato
Silvio Guedes
Silviogs
Curtir tópico
+ 0
Responder
Posts
16/09/2005
Michelli88
Use o RadioGroup que é mais pratico.. vc adiciona os itens na propriedade [b:b73cab1bcc]items[/b:b73cab1bcc]!!
Cada opção escolhida, vc vai passar ela por parametro para a query ou mudar o Select inteiro..
Primeiro de tudo vc tem definir os selects e depois ver qual é de qual!
Exemplo:
No seu RadioGroup1 vc tem:
No evento OnChange vc vai fazer algo como:
PCOD_CLIENTE é um parametro, eh para os parametros que vc vai jogar os valores selecionados nos componentes...
Cada opção escolhida, vc vai passar ela por parametro para a query ou mudar o Select inteiro..
Primeiro de tudo vc tem definir os selects e depois ver qual é de qual!
Exemplo:
No seu RadioGroup1 vc tem:
:arrow: Relatorio Geral de Clientes
:arrow: Relatorio do Cliente por Codigo
No evento OnChange vc vai fazer algo como:
Query.SQL.Clear; Case RadioGroup1.ItemIndex of 0: begin Query.SQL.Text:=´SELECT * FROM CLIENTES´; end; 1: Begin Query.SQL.Text:=´SELECT * FROM CLIENTES WHERE COD_CLIENTE = :PCOD_CLIENTE´; Query.ParambyName(´PCOD_CLIENTE´).AsInteger:= CodigodoCliente; end; end; Query.Open;
PCOD_CLIENTE é um parametro, eh para os parametros que vc vai jogar os valores selecionados nos componentes...
Responder
Gostei + 0
16/09/2005
Silviogs
Olá michelli88
muito grato por sua atenção, mas não era bem isso que eu queria, resolvi da sguinte maneira:
select pc.processo, pc.proc_complemento, pd.nome, ae.nome, pc.dataentrada, pc.dataretirada, pc.devolucao1, pc.datadevtribunal from processos pc
join procuradores pd on pd.codigo=pc.procurador
join assessor ae on ae.codigo=pc.assessor
where 1=1
rotina principal
QryProcesso.Close;
cria_query(QryProcesso.SQL.Text);
depois executo uma procedure cria_query:
with RptGeral do begin
if mprocurador <> 0 then
texto := texto + ´and pc.procurador=:mprocurador ´;
if massessor <> 0 then
texto := texto + ´and pc.assessor=:massessor´;
if RadioGroup1.Buttons[0].Checked then
if pos(´mdata1´,text)=0 then
texto := texto + ´and pc.dataentrada>=:mdata1 and pc.dataentrada<=:mdata2 ´;
if RadioGroup1.Buttons[1].Checked then
if pos(´mdata1´,text)=0 then
texto := texto + ´and pc.dataretirada>=:mdata1 and pc.dataretirada<=:mdata2 ´;
if RadioGroup1.Buttons[2].Checked then
if pos(´mdata1´,text)=0 then
texto := texto + ´and pc.devolucao1>=:mdata1 and pc.devolucao1<=:mdata2 ´;
if RadioGroup1.Buttons[3].Checked then
if pos(´mdata1´,text)=0 then
texto := texto + ´and pc.datadevtribunal>=:mdata1 and pc.datadevtribunal<=:mdata2´;
if RadioGroup1.Buttons[4].Checked then
if pos(´pc.dataretirada´,text)=0 then
texto := texto + ´and pc.dataretirada is null ´;
if RadioGroup1.Buttons[5].Checked then
if pos(´pc.devolucao1´,text)=0 then
texto := texto + ´and pc.devolucao1 is null ´;
if RadioGroup1.Buttons[6].Checked then
if pos(´pc.datadevtribunal´,text)=0 then
texto := texto + ´and pc.datadevtribunal is null ´;
end;
RptGeral.QryProcesso.SQL.Text := texto;
continua a rotina principal:
QryProcesso.SQL.Add(´ order by pc.dataentrada,pc.processo´);
if mprocurador <> 0 then
QryProcesso.ParamByName(´mprocurador´).Value := mprocurador;
if massessor <> 0 then
QryProcesso.ParamByName(´massessor´).Value := massessor;
if (MaskEdit1.Text <> ´ / / ´) and (MaskEdit2.Text <> ´ / / ´) then
with RptGeral do begin
QryProcesso.ParamByName(´mdata1´).Value := strtodate(MaskEdit1.Text);
QryProcesso.ParamByName(´mdata2´).Value := strtodate(MaskEdit2.Text);
end;
RptGeral.QryProcesso.Open;
Atenciosamente
Silvio Guedes
muito grato por sua atenção, mas não era bem isso que eu queria, resolvi da sguinte maneira:
select pc.processo, pc.proc_complemento, pd.nome, ae.nome, pc.dataentrada, pc.dataretirada, pc.devolucao1, pc.datadevtribunal from processos pc
join procuradores pd on pd.codigo=pc.procurador
join assessor ae on ae.codigo=pc.assessor
where 1=1
rotina principal
QryProcesso.Close;
cria_query(QryProcesso.SQL.Text);
depois executo uma procedure cria_query:
with RptGeral do begin
if mprocurador <> 0 then
texto := texto + ´and pc.procurador=:mprocurador ´;
if massessor <> 0 then
texto := texto + ´and pc.assessor=:massessor´;
if RadioGroup1.Buttons[0].Checked then
if pos(´mdata1´,text)=0 then
texto := texto + ´and pc.dataentrada>=:mdata1 and pc.dataentrada<=:mdata2 ´;
if RadioGroup1.Buttons[1].Checked then
if pos(´mdata1´,text)=0 then
texto := texto + ´and pc.dataretirada>=:mdata1 and pc.dataretirada<=:mdata2 ´;
if RadioGroup1.Buttons[2].Checked then
if pos(´mdata1´,text)=0 then
texto := texto + ´and pc.devolucao1>=:mdata1 and pc.devolucao1<=:mdata2 ´;
if RadioGroup1.Buttons[3].Checked then
if pos(´mdata1´,text)=0 then
texto := texto + ´and pc.datadevtribunal>=:mdata1 and pc.datadevtribunal<=:mdata2´;
if RadioGroup1.Buttons[4].Checked then
if pos(´pc.dataretirada´,text)=0 then
texto := texto + ´and pc.dataretirada is null ´;
if RadioGroup1.Buttons[5].Checked then
if pos(´pc.devolucao1´,text)=0 then
texto := texto + ´and pc.devolucao1 is null ´;
if RadioGroup1.Buttons[6].Checked then
if pos(´pc.datadevtribunal´,text)=0 then
texto := texto + ´and pc.datadevtribunal is null ´;
end;
RptGeral.QryProcesso.SQL.Text := texto;
continua a rotina principal:
QryProcesso.SQL.Add(´ order by pc.dataentrada,pc.processo´);
if mprocurador <> 0 then
QryProcesso.ParamByName(´mprocurador´).Value := mprocurador;
if massessor <> 0 then
QryProcesso.ParamByName(´massessor´).Value := massessor;
if (MaskEdit1.Text <> ´ / / ´) and (MaskEdit2.Text <> ´ / / ´) then
with RptGeral do begin
QryProcesso.ParamByName(´mdata1´).Value := strtodate(MaskEdit1.Text);
QryProcesso.ParamByName(´mdata2´).Value := strtodate(MaskEdit2.Text);
end;
RptGeral.QryProcesso.Open;
Atenciosamente
Silvio Guedes
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)