Pesquisar: ou pelo código, ou pelo nome... Como faço?
Olá!
Tenho em meu formulário de pesquisa, um RadioGroup com 2 ítens: Código e Nome; um DBGrid ligado ao DSPesquisa; um Edit e um button.
No meu SdsPesquisa(SqlDataSet) tenho o seguinte código SQL:
[i:09c59fb18f]select cod_cliente, nome_cliente
from CLIENTES
where upper(cod_cliente) like :pCodigo and upper(nome_cliente) like :pNome[/i:09c59fb18f]
e no meu button para fazer a pesquisa, tenho o seguinte código:
[i:09c59fb18f]var
ValorBusca: String;
begin
cdsPesquisa.Close;
cdsPesquisa.CommandText := ´´;
case RadioGroup1.ItemIndex of
0: begin
try
cdsPesquisa.CommandText := ValorBusca;
cdsPesquisa.Params[0].AsInteger := StrToInt(edtPesquisa.Text);
except
on E : EConvertError do
begin
raise Exception.Create(´Digite um valor númerico para localizar pelo código!´);
end;
end;
end;
1: begin
cdsPesquisa.CommandText := ValorBusca;
cdsPesquisa.Params[0].AsString := ´¬´+edtPesquisa.Text+´¬´;
end;
end;
cdsPesquisa.Open;
end;[/i:09c59fb18f]
A consulta SQL e o meu código do botão estão corretos? O que eu deveria alterar para que funcione da forma que preciso?
Pois minhas consultas estão retornando ´em branco´!!
Obrigado pela atenção.
Tenho em meu formulário de pesquisa, um RadioGroup com 2 ítens: Código e Nome; um DBGrid ligado ao DSPesquisa; um Edit e um button.
No meu SdsPesquisa(SqlDataSet) tenho o seguinte código SQL:
[i:09c59fb18f]select cod_cliente, nome_cliente
from CLIENTES
where upper(cod_cliente) like :pCodigo and upper(nome_cliente) like :pNome[/i:09c59fb18f]
e no meu button para fazer a pesquisa, tenho o seguinte código:
[i:09c59fb18f]var
ValorBusca: String;
begin
cdsPesquisa.Close;
cdsPesquisa.CommandText := ´´;
case RadioGroup1.ItemIndex of
0: begin
try
cdsPesquisa.CommandText := ValorBusca;
cdsPesquisa.Params[0].AsInteger := StrToInt(edtPesquisa.Text);
except
on E : EConvertError do
begin
raise Exception.Create(´Digite um valor númerico para localizar pelo código!´);
end;
end;
end;
1: begin
cdsPesquisa.CommandText := ValorBusca;
cdsPesquisa.Params[0].AsString := ´¬´+edtPesquisa.Text+´¬´;
end;
end;
cdsPesquisa.Open;
end;[/i:09c59fb18f]
A consulta SQL e o meu código do botão estão corretos? O que eu deveria alterar para que funcione da forma que preciso?
Pois minhas consultas estão retornando ´em branco´!!
Obrigado pela atenção.
Lucas_spohr
Curtidas 0
Respostas
Martins
13/12/2007
Olá!
Tenho em meu formulário de pesquisa, um RadioGroup com 2 ítens: Código e Nome; um DBGrid ligado ao DSPesquisa; um Edit e um button.
No meu SdsPesquisa(SqlDataSet) tenho o seguinte código SQL:
[i:cbd950bf49]select cod_cliente, nome_cliente
from CLIENTES
where upper(cod_cliente) like :pCodigo and upper(nome_cliente) like :pNome[/i:cbd950bf49]
e no meu button para fazer a pesquisa, tenho o seguinte código:
[i:cbd950bf49]var
ValorBusca: String;
begin
cdsPesquisa.Close;
cdsPesquisa.CommandText := ´´;
case RadioGroup1.ItemIndex of
0: begin
try
cdsPesquisa.CommandText := ValorBusca;
cdsPesquisa.Params[0].AsInteger := StrToInt(edtPesquisa.Text);
except
on E : EConvertError do
begin
raise Exception.Create(´Digite um valor númerico para localizar pelo código!´);
end;
end;
end;
1: begin
cdsPesquisa.CommandText := ValorBusca;
cdsPesquisa.Params[0].AsString := ´¬´+edtPesquisa.Text+´¬´;
end;
end;
cdsPesquisa.Open;
end;[/i:cbd950bf49]
A consulta SQL e o meu código do botão estão corretos? O que eu deveria alterar para que funcione da forma que preciso?
Pois minhas consultas estão retornando ´em branco´!!
Obrigado pela atenção.
Qual o valor q é atribuído a variável [b:cbd950bf49]ValorBusca[/b:cbd950bf49]?
GOSTEI 0
Lucas_spohr
13/12/2007
String
GOSTEI 0
Lucas_spohr
13/12/2007
aliás...
como assim?
como assim?
GOSTEI 0
Lucas_spohr
13/12/2007
Opa, consegui!!
agora, precisaria de uma sujestão de rotina... por exemplo, pesquisei por um nome... daí se eu optar por pesquisar por Código, o resultado deste é adicionado à pesquisa anterior, ficando:
digitado no edit : [luc]
Resultado:
1 Lucas R Spohr
Opto por pesquisa por código: 2
Resultado:
1 Lucas R Spohr
2 Fulano
o que eu precisaria então, seria: A cada troca de pesquisa, limpar a memória do formulário. não sei se deveria colocar no RadioGroup ou no botão que faz a pesquisa... Qual seria a melhor opção?
Grato desde já.
agora, precisaria de uma sujestão de rotina... por exemplo, pesquisei por um nome... daí se eu optar por pesquisar por Código, o resultado deste é adicionado à pesquisa anterior, ficando:
digitado no edit : [luc]
Resultado:
1 Lucas R Spohr
Opto por pesquisa por código: 2
Resultado:
1 Lucas R Spohr
2 Fulano
o que eu precisaria então, seria: A cada troca de pesquisa, limpar a memória do formulário. não sei se deveria colocar no RadioGroup ou no botão que faz a pesquisa... Qual seria a melhor opção?
Grato desde já.
GOSTEI 0
Lucas_spohr
13/12/2007
select cod_cliente, nome_cliente
from clientes
where cod_cliente = :cod_cliente or upper(nome_cliente) like :nome
este é o meu código SQL...
from clientes
where cod_cliente = :cod_cliente or upper(nome_cliente) like :nome
este é o meu código SQL...
GOSTEI 0
Jakefrog
13/12/2007
Pq vc não faz um radio box e faz tipo assim oh, cria uma querry
vc cria um radiogroup e coloca pesquizar por nome ou código
qry.close;
qry.SQL.Clear;
qry.SQL.Add(´select cod_cliente, nome_cliente ´);
qry.SQL.Add(´ from clientes);
if radiogroup.itemindex = 0 then
qry.SQL.Add(´ where cod_cliente = :cod_cliente)
Else
qry.SQL.Add(´ where nome_cliente = upper(:nome) ´);
qry.Open;
Creio q funcionará! ^_^
vc cria um radiogroup e coloca pesquizar por nome ou código
qry.close;
qry.SQL.Clear;
qry.SQL.Add(´select cod_cliente, nome_cliente ´);
qry.SQL.Add(´ from clientes);
if radiogroup.itemindex = 0 then
qry.SQL.Add(´ where cod_cliente = :cod_cliente)
Else
qry.SQL.Add(´ where nome_cliente = upper(:nome) ´);
qry.Open;
Creio q funcionará! ^_^
GOSTEI 0
Lucas_spohr
13/12/2007
cara! muito obrigado pela atenção!
mas era só mudar esta linha:
[i:9d86023372]1: begin
cdsPesquisa.CommandText := ValorBusca;
cdsPesquisa.Params[0].AsString := ´¬´+edtPesquisa.Text+´¬´; [/i:9d86023372]
onde estava este [0], mudei para [1], hehe tempo perdido...
agora, como faço pra quando meu formulário for aberto, aparecer o total de registros na StatusBar do formulário?
Obrigado pela atenção!
mas era só mudar esta linha:
[i:9d86023372]1: begin
cdsPesquisa.CommandText := ValorBusca;
cdsPesquisa.Params[0].AsString := ´¬´+edtPesquisa.Text+´¬´; [/i:9d86023372]
onde estava este [0], mudei para [1], hehe tempo perdido...
agora, como faço pra quando meu formulário for aberto, aparecer o total de registros na StatusBar do formulário?
Obrigado pela atenção!
GOSTEI 0
Joaoshi
13/12/2007
Colega,
cdsPesquisa.[b:36509b4ad8]RecordCount[/b:36509b4ad8]
ex.: label1.Caption := IntToStr(cdsPesquisa.RecordCount);
Espero ter ajudado.
cdsPesquisa.[b:36509b4ad8]RecordCount[/b:36509b4ad8]
ex.: label1.Caption := IntToStr(cdsPesquisa.RecordCount);
Espero ter ajudado.
GOSTEI 0
Lucas_spohr
13/12/2007
Eu fiz assim:
[i:6f67a893a3] dmBusca.cdsBuscaCliente.Open;
StatusBar1.Panels[0].text := Format(´¬d registro(s) encontrado(s) com ´¬s´´,
[dmBusca.cdsBuscaCliente.RecordCount, edtPesquisa.Text]);[/i:6f67a893a3]
E alterei meu código para adicionar a SQL dinamicamente, ficando:
[i:6f67a893a3] sqlPesquisa.Close;
cdsPesquisa.Close;
cdsPesquisa.CommandText := ´´;
sqlPesquisa.SQL.Clear;
sqlPesquisa.SQL.Add(´SELECT COD_CLIENTE, NOME_CLIENTE´);
sqlPesquisa.SQL.Add(´FROM CLIENTES´);
if RadioGroup1.ItemIndex = 0 then
sqlPesquisa.SQL.Add(´WHERE COD_CLIENTE = :COD_CLIENTE´)
else
sqlPesquisa.SQL.Add(´WHERE UPPER(NOME_CLIENTE) LIKE :NOME_CLIENTE´);
if RadioGroup1.ItemIndex = 0 then
sqlPesquisa.ParamByName(´COD_CLIENTE´).AsInteger := StrToInt(edtPesquisa.Text)
else
sqlPesquisa.ParamByName(´NOME_CLIENTE´).AsString := AnsiUpperCase(edtPesquisa.Text + ´¬´);
cdsPesquisa.FetchParams;
cdsPesquisa.Open;
sqlPesquisa.Open;[/i:6f67a893a3]
Mas as buscas não retornam nada, ou seja, retornam ´em branco´. O que que há de errado em meu código?
Desde já, agradeço.
Muito obrigado!
[i:6f67a893a3] dmBusca.cdsBuscaCliente.Open;
StatusBar1.Panels[0].text := Format(´¬d registro(s) encontrado(s) com ´¬s´´,
[dmBusca.cdsBuscaCliente.RecordCount, edtPesquisa.Text]);[/i:6f67a893a3]
E alterei meu código para adicionar a SQL dinamicamente, ficando:
[i:6f67a893a3] sqlPesquisa.Close;
cdsPesquisa.Close;
cdsPesquisa.CommandText := ´´;
sqlPesquisa.SQL.Clear;
sqlPesquisa.SQL.Add(´SELECT COD_CLIENTE, NOME_CLIENTE´);
sqlPesquisa.SQL.Add(´FROM CLIENTES´);
if RadioGroup1.ItemIndex = 0 then
sqlPesquisa.SQL.Add(´WHERE COD_CLIENTE = :COD_CLIENTE´)
else
sqlPesquisa.SQL.Add(´WHERE UPPER(NOME_CLIENTE) LIKE :NOME_CLIENTE´);
if RadioGroup1.ItemIndex = 0 then
sqlPesquisa.ParamByName(´COD_CLIENTE´).AsInteger := StrToInt(edtPesquisa.Text)
else
sqlPesquisa.ParamByName(´NOME_CLIENTE´).AsString := AnsiUpperCase(edtPesquisa.Text + ´¬´);
cdsPesquisa.FetchParams;
cdsPesquisa.Open;
sqlPesquisa.Open;[/i:6f67a893a3]
Mas as buscas não retornam nada, ou seja, retornam ´em branco´. O que que há de errado em meu código?
Desde já, agradeço.
Muito obrigado!
GOSTEI 0
Lucas_spohr
13/12/2007
De tanto mexer, ficou assim no momento, o meu código:
procedure TfrmBuscaClientes.btnProcurarClick(Sender: TObject);
var
ValorBusca: string;
FSQLCode: string;
FSQLSearch: string;
begin
inherited;
sqlPesquisa.Close;
cdsPesquisa.Close;
cdsPesquisa.CommandText := ´´;
sqlPesquisa.SQL.Clear;
sqlPesquisa.SQL.Add(´SELECT COD_CLIENTE, NOME_CLIENTE FROM CLIENTES´);
begin
if RadioGroup1.ItemIndex = 0 then
sqlPesquisa.SQL.Add(´WHERE COD_CLIENTE = :COD_CLIENTE´)
else if RadioGroup1.ItemIndex = 1 then
sqlPesquisa.SQL.Add(´WHERE UPPER(NOME_CLIENTE) LIKE :NOME_CLIENTE´);
if RadioGroup1.ItemIndex = 0 then
sqlPesquisa.SQL.Add(´Order by COD_CLIENTE, NOME_CLIENTE´)
else if RadioGroup1.ItemIndex = 1 then
sqlPesquisa.SQL.Add(´Order by NOME_CLIENTE, COD_CLIENTE´);
if RadioGroup1.ItemIndex = 0 then
sqlPesquisa.ParamByName(´COD_CLIENTE´).AsInteger := StrToInt(edtPesquisa.Text)
else
sqlPesquisa.ParamByName(´NOME_CLIENTE´).AsString := AnsiUpperCase(edtPesquisa.Text+´¬´);
cdsPesquisa.FetchParams;
case RadioGroup1.ItemIndex of
0: begin
try
cdsPesquisa.CommandText := FSQLCode;
cdsPesquisa.Params[0].AsInteger := StrToInt(edtPesquisa.Text);
except
on E: EConvertError do
begin
raise Exception.Create(´Digite um valor numérico para localizar pelo código!´);
end;
end;
end;
1: begin
cdsPesquisa.CommandText := FSQLSearch;
cdsPesquisa.Params[0].AsString := edtPesquisa.Text + ´¬´;
end;
end;
end;
cdsPesquisa.Open;
sqlPesquisa.Open;
end;
MAS NÃO RETORNA NADAAAAA!!!
o qq há de errado?
procedure TfrmBuscaClientes.btnProcurarClick(Sender: TObject);
var
ValorBusca: string;
FSQLCode: string;
FSQLSearch: string;
begin
inherited;
sqlPesquisa.Close;
cdsPesquisa.Close;
cdsPesquisa.CommandText := ´´;
sqlPesquisa.SQL.Clear;
sqlPesquisa.SQL.Add(´SELECT COD_CLIENTE, NOME_CLIENTE FROM CLIENTES´);
begin
if RadioGroup1.ItemIndex = 0 then
sqlPesquisa.SQL.Add(´WHERE COD_CLIENTE = :COD_CLIENTE´)
else if RadioGroup1.ItemIndex = 1 then
sqlPesquisa.SQL.Add(´WHERE UPPER(NOME_CLIENTE) LIKE :NOME_CLIENTE´);
if RadioGroup1.ItemIndex = 0 then
sqlPesquisa.SQL.Add(´Order by COD_CLIENTE, NOME_CLIENTE´)
else if RadioGroup1.ItemIndex = 1 then
sqlPesquisa.SQL.Add(´Order by NOME_CLIENTE, COD_CLIENTE´);
if RadioGroup1.ItemIndex = 0 then
sqlPesquisa.ParamByName(´COD_CLIENTE´).AsInteger := StrToInt(edtPesquisa.Text)
else
sqlPesquisa.ParamByName(´NOME_CLIENTE´).AsString := AnsiUpperCase(edtPesquisa.Text+´¬´);
cdsPesquisa.FetchParams;
case RadioGroup1.ItemIndex of
0: begin
try
cdsPesquisa.CommandText := FSQLCode;
cdsPesquisa.Params[0].AsInteger := StrToInt(edtPesquisa.Text);
except
on E: EConvertError do
begin
raise Exception.Create(´Digite um valor numérico para localizar pelo código!´);
end;
end;
end;
1: begin
cdsPesquisa.CommandText := FSQLSearch;
cdsPesquisa.Params[0].AsString := edtPesquisa.Text + ´¬´;
end;
end;
end;
cdsPesquisa.Open;
sqlPesquisa.Open;
end;
MAS NÃO RETORNA NADAAAAA!!!
o qq há de errado?
GOSTEI 0