Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Autocompletado en Edit (https://www.clubdelphi.com/foros/showthread.php?t=81037)

jcrios_9 04-10-2012 11:38:37

Autocompletado en Edit
 
Hola amigos,

tenía una duda y es que tengo que disponer de autocompletado en el componente Edit con los datos de la base de datos.

Es decir, que mientras vaya rellenando el campo Nombre de un cliente, vaya apareciendo en el DBGrid o en el Edit (cualuiera de los dos) los datos.

Si escribo 'C', que vaya mostrando en el DbGrid o en en Edit: Carlos, Cecilio......

He estado buscando información y no encuentro nada.

Muchas gracias y un saludo

Casimiro Notevi 04-10-2012 11:53:09

Mira los enlaces de abajo, al final de la página, alguno puede servirte.

ecfisa 04-10-2012 12:00:16

Hola jcrios_9.

Para mostrarlo en un DBGrid, podes usar el evento OnChange del Edit:
Código:

void __fastcall TForm1::Edit1Change(TObject *Sender) {
  tuQuery->Close();
  tuQuery->SQL->Clear();
  tuQuery->SQL->Text = "SELECT * FROM TU_TABLA WHERE TU_CAMPO LIKE :DATO";
  tuQuery->ParamByName("DATO")->AsString = Edit1->Text + '%';
  /* Si se trata de un ADOQuery:
  tuQuery->Parameters->ParamByName("DATO")->Value = Edit1->Text + '%';
  */
  tuQuery->Open();
}

tuQuery, TU_TABLA y TU_CAMPO deberás reemplazarlos por los nombres correspondientes.

Saludos.

ElDioni 04-10-2012 12:11:36

Hola,

este código lo saqué en su día del club, sirve para que mientras vas escribiendo en un Edit te va autocompletando lo que te queda por escribir con la primera coincidencia que encuentra en la bbdd. Te lo pongo por si te sirve de algo.

Código Delphi [-]
if key=8 then
  begin
    if contador>0 then
      begin
        contador:=txtbusprov.SelLength+1;
        contador:=length(txtbusprov.text)-contador;
      end;
  end
else
  begin
    contador:=length(txtbusprov.text)-txtbusprov.sellength;
  end;
adoquery2.Close;
adoquery2.SQL.Text:='SELECT * FROM proveedores WHERE proveedor LIKE ' + quotedstr(txtbusprov.Text + '%');
adoquery2.Open;
if adoquery2.IsEmpty=false then
  begin
    if txtbusprov.text<>'' then
      begin
        texto:=txtbusprov.text; //Guardamos la letra pulsada
        campo:=adoquery2.FieldByName('proveedor').AsString;//asignamos al string el primer campo que coincide con esa letra
        Delete(campo,1,length(txtbusprov.text)); //contador); se le resta al campo el numero de letras que hemos escrito
        txtbusprov.Text:=texto + campo;//se concatena las letras escritas con lo que falta del campo
        txtbusprov.SelStart:=contador;//
        txtbusprov.SelLength:=50; //tamaño del campo
      end;
  end;

Saludos.


La franja horaria es GMT +2. Ahora son las 09:05:45.

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