GARANTIR DESCONTO

Fórum Pesquisar: ou pelo código, ou pelo nome... Como faço? #350514

13/12/2007

0

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.


Lucas_spohr

Lucas_spohr

Responder

Posts

13/12/2007

Martins

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]?


Responder

Gostei + 0

13/12/2007

Lucas_spohr

String


Responder

Gostei + 0

13/12/2007

Lucas_spohr

aliás...

como assim?


Responder

Gostei + 0

13/12/2007

Lucas_spohr

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á.


Responder

Gostei + 0

13/12/2007

Lucas_spohr

select cod_cliente, nome_cliente
from clientes
where cod_cliente = :cod_cliente or upper(nome_cliente) like :nome


este é o meu código SQL...


Responder

Gostei + 0

13/12/2007

Jakefrog

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á! ^_^


Responder

Gostei + 0

14/12/2007

Lucas_spohr

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!


Responder

Gostei + 0

14/12/2007

Joaoshi

Colega,

cdsPesquisa.[b:36509b4ad8]RecordCount[/b:36509b4ad8]

ex.: label1.Caption := IntToStr(cdsPesquisa.RecordCount);

Espero ter ajudado.


Responder

Gostei + 0

14/12/2007

Lucas_spohr

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!


Responder

Gostei + 0

14/12/2007

Lucas_spohr

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?


Responder

Gostei + 0

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

Aceitar