Fórum Localizar próximo registro após LOCATE. buscar o mesmo valor #326043

24/07/2006

0

Pessoal,

Alguém saberia me dizer como faço para que após dar um locate, seguir com a busca nos próximos registros pelo mesmo valor... se eu dou locate, ele sempre pega o primeiro registro encontrado...

por exemplo.. quero buscar por um endereço... ´RUA ABC´ quero ir localizando os registros com ´RUA ABC´... com o locate eu acho o primeiro, mas não consigo ir até os outros registros.

Vlw!


Techsoft

Techsoft

Responder

Posts

24/07/2006

Marcelo_mileris

Olha só... tenta usar o [b:c6d12ad2cb] LocateNext [/b:c6d12ad2cb]


IBQuery.LocateNext(´HISTORICO´,´CONTA DE LUZ´,[loPartialKey,loCaseInsensitive]);


Lembrando que eu estou utilizando Firebird com a Paleta Interbase


Responder

Gostei + 0

25/07/2006

Techsoft

Pois é, tentei usar, mas isso eh uma função da classe TIBCustomDataset e como estou usando ClientDataset, não funcionou...

Mas obirgado por responder, fico no aguardo...

Se alguém souber.


[]´s


Responder

Gostei + 0

25/07/2006

Marcelo_mileris

Não sei se pode ajudar mas... vc pode utilizar um FindKey, e após isso ir utilizando um FindNext por exemplo

Um botão para pesquisar com o código
ClientDataSet.FindKey([EditBusca.Text]);


E depois disso em outro botão usar
ClientDataSet.FindNext;



Ele irá pesquisar até chegar no final da tabela


Responder

Gostei + 0

25/07/2006

Techsoft

Isso soluciona em partes, mas eu preciso que o usuário faça com qualquer campo da tabela, achei uma solução provisória com o q você postou acima...

declarei no uses a unit do IBCustomDataSet e utilizei o seguinte:

TIBCustomDataSet(dtsINDados.dataset).LocateNext(´´,´´,[]);


dtsINDados é o meu DataSource e coloquei os parâmetros dentro do locate para testes... ele faz a busca sem problemas, mas fiquei na dúvida se poderia usar assim ou se isso poderia me dar algum problema futuro.

Se não tiver problema nenhum vou adotar esta solução, mas não sei se é a ideal.

Obrigado mais uma vez.

[]´s


Responder

Gostei + 0

25/07/2006

Paullsoftware

É somente uma opinião...

não seria melhor vc usar um filtro para ir elimiando os demais dados e deixar somente os que possuem os critérios da pesquisa, através de comandos SQL?


tipo:
No OnCreate do Form se você quer ver todos os dados, eu particularmente não gosto disso mais seria somente atualizar o ClientDataSet fazendo:
with CDS do
close;
CommandText := ´´; //Sempre limpo antes, pois já tive problemas por não limar
CommandText := ´select * from TABELA;
Open;
end;

e No botão de pesquisa fazer:
with CDS do
close;
CommandText := ´´; //Sempre limpo antes, pois já tive problemas por não limar
CommandText := ´select * from TABELA where NOME starting with ´+ Edit1.Text;
Open;
end;

espero ter ajudado... :wink:


Responder

Gostei + 0

25/07/2006

Techsoft

Paulo,

Existe a opção de filtro, a grade sempre é exibida em branco e o usuário informa o que deseja ver, dentro desse filtro ele pode querer pesquisar por algum campo específico.

Por isso a utilização do locate e locatenext, pois o que o usuário deseja nem sempre está nas opções de filtro, pois no momento da localização, permito que o usuário selecione qualquer campo do CDS.

Para falar a verdade, eu não gosto muito dessa solução que estou implementando, porém, este sistema esta sendo migrado de uma plataforma DOS e lá eles tinham esta funcionalidade e se habtuaram a usá-la, acredito que nas próximas versões consigamos fazer algumas modificações mais profundas e mostrar para o usuário que existem outras formas de fazer o que ele quer, mas por enquanto não será possível, isso foi uma das exigências no momento da migração, que as funcionalidades todas fossem mantidas.

[]´s


Responder

Gostei + 0

25/07/2006

Paullsoftware

Entendo, mais como disse antes é apenas uma opinião nem sempre fazemos como queremos já que teoricamente quem manda é o cliente, eu normalmente falo das desvantagens de usar algums recursos, pois, se a ficar muito carregada ele terão trabalho ao usar esse metodo de pesquisa, até pq não é legal usar todos os dados de uma tabela para pesquisar...

Nesse caso vc poderia pré-selecionar alguns campos que poderiam ser usados na pesquisa como por exemplo se for um cliente: Nome, RG, CFP, Fone, Email, CEP, Bairro, Cidade...

volto a dizer: É somente uma opinião... converse com seu cliente e explique pra ele as vantagens... :wink:


Responder

Gostei + 0

25/07/2006

Night_man

citaram o filtro, eh bem legal, tenta

ClientDataSet1.filtered := False;
ClientDataSet1.filter := ´ENDERECO = ´ + QuotedStr(´RUA ABC´)
ClientDataSet1.Filtered := True;

o client vai ficar somente com os registros q satisfazem a condicao,

pode ser usado ´And´, ´Or´, ´Like´, ´Null´, eh bem legal


Responder

Gostei + 0

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

Aceitar