Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   dblookupcombobox1 y edit (https://www.clubdelphi.com/foros/showthread.php?t=45378)

anubis 30-06-2007 23:46:33

dblookupcombobox1 y edit
 
Hola. Estoy intentando hacer una busqueda con un edit y un dblookupcombobox1 pero no me funciona bien.
Lo estoy haciendo con el evento onkeypress en el edit para que me fuera buscando con el locate en el lookup, pero solo me lo encuentra si escribo todo el texto que esta registrado en la tabla.

Queria que cada vez que escribiera una letra en el edit se posicionara en el lookup sobre esa letra y a medida que escribiera mas letras la busqueda fuera mas completa.

gracias

droguerman 01-07-2007 00:56:32

ayer postee un solución parecida creo que te puede servir:

http://www.clubdelphi.com/foros/showthread.php?p=211461

anubis 01-07-2007 06:43:44

Se agradece, pero no se como usar ese algoritmo en un dblookupcombobox, si es un listbox si porque lo compara rastreando el listbox.
Estuve mirando sobre los comodines pero no funcionan, es decir, usando el locate, con el edit1.text cuando el edit1.text es p* y el resto que buscara la primera letra que empiece por p y el resto lo pone el mismo.

alguna idea

gracias

droguerman 01-07-2007 08:02:17

mira, lo que hace ese algoritmo es inicializar el itemIndex en -1 simular que escribes todo el texto y nada más, solo hay que hacer una variante como esta, espero os resulte:

Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
var
  i : integer;
begin
  dblookup.keyvalue := null;
  for i:= 1 to length(edit1.text) do
     SendMessage(dblookup.Handle, WM_CHAR, integer(edit1.text[i]), 0);
end;

courtois 01-07-2007 08:27:43

en el OnKeyPress de tu edit
Código Delphi [-]
      DBLookUPComboBoxq.ListSource.Filter:='CAMPO LIKE '''+edit1.text+'%''';
      DBLookUPComboBoxq.ListSource.Filtered:=True;

anubis 01-07-2007 18:39:13

se agradece a los dos.
Droguerman: Funciona hasta cierto punto tu algoritmo, a veces localiza el nombre y a veces no.

courtois: en el dblookupcombobox no aparece el filter ni el filtered.

eduarcol 01-07-2007 18:50:36

Cita:

Empezado por anubis
en el dblookupcombobox no aparece el filter ni el filtered.

Prueba esto

Código Delphi [-]
TDataset(DBLookupComboBox1.ListSource).Filter

anubis 01-07-2007 19:31:04

estoy probando esto:
Código Delphi [-]
datacliha.tpersonas(buscapersonas.ListSource).Filter:='Nombre LIKE '''+edit1.text+'%''';
     datacliha.tpersonas(buscapersonas.ListSource).Filtered:=True;

donde datacliha es el datasource y el tpersonas es el tdataset, pero me da error en ambas 'missing operator o semicolon'

eduarcol 02-07-2007 19:33:16

No se que tan valida sera tu forma pero a mi me gusta mas esto:

Código Delphi [-]
TDataset(buscapersonas.ListSource).Filter:='Nombre LIKE ' + QuotedStr(edit1.text + '%');
TDataset(buscapersonas.ListSource).Filtered:=True;

Creo que es la forma correcta del cast, porq anteriormente casteabas a un objeto no a una clase como deberia ser,

pero es mi humilde opinion no se si estare en lo cierto

anubis 03-07-2007 00:48:41

No hombre, mi metodo no es valido simplemente que asi no me funcionaba con el tdataset, cosa que probe otra vez pero me dice que tdataset no esta declarado.
No se como se puede declarar el tdataset la verdad o como va, si me puedes orientar por que no me funciona asi como dices porque seguro me falta alguna cosa de poner.
Como digo tengo el datasource y el ttable no puse mas

gracias y perdona

eduarcol 03-07-2007 19:10:37

Agrega en el uses la unidad db

anubis 04-07-2007 02:13:20

Gracias. Nose porque tengo problema en tiempo de ejecucion con esto:
Código Delphi [-]
procedure Tfconcliente.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
TDataset(buscapersona.ListSource).Filter:='Nombre LIKE '''+edit1.text+'%''';
TDataset(buscapersona.ListSource).Filtered:=True;procedure

el aviso que me sale es violacion de memoria. No se si esto es tan dificil hacer una busqueda cada vez escribiendo una letra que lo buscara. El remedio quiza sea meter la tabla en un combobox.

gracias

eduarcol 04-07-2007 14:13:49

Acces Violation es problema que no se ha creado el componente, sera que el datasource que le estas asinado al combo no es un dataset o no tiene la propiedad filter????

no se me ocurre que otra cosa puede dar el acces violation, estas seguro que es en esa linea???


La franja horaria es GMT +2. Ahora son las 15:03:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi