Locate selecionando registro no dbgrid
Seguinte...
tenho um dbGrid, ligado a um datasource, que esta ligado num DataSet de uma tabela....
Esse DBGrid, me mostra todos os registros cadastrados e talz...
Quero fazer o seguinte, quando eu for digitando no edit ele vai buscando nos campos ... pelo registro... ae eu fiz o seguinte...
soh q ele da erro... alguem sabe como faço o tipo de busca como quero fazer? brigadao :P
tenho um dbGrid, ligado a um datasource, que esta ligado num DataSet de uma tabela....
Esse DBGrid, me mostra todos os registros cadastrados e talz...
Quero fazer o seguinte, quando eu for digitando no edit ele vai buscando nos campos ... pelo registro... ae eu fiz o seguinte...
if not (suiEdit1.Text = ´´") then begin BD.AgendaDataSet.Open; BD.AgendaDataSet.Locate(´nome´,suiEdit1.Text,[LoPartialKey,LoCaseInsensitive]); end;
soh q ele da erro... alguem sabe como faço o tipo de busca como quero fazer? brigadao :P
Salsa
Curtidas 0
Respostas
Vinicius2k
02/02/2005
Colega,
Qual o erro e aonde (evento) este código que vc apresentou foi colocado?
T+
Qual o erro e aonde (evento) este código que vc apresentou foi colocado?
T+
GOSTEI 0
Rodolpho123
02/02/2005
No evento ONChange do seu edit, faça assim:
LoPartialKey = Faz a consulta com o resultado mais aproximado do seu parâmetro
LoCaseSensitive = Faz a consulta diferenciando caracteres em caixa alta e caixa baixa, ex: NomE nome
E mantenha o seu DataSet sempre aberto para fazer isto que vc quer. O erro que está acontecendo (apesar de vc não ter notificado) é que provavelmente vc está tentando abrir o seu DataSet que já está aberto...
BD.AgendaDataSet.Locate(´nome´,suiEdit1.Text, LoPartialKey,LoCaseInsensitive]);
LoPartialKey = Faz a consulta com o resultado mais aproximado do seu parâmetro
LoCaseSensitive = Faz a consulta diferenciando caracteres em caixa alta e caixa baixa, ex: NomE nome
E mantenha o seu DataSet sempre aberto para fazer isto que vc quer. O erro que está acontecendo (apesar de vc não ter notificado) é que provavelmente vc está tentando abrir o seu DataSet que já está aberto...
GOSTEI 0
Salsa
02/02/2005
no onChange da edit ele faz akilo
e ele rola um access violation
:(
Access violation at address 00402D85 in module ´MinasBox.exe´. Read of address 00000758.
e ele rola um access violation
:(
Access violation at address 00402D85 in module ´MinasBox.exe´. Read of address 00000758.
GOSTEI 0
Vinicius2k
02/02/2005
Colega,
Retire o método DataSet.Open de dentro onChange. Ele deve ser aberto antes.
1. O campo ´nome´ existe no DataSet?
2. No seu código vc tem : [b:da6bf2dcd5]if not (suiEdit1.Text = ´´´)[/b:da6bf2dcd5]... duas aspas simples representando nulo e uma aspa dupla.. foi erro de digitação da questão ?
3. Seu ´TEdit´ não me parece um Edit convencional.. ele é o TEdit do Delphi? Se não for certifique-se de que vc pode fazer leitura da sua proprieade Text desta forma. O problema pode estar no componente e não na rotina. Faça o teste com o TEdit da VCL do Delphi.
T+
no onChange da edit ele faz akilo
Retire o método DataSet.Open de dentro onChange. Ele deve ser aberto antes.
e ele rola um access violation
1. O campo ´nome´ existe no DataSet?
2. No seu código vc tem : [b:da6bf2dcd5]if not (suiEdit1.Text = ´´´)[/b:da6bf2dcd5]... duas aspas simples representando nulo e uma aspa dupla.. foi erro de digitação da questão ?
3. Seu ´TEdit´ não me parece um Edit convencional.. ele é o TEdit do Delphi? Se não for certifique-se de que vc pode fazer leitura da sua proprieade Text desta forma. O problema pode estar no componente e não na rotina. Faça o teste com o TEdit da VCL do Delphi.
T+
GOSTEI 0
Salsa
02/02/2005
procedure TAgendaTel.suiEdit1Change(Sender: TObject); begin if not (suiEdit1.Text = ´´) then BD.AgendaDataSet.Locate(´nome´,suiEdit1.Text,[LoPartialKey,LoCaseInsensitive]); end;
tirei o open ... e continua o access violation
o ´´ = vazio ....
e o campo nome existe sim na tabela q eu quero :)
GOSTEI 0
Afarias
02/02/2005
´Access Violation´ ocorre geralmente quando se está tendando utilizar um objeto não instanciado.
Verifique se o form/datamodule [b:dc1a7dd086]BD[/b:dc1a7dd086] está criado no momento q vc está tentando utilizá-lo
T+
Verifique se o form/datamodule [b:dc1a7dd086]BD[/b:dc1a7dd086] está criado no momento q vc está tentando utilizá-lo
T+
GOSTEI 0
Salsa
02/02/2005
ele tah criado sim... tanto eh q os campos da dbgrid aparecem la com os registros e tal :)
GOSTEI 0
Vinicius2k
02/02/2005
E o ´Edit´? É o TEdit da VCL ou não?
Embora o Anderson esteja certo e o AV que o ele comentou seja o mais comum, este erro pode ocorrer também na leitura de uma propriedade de um componente ´problemático´, dependendo de como foi implementada a propriedade ou mesmo, no caso de um Edit, o evento onChange do componente
Embora o Anderson esteja certo e o AV que o ele comentou seja o mais comum, este erro pode ocorrer também na leitura de uma propriedade de um componente ´problemático´, dependendo de como foi implementada a propriedade ou mesmo, no caso de um Edit, o evento onChange do componente
GOSTEI 0