Selecionar registro através do DBGHrid

Delphi

18/08/2006

Prezados colegas,

Estou tentando fazer uma pesquisa através do evento duplo clique no DDGrid, só que ao localizar o registro e dar do duplo clique o form é aberto no primeiro registro e não no selecionado, meu código está assim:

procedure TFrmBuscaProc.ButlocalizarClick(Sender: TObject);
begin
if RBN_Processo.Checked=true then
begin
With QBuscaProcesso do
begin
close;
QBuscaProcesso.SQL.Clear;
QBuscaProcesso.SQL.Add(´Select * from Processo´);
QBuscaProcesso.SQL.Add(´Where N_Processo=:pesquisa´);
QBuscaProcesso.Params[0].AsString:=EdBuscaProc.Text;
Open;
end;
end;
procedure TFrmBuscaProc.GridBuscaProcDblClick(Sender: TObject);
var
valor:string;
begin
FrmProcessos.Show;
FrmBuscaProc.GridBuscaProc.Columns.Items[0].Field.text;
QBuscaProcesso.Open;
QBuscaProcesso.Locate(´N_Processo´,valor,[]);
FrmBuscaProc.Close;
end;

end.
espero ajuda.
Grato
Carlos :?:


Carlosberga

Carlosberga

Curtidas 0

Respostas

Thiago Vidal

Thiago Vidal

18/08/2006

Acho que voce esqueceu de definir a variavel ´valor´:

procedure TFrmBuscaProc.GridBuscaProcDblClick(Sender: TObject);
var
  valor:string;
begin
  FrmProcessos.Show;

  valor := FrmBuscaProc.GridBuscaProc.Columns.Items[0].Field.text;

  QBuscaProcesso.Open;
  QBuscaProcesso.Locate(´N_Processo´,valor,[]);
  FrmBuscaProc.Close;
end;



GOSTEI 0
Carlosberga

Carlosberga

18/08/2006

Depois que eu envieu o código vi que faltou declarar a variável ´valor´. Já corrigi o problema, mas, mesmo assim não deu certo, continua abrindo o formulário no primeiro registro da tabela e, não no selecionado pela query.
Grato.
Carlos.


GOSTEI 0
Thiago Vidal

Thiago Vidal

18/08/2006

entao provavelmente, o registro nao deve estar sendo encontrado...

a função locate, retorna um boolean, entao voce poderia verificar este retorno para ver se o registro está sendo encontrado.

recomendo usar um campo inteiro para fazer a busca, mas ainda se for essencial que seja um campo texto, pegue o valor como .AsString, ao invés de .Text, pois o delphi às vezes faz algumas conversões na hora de retornar o .Text, enquanto o .AsString retorna o texto puro que ta cadastrado no banco.

na verdade, se N_Processo for um campo inteiro, eu mudaria a rotina para ficar assim:

procedure TFrmBuscaProc.GridBuscaProcDblClick(Sender: TObject);
var
  NProcesso: Integer;
begin
  NProcesso := GridBuscaProc.Columns[0].Field.AsInteger;
  QBuscaProcesso.Open;
  if QBuscaProcesso.Locate(´N_Processo´, NProcesso, []) then
  try
    FrmProcessos.Show;
  finally
    FrmBuscaProc.Close;
  end
  else
    raise Exception.CreateFmt(´Processo não encontrado: ¬d´, [NProcesso]);

end; 


NÃo compilei o código, pode ser que tenha algum erro de sintaxe, mas o conceito é basicamente este.


GOSTEI 0
Carlosberga

Carlosberga

18/08/2006

Prezado Thiago,

O registro existe, tanto que é encontrado pela query o problema está na função duplo clique no grid que ao invés de posicionar o form no registro encontrado pela query ele posiciona no primeiro registro da tabela Processo.
O registro é tipo texto.
Grato
Carlos


GOSTEI 0
Mulambo

Mulambo

18/08/2006

Ola CarlosBerga....
Cara to com o mesmo problema que o seu...

e ai teve algum sucesso?????


GOSTEI 0
POSTAR