Fórum Selecionar registro através do DBGHrid #327743
18/08/2006
0
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
Curtir tópico
+ 0Posts
18/08/2006
Thiago Vidal
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
19/08/2006
Carlosberga
Grato.
Carlos.
Gostei + 0
19/08/2006
Thiago Vidal
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
20/08/2006
Carlosberga
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
18/10/2006
Mulambo
Cara to com o mesmo problema que o seu...
e ai teve algum sucesso?????
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)