Como apresentar registro selecionado no dbgrid?

Delphi

02/06/2012

Ola pessoal, estou a alguns dia procurando a solução para este problema, mas não consegui nada.

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

Danilo Cordeiro

Curtidas 0

Respostas

Marco Salles

Marco Salles

02/06/2012

Se o cursor Dos dados (aquela setinha pequne preta no canto esquerdo da Grid) esta apontando para um registro
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

????
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

Como faço a busca em uma Query diferente da que esta ligada ao cadastro ele não aponta o registro com a setinha, segue imagem!!!

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.
GOSTEI 0
Marco Salles

Marco Salles

02/06/2012

qual o link correto da inagem ???
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

A imagem da busca e esta
https://lh5.googleusercontent.com/rRPBhfQUUkMvFtbciaV-ecP7YklD_6d6zoW9M-s0e6bG49ztdkSL8Yhe2ynaMpRya1wSQSq_2WI
veja que não aparece seta. pois não uso FindNearest para fazer a pesquisa!!
GOSTEI 0
William

William

02/06/2012

Colega pelo visto vc está trabalhando com Mestre/Detalhe, minha pergunta é:

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.
GOSTEI 0
Marco Salles

Marco Salles

02/06/2012

A imagem da busca e esta
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
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

é um mestre detalhe. esta assim.
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..
GOSTEI 0
William

William

02/06/2012

Danilo se vc só quer exibir dados da Tabela Cliente simplesmente use o Locate no próprio ClientDataSet de cadastro.

Infelizmente também não consegui abrir suas imagens.
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

Segue imagem:
[IMG]http://img811.imageshack.us/img811/215/pesquisan.jpg[/IMG]
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

Como faço para usar o Locate?
GOSTEI 0
William

William

02/06/2012

ClientDataSetClientes.Locate(<Nome_campo>, <Edit_dispara_consulta>, [loCaseInsensitive, loPartialKey]);
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

Amigo, voce naum teria o TeamWiever ai não, pra voce da uma olhada e me ajuda?
GOSTEI 0
Marco Salles

Marco Salles

02/06/2012

Segue imagem:
[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
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

i, agora complico, num entendo nada disto que tu falou... vo ter que estuda bastante ainda...
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

a respeito do detalhe, não o utilizo na pesquisa..
GOSTEI 0
Marco Salles

Marco Salles

02/06/2012

i, agora complico, num entendo nada disto que tu falou... vo ter que estuda bastante ainda...


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 ???
GOSTEI 0
William

William

02/06/2012

Infelizmente tenho que partir do principio que vc seja um iniciante e por esse motivo não me ative a certos detalhes sobre índices e muito menos sobre lentidão que possivelmente possa ocorrer durante a consulta, por esse motivo indiquei o uso do Locate.

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.
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

i, agora complico, num entendo nada disto que tu falou... vo ter que estuda bastante ainda...


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!!!!

GOSTEI 0
Marco Salles

Marco Salles

02/06/2012

i, agora complico, num entendo nada disto que tu falou... vo ter que estuda bastante ainda...


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 ???
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

i, agora complico, num entendo nada disto que tu falou... vo ter que estuda bastante ainda...


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
GOSTEI 0
Marco Salles

Marco Salles

02/06/2012

primeira coisa talves é utilizar o evento duploclick do dbgrid ou criar o evento onclick do DbGrid
(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 ???
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

primeira coisa talves é utilizar o evento duploclick do dbgrid ou criar o evento onclick do dbgrid
(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...
GOSTEI 0
Marco Salles

Marco Salles

02/06/2012

então ta bom


utilize o locate da seguinte forma

cds_Metre.Locate(Nome_Do_Campo.[CdsPesquisa.fieldByName(Nome_Campo).asstring],[loCaseInsensitive, loPartialKey)]);
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

então ta bom


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
GOSTEI 0
Marco Salles

Marco Salles

02/06/2012

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

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
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

Naum deu, aparece o mesmo erro no dm.cdsClientes.Locate(Codigo.dmPesq.QryClientes.fieldByName(Codigo).asstring],[loCaseInsensitive, loPartialKey)]);
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

Amigo, de uma olhada atravez do temViewer!!!
GOSTEI 0
Marco Salles

Marco Salles

02/06/2012

Naum deu, aparece o mesmo erro no dm.cdsClientes.Locate(Codigo.dmPesq.QryClientes.fieldByName(Codigo).asstring],[loCaseInsensitive, loPartialKey)]);


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)]);

GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

Fico de acordo com o video, mas continua dando erro! olha só...

http://www.youtube.com/watch?v=fSENz1ECR9c&feature=youtu.be
GOSTEI 0
Marco Salles

Marco Salles

02/06/2012

Fico de acordo com o video, mas continua dando erro! olha só...

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
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

Nossa como sou desatento, deu certo, pra pesquisa por codigo. do jeito que ta num da certo pros outros mas vo tenta modifica aqui... Por enquanto amigo... Muito obrigado pela atenção e disposição em me ajudar!!!

Obrigado!!!!!
GOSTEI 0
Danilo Cordeiro

Danilo Cordeiro

02/06/2012

Amigo, tava colocando o locate no final da pesquisa. foi so coloca-lo no onDblClick do DbGrid da pesquisa que resolveu todos os problemas!!!!

Mais uma Vez, Muitíssimo Obrigado!!!!!

Valeu!!!
GOSTEI 0
POSTAR