Colocar o DBGrid na primeira posição
30/11/2005
0
Edilcimar
Posts
06/12/2005
Marco Salles
como assim , fica sempre na ultima posição ????
Sera que não é alguma configuração do DbGrid ???
07/12/2005
Carlosrm
É 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
07/12/2005
Carlosrm
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:
07/12/2005
Edilcimar
07/12/2005
Marco Salles
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:
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á ????
07/12/2005
Edilcimar
07/12/2005
Adriano Santos
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.
07/12/2005
Edilcimar
07/12/2005
Marco Salles
SendMessage(DbGrid1.Handle,WM_VSCROLL,SB_Lineup,0);
07/12/2005
Marco Salles
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 ??
Mas eu não li o seu penultimo Post , onde voce escreve uma outra situação :
07/12/2005
Edilcimar
07/12/2005
Marco Salles
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]
07/12/2005
Edilcimar
Clique aqui para fazer login e interagir na Comunidade :)