Como apresentar registro selecionado no dbgrid?
Bom, tenho um form com uma busca que me retorna alguns registros e desejo clicar neste registro e abrir no registro no form de cadastro, porem como utilizo um ClientDataSet ligado a um AdoQuery devido a ter mestre/Detalhe, e a pesquisa ligada a outro AdoQuery, quando faco isso ele me retorna o primeiro registro...
Procurei por ai, e parece que tem que fazer um Locate ou Select, ainda nao sei
Alguém me ajuda!!!
Ah, minha pesquisa é composta por:
procedure TFrmPesqLajes.EdtBuscaChange(Sender: TObject);
Var
a: String;
begin
if RbCodigo.Checked then
Begin
a:= Select * From Clientes where Codigo like + QuotedStr( % + edtBusca.Text + %) +
order by Codigo;
end;
With DMPesq.QryClientes do
Begin
Close;
SQL.Clear;
SQl.Add(a);
Open;
end;
Danilo Cordeiro
Respostas
Marco Salles
02/06/2012
vc tem todas as informações que vc precisa .. Não entendi vc dizer que tem que fazer um
Procurei por ai, e parece que tem que fazer um Locate ou Select, ainda nao sei
????
Danilo Cordeiro
02/06/2012
Links.
Data module. https://lh6.googleusercontent.com/-Z4lNMuNGyTjoDi8i182emh1nzVqU-Ic_Sip231rmr8JpjkJGD5CANCyuYnplkPnTdhSX_8dok0
DmPesquisa. https://lh4.googleusercontent.com/Mv8SKGqzh-pRrZ2Rv0EOGoFwVB8sWu87q6SC-J25434-52PwehCH82hWdU5k2zeRrgduckEYNMo
Cadastro. https://lh4.googleusercontent.com/Iewy3CTT7BFxOTObPS0-m1cSTLXkfaxopsMhcMSD-YeyI7wj_AHlfU8ulIoYH7fyzRe9nV1ra1g
Busca. https://lh5.googleusercontent.com/rRPBhfQUUkMvFtbciaV-ecP7YklD_6d6zoW9M-s0e6bG49ztdkSL8Yhe2ynaMpRya1wSQSq_2WI
Olha ai.
Marco Salles
02/06/2012
Danilo Cordeiro
02/06/2012
https://lh5.googleusercontent.com/rRPBhfQUUkMvFtbciaV-ecP7YklD_6d6zoW9M-s0e6bG49ztdkSL8Yhe2ynaMpRya1wSQSq_2WI
veja que não aparece seta. pois não uso FindNearest para fazer a pesquisa!!
William
02/06/2012
De qual tabela vc quer visualizar os dados, Mestre ou Detalhe?
Quanto ao filtro se vc já ligou corretamente os campos no ClientDataSet então não tem quer executar Select na tabela Detalhe.
Marco Salles
02/06/2012
https://lh5.googleusercontent.com/rRPBhfQUUkMvFtbciaV-ecP7YklD_6d6zoW9M-s0e6bG49ztdkSL8Yhe2ynaMpRya1wSQSq_2WI
veja que não aparece seta. pois não uso FindNearest para fazer a pesquisa!!
não abre no meu browser o link
https://lh5.googleusercontent.com/rRPBhfQUUkMvFtbciaV-ecP7YklD_6d6zoW9M-s0e6bG49ztdkSL8Yhe2ynaMpRya1wSQSq_2WI
Danilo Cordeiro
02/06/2012
mestre: Tab. Clientes
Detalhe: Tab. lajesForro, LajesPiso, lajesTrelicada
a tabela que faço a busca e desejo exibi-la é a mestre - Clientes.
ou seja, o mestre/Detalhe ta funcionando direitinho... a questão é que o cadastro esta ligado em um CdsClientes que esta ligado a um dataSetProvider que esta ligado a um AdoQueryClientes devido ao uso de mestre/Detalhe e a pesquisa esta ligada em outro a um outro AdoQueryPesquisaClientes..
William
02/06/2012
Infelizmente também não consegui abrir suas imagens.
Danilo Cordeiro
02/06/2012
[IMG]http://img811.imageshack.us/img811/215/pesquisan.jpg[/IMG]
Danilo Cordeiro
02/06/2012
William
02/06/2012
Danilo Cordeiro
02/06/2012
Marco Salles
02/06/2012
[IMG]http://img811.imageshack.us/img811/215/pesquisan.jpg[/IMG]
Vc quer clicar no dbgrid e ir para um outro formuãrio Cadastro , onde deve aparecer o Mestre
que no caso é este registro e o detalhe referente a este ???
????
pa_ O Locate é mais lento se não houver indices
como vc esta utilizando clientdataset melhor utilizar o setkey e criar indices em rumtime
para grande range de dados
Danilo Cordeiro
02/06/2012
Danilo Cordeiro
02/06/2012
Marco Salles
02/06/2012
Utilize o Locate primeiro.. depois vc aprimora
mas o fato é .. Foi aquilo mesmo que eu entendi ???
Clicar no DbGrid e abrir um Formulario Cadastro que aponte para o Registro selecionado na pesquisa ???
William
02/06/2012
Como minha intenção não é entrar em disputa sobre o qual método é melhor sobre a questão desempenho Locate ou SetKey, siga o conselho do colega MARCOS.
Danilo Cordeiro
02/06/2012
Utilize o Locate primeiro.. depois vc aprimora
mas o fato é .. Foi aquilo mesmo que eu entendi ???
Clicar no DbGrid e abrir um Formulario Cadastro que aponte para o Registro selecionado na pesquisa ???
exatamente!!!!
Marco Salles
02/06/2012
Utilize o Locate primeiro.. depois vc aprimora
mas o fato é .. Foi aquilo mesmo que eu entendi ???
Clicar no DbGrid e abrir um Formulario Cadastro que aponte para o Registro selecionado na pesquisa ???
exatamente!!!!
então .. Mas vc que mostrar este registro selecionado onde ??? Em DbEdits ???
Danilo Cordeiro
02/06/2012
Utilize o Locate primeiro.. depois vc aprimora
mas o fato é .. Foi aquilo mesmo que eu entendi ???
Clicar no DbGrid e abrir um Formulario Cadastro que aponte para o Registro selecionado na pesquisa ???
exatamente!!!!
então .. Mas vc que mostrar este registro selecionado onde ??? Em DbEdits ???
quero mostrar em dbedits na tela em que é feito o cadastro. segue tela de cadastro:
http://desmond.imageshack.us/Himg337/scaled.php?server=337&filename=cadastrox.jpg&res=landing
Marco Salles
02/06/2012
(nas novas versões do delphi ja foi adicionado este evento...)
neste evento vc instancia o form .. Ou o chame caso o mesmo esteja aberto
Minha dúvida é o seguinte
se neste formulario estes Dbedits apontar para o Mesmo DataSource do FormPesquisa Não daria certo ???????
a principio tente dar uses neste Form de cadatro ao Form de pesquisa (ou o DataModulo onde esta este DataSouce ligado ao
CdsClientes)
Dando uses tente utilizar o mesmo dataSource .. So ligar nas propriedades reepsctivas dos controles DataWare o
DataSouce que aparece np Form de pesquisa
entendeu ???
Danilo Cordeiro
02/06/2012
(nas novas versões do delphi ja foi adicionado este evento...)
neste evento vc instancia o form .. ou o chame caso o mesmo esteja aberto
minha dúvida é o seguinte
se neste formulario estes dbedits apontar para o mesmo datasource do formpesquisa não daria certo ???????
a principio tente dar uses neste form de cadatro ao form de pesquisa (ou o datamodulo onde esta este datasouce ligado ao
cdsclientes)
dando uses tente utilizar o mesmo datasource .. so ligar nas propriedades reepsctivas dos controles dataware o
datasouce que aparece np form de pesquisa
entendeu ???
naum tem como ligar devido ao mestre detalhe!
voce num tem teaviewer pra voce da uma olhada naum...
Marco Salles
02/06/2012
utilize o locate da seguinte forma
cds_Metre.Locate(Nome_Do_Campo.[CdsPesquisa.fieldByName(Nome_Campo).asstring],[loCaseInsensitive, loPartialKey)]);
Danilo Cordeiro
02/06/2012
utilize o locate da seguinte forma
cds_Metre.Locate(Nome_Do_Campo.[CdsPesquisa.fieldByName(Nome_Campo).asstring],[loCaseInsensitive, loPartialKey)]);
ficou assim
procedure TFrmPesqLajes.Edit1Change(Sender: TObject);
begin
dm.cdsClientes.Locate(Codigo.[dmPesq.QryClientes.fieldByName(Codigo).asstring],[loCaseInsensitive, loPartialKey)]);
end;
mas da o erro
[Pascal Error] PesqLajes.pas(48): E2003 Undeclared identifier: Codigo
[Pascal Error] PesqLajes.pas(48): E2003 Undeclared identifier: loCaseInsensitive
[Pascal Error] PesqLajes.pas(48): E2003 Undeclared identifier: loPartialKey
Marco Salles
02/06/2012
procedure TFrmPesqLajes.Edit1Change(Sender: TObject);
begin
dm.cdsClientes.Locate(Codigo.[dmPesq.QryClientes.fieldByName(Codigo).asstring],[loCaseInsensitive, loPartialKey)]);
end;
mas da o erro
[Pascal Error] PesqLajes.pas(48): E2003 Undeclared identifier: Codigo
[Pascal Error] PesqLajes.pas(48): E2003 Undeclared identifier: loCaseInsensitive
[Pascal Error] PesqLajes.pas(48): E2003 Undeclared identifier: loPartialKey
o editor deste forum come as ASPAS
veja
dm.cdsClientes.Locate(Codigo,dmPesq.QryClientes.fieldByName(Codigo).asstring,[loCaseInsensitive, loPartialKey)]);
entre o cogido tem aspas simples
aspas codigo aspas
para reconhecer loCaseInsensitive, loPartialKey de uses a DB
Danilo Cordeiro
02/06/2012
Danilo Cordeiro
02/06/2012
Marco Salles
02/06/2012
não é codigo ponto .. é Aspas Simples codigo AspasSimples Virgula
dm.cdsClientes.Locate(Aspassimples Codigo AspaSimles , (VIRGULA)
dmPesq.QryClientes.fieldByName( AspasSimples Codigo AspasSimples).asstring,[loCaseInsensitive, loPartialKey)]);
Danilo Cordeiro
02/06/2012
http://www.youtube.com/watch?v=fSENz1ECR9c&feature=youtu.be
Marco Salles
02/06/2012
http://www.youtube.com/watch?v=fSENz1ECR9c&feature=youtu.be
esta errado ... Vc esta colocando o parentesis em local errado
dm.cdsClientes.Locate(Aspassimples Codigo AspaSimles ,
dmPesq.QryClientes.fieldByName( AspasSimples Codigo AspasSimples).asstring,[loCaseInsensitive, loPartialKey)]);
procure na net exemplo de Locate ... Infelismente o editor do DevMédia come as aspas confundindo o post
Danilo Cordeiro
02/06/2012
Obrigado!!!!!
Danilo Cordeiro
02/06/2012
Mais uma Vez, Muitíssimo Obrigado!!!!!
Valeu!!!