GARANTIR DESCONTO

Fórum GotoNearest em TQuery #172363

30/07/2003

0

Olá!
No TTable eu usava o GotoNearest para localizar um registro, e se ele nao encontrar, ele posiciona no mais próximo.

Gostaria de fazer a mesma coisa em um TQuery. COmo fazer?
Preciso que o cara digita num campo e conforme ele digita, já vai posicionando no registro mais próximo. Isso no TTable é moleza. Mas como fazer isso no TQuery?

Obrigado!


Nildo

Nildo

Responder

Posts

30/07/2003

Aroldo Zanela

Nildo,

Você pode utilizar o locate com localização parcial ou o LIKE na cláusula Where da instrução SQL que você está especificando na Query. Ambos independem do Banco de dados que esteja utilizando.


Responder

Gostei + 0

31/07/2003

Nildo

Obrigado!
Eu naum tinha pensado nisso!


Responder

Gostei + 0

20/12/2003

Gilson_our

Oi pessoal, também tinha essa dúvida. Para consultar um campo de uma table usando o evento OnChange de um TEdit por um componente TTable eu fazia assim:

Table1.INDEXNAME:=´Nome_do_indice´;
Table1.SETKEY;
Table1.FieldByName(´CAMPO´).ASSTRING:=Edit1.text;
Table1.GotoNearest;

Já usando o TQuery eu fiz e deu certo, só que a medida que eu vou digitando ou apagando os caracteres no TEdit, a Query vai sendo filtrada dando aproximações até achar o valor final. Quando usava o TTable, o dataset não era filtrado, o ponteiro apenas se movia posicionando nos registros. Alguém sabe se é possível fazer isso também no TQuery? Ou seja, não filtrar a Query a medida que os caracteres vão sendo digitados.

O código que eu usei para o TQuery foi este:
Query1.Close;
Query1.Sql.clear;
Query1.SQL.Add(´Select * from tabela´);
Query1.SQL.Add(´Where CAMPO like :valor´);
Query1.ParamByName(´valor´).AsString:= (Edit1.text + ´¬´);
Query1.Open;


Responder

Gostei + 0

21/12/2003

Aroldo Zanela

Colega,

Conforme eu mencionei anteriormente você pode utilizar o método locate, ou seja, ao invés de restringir a consulta (Where) basta selecionar todos os registros e utilizar o método LOCATE para posicionar o cursor.


Responder

Gostei + 0

23/12/2003

Gilson_our

Opa, valeu Aroldo Zanela. Usei o código abaixo e deu certo:
if Edit1.text = ´´ then
Query1.first;
Query1.Locate(´CAMPO´, Edit1.Text, [loPartialKey, loCaseInsensitive]);

Vc sabe qual dos dois métodos apresenta melhor performance de busca para tabelas ou queries com grande quantidade de registros, por exemplo mais de 100.000 registros. Aqui eu tenho uma table com apenas 4010 registros e não dá para notar diferença de performance.
Notei que o Interbase 6 diferencia os acentos na busca, tem algum jeito de ignorar os acentos na busca, igual o Paradox?


Responder

Gostei + 0

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

Aceitar