Colocar o DBGrid na primeira posição

30/11/2005

3

usando um locate, durante a digitação em um edit, com lopartialkey, o objeto procurado sempre fica no fim do dbgrid, existe alguma maneira de fazer com que o mesmo fique na primeira posição?


Responder

Posts

06/12/2005

Edilcimar

sobe


Responder

06/12/2005

Marco Salles

usando um locate, durante a digitação em um edit, com lopartialkey, o objeto procurado sempre fica no fim do dbgrid, existe alguma maneira de fazer com que o mesmo fique na primeira posição?

como assim , fica sempre na ultima posição ????
Sera que não é alguma configuração do DbGrid ???


Responder

07/12/2005

Carlosrm

Edilcimar.

É só um palpite... Se o Locate está sendo aplicado em um campo SEM ÍNDICE, a pesquisa será feita, mas em ordem natural (de entrada / gravação no Dataset).
E, se o valor no Edit se refere a algum registro que foi incluído / alterado por último, certamente ele será o último registro desse Dataset, em ordem natural).
E o coitado do DBGrid só está fazendo o trabalho dele, que é refletir a situação atual do Dataset... (salvo o uso de DisableControls e outros recursos...).

Para fazer o DBGrid apresentar o registro pesquisado (quando encontrado) na primeira linha, poderia ser usado um filtro com a mesma condição do Locate (mas acho que isso só seria razoável em siatuações muito específicas).

Aproveitando o ensejo, gostei do seu exemplo de impressão!

carlosrm


Responder

07/12/2005

Carlosrm

Edilcimar,
DESCULPE, ignore o meu palpite. Depois que enviei a resposta eu
resolvi testar na prática e vi que o que eu disse não ocorre. Testei
com D6 e Paradox e com Firebird.
Na apresentação inicial do DBGrid, ele já reflete a mesma ordem (índice) que o Dataset. Se for aplicado um novo índice ou aplicar o locate e ele ´descobrir´ que existe um índice e usá-lo, o DBGrid atualizará sua ordem.
Se eu aplicar um locate em um campo sem índice, o locate fará a pesquisa registro a registro, em ordem natural. A ordenação do DBGrid, porém (e aqui eu cometi a principal besteira) não mudará para a ordem natural...! Continuará na mesma anterior...
Pensei que podia ser útil, mas falei asneira... Prometo ser mais cuidadoso...

carlosrm :oops:


Responder

07/12/2005

Edilcimar

Marcos, eu tenho um dbgrid, vamos supor com 30 linhas, tenho um edit ondo digito algo, se faço a pesquisa pelo locate, o nome (ainda que parcial) procurado fica na 30ª posição, estou querendo fazer com que fique na 1ª linha do dbgrid, tipo como fica com o setrange


Responder

07/12/2005

Marco Salles

ideias nunca são asneiras , de ideias asneiras que surgem grandes idéias... Mas vamos ao assunto

Eu posso estar falando asneiras , mas salvo erro conduto o locate é um método de pesquisa exato.. Ou acha ou não acha.. Então antes de passas para a segunda parte , caso eu esteja correto , não procede a colocação abaixo:

...se faço a pesquisa pelo locate, [b:54fa8ceb2a]o nome (ainda que parcial)[/b:54fa8ceb2a] procurado fica na 30ª posição....


A segunda parte é que estou ainda meio confuso .. Quando voce diz que ao achar o nome pelo método locate ele fica na 30 Linha , voce esta se referindo especificamente ao um registro que ja esta previamente na 30 Linha ... Porque se voce especificar um registro que previamente seje o decimo ele ao ser localizado ,estara na 10 linha , ou não estará ????


Responder

07/12/2005

Edilcimar

tenho uma ibtable com vamos supor 1000 registros, um dbgrid com 30 linhas, se eu buscar até o 30° ele fica na mesma ´página´ do dbgrid, porém se eu buscar o registro 100, locate(´nomecampo´, nomevariavel, [lopartialkey]), o referido registro fica na 30ª posição do dbgrid, e eu estou querendo que ele fica na 1ª posição do dbgrid, se vc algum dia usou o setrangestart, setrangeend, applyrange, sabe do que estou falando


Responder

07/12/2005

Adriano Santos

tenho uma ibtable com vamos supor 1000 registros, um dbgrid com 30 linhas, se eu buscar até o 30° ele fica na mesma ´página´ do dbgrid, porém se eu buscar o registro 100, locate(´nomecampo´, nomevariavel, [lopartialkey]), o referido registro fica na 30ª posição do dbgrid, e eu estou querendo que ele fica na 1ª posição do dbgrid, se vc algum dia usou o setrangestart, setrangeend, applyrange, sabe do que estou falando


Eu entendi o que o [b:b25068171d]Edilcimar[/b:b25068171d] quer. O problema é que: quando o DBGrid ´encontra´ o registro ele exibe o ponteiro no final dele. O que o [b:b25068171d]Edilcimar[/b:b25068171d] precisa é mostrar este registro na primeira linha para que fique mais fácil de visualizar. Tô certo [b:b25068171d]Edilcimar[/b:b25068171d] ?

É como se você pudesse rolar o DBGrid para baixo mandando o registro encontrado para o topo da lista.


Responder

07/12/2005

Edilcimar

é isto aí adriano, a idéia é exatamente esta, não é só para visualisar, mas para facilitar também, vamos supor que estamos procurando uma Maria (existem tão poucas), aí o usuário digita o nome e na primeira linha do dbgrid tem uma Maria, aí ele dá 2 cliques no dbgrid e já seleciona o cliente desejado sem tem a necessidade de digitar o nome inteiro


Responder

07/12/2005

Marco Salles

Apos a consulta bem sucedida , tente colocar o codigo abaixo:

SendMessage(DbGrid1.Handle,WM_VSCROLL,SB_Lineup,0);



Responder

07/12/2005

Edilcimar

lamento marcos mas não funcionou


Responder

07/12/2005

Marco Salles

Eu é que peço desculpas por não entender exatamente o que voce quer

Esta intrução

SendMessage(DbGrid1.Handle,WM_VSCROLL,SB_Lineup,0);

simplesmente rola o Registro selecionado para a primeira posição Visual do DbGrid

se voce clolocar este codigo no evento de um Botão e executa-lo o Registro Não Move ?????

Pensei que voce estava querendo fazer isto ??

usando um locate, durante a digitação em um edit, com lopartialkey, o objeto procurado sempre fica no fim do dbgrid, [b:7b893f7df5]existe alguma maneira de fazer com que o mesmo fique na primeira posição[/b:7b893f7df5]?


Mas eu não li o seu penultimo Post , onde voce escreve uma outra situação :

.... aí o usuário digita o nome e na primeira linha do dbgrid tem uma Maria, aí [b:7b893f7df5]ele dá 2 cliques no dbgrid [/b:7b893f7df5]e já seleciona o cliente desejado sem tem a necessidade de digitar o nome inteiro



Responder

07/12/2005

Edilcimar

o locate está no onchange de um edit, eu coloquei no onchange o código, aí ele simplesmente dá foco no primeiro registro do dbgrid, o que eu preciso é que aquilo que esteja sendo digitado vá para a primeira posição do dbgrid para que a pessoa possa mais facilmente escolher algo que esteja depois daquilo que foi digitado, dando 2 cliques no dbgrid


Responder

07/12/2005

Marco Salles

Mas como eu disse anteriormente o Locate é um método Exato , Ou Acha ou não acha.. Para usar no evento onChange seria mais conveniente usar métodos de Aproximação , (FindNerest , GotoNearestO Ou mesmo instrução sql

Com o método Locate se voce digitar [color=darkred:b1c6967980]Mari[/color:b1c6967980] ele não localiza pessoas com o nome de [color=darkred:b1c6967980]MARIA[/color:b1c6967980] por exemplo..

tente fazer um teste com o método LOCATE :

if table1.locate(´Nome_Campo´,Edit1.Text,[LoPartialKey, 
LoCaseInsensitive]) then
  showmessage(´encontrado´)
else
  showmesage(´´Não encontrado´)


[b:b1c6967980]Veja que se digitar MAR ele não acha MARIA ... ETC..[/b:b1c6967980]


Responder

07/12/2005

Edilcimar

quando coloco o locate com lopartial key ele acha, se digito mari ele para o primeiro maria, que está exatamente na última posição do dbgrid, o que eu quero é que este registro fique na primeira posição(linha) do dbgrid!


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira