Fórum Selecionar registro através do DBGHrid #327743

18/08/2006

0

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

Responder

Posts

18/08/2006

Thiago Vidal

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;



Responder

Gostei + 0

19/08/2006

Carlosberga

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.


Responder

Gostei + 0

19/08/2006

Thiago Vidal

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.


Responder

Gostei + 0

20/08/2006

Carlosberga

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


Responder

Gostei + 0

18/10/2006

Mulambo

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

e ai teve algum sucesso?????


Responder

Gostei + 0

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

Aceitar