Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Busqueda De Un Cliente Avanzada (https://www.clubdelphi.com/foros/showthread.php?t=88124)

alexglez1255 15-04-2015 08:24:58

Busqueda De Un Cliente Avanzada
 
tengo una busqueda de un cliente donde uso un dbgrid para mostrar los clientes donde los clientes me los ordena en orden alfabetico
pero solo me ubica si le pongo lo primero por ejemplo
CLIENTE : MARIO HINOJOSA PEREZ

cuando le tecleeo el dato a buscar me encuentra el registro si empiezo tecleando MARIO pero si en ves de eso le pongo HINOJOSA no me lo encuentra y tambien queria que resaltara en el dbgrid el registro encontrado... me explico ..? la verdad no se como hacerle para hacer la busqueda mas avanzada...uso la orden LOCATE para buscar el registro
Código Delphi [-]
procedure Taltadecontratos.edtBuscarCteChange(Sender: TObject);
var
 cadenaAbuscar:String;
 codcliente:Integer;
begin
cadenaAbuscar:=edtBuscarCte.Text;
if (cmbBusqCte.ItemIndex<>1)and(CadenaAbuscar<>'') and (not TryStrToInt(cadenaAbuscar,codcliente)) then
  begin
   ShowMessage('En el campo de Codigo solo puede escribir numeros, ponga cuidado por favor');
      edtBuscarCte.SetFocus;
      exit;
  end;
if (cmbBusqCte.ItemIndex=1) then
    LogicaNegocio.CDSclieCOD.Locate('CLIENTE',edtBuscarCte.Text,[loPartialKey]);
end;

procedure Taltadecontratos.DBGridMostrarClientesDblClick(Sender: TObject);
 var
  codclie:integer;
begin
  codclie:=logicanegocio.CDSclieCODCOD_CLIENTE.Value;
  edtBuscarCte.Text:=logicanegocio.CDSclieCODCLIENTE.Value;
  DBGridMostrarClientes.Visible:=False;
   With logicanegocio do
    begin
     If  Dadodealta=true then   ShowMessage('Debe de terminar o cancelar el contrato que esta haciendo ahorita');


//   if (cdsUnCliente.ChangeCount>0) then
//  cdsUnCliente.ApplyUpdates(0);
//  if (CDSCont.ChangeCount>0) then
//  CDSCont.ApplyUpdates(0);
  cdsunCliente.Close;
  cdsunCliente.Params.ParamByName('COD_CLIENTE').AsInteger:=codclie;
  CdsunCliente.Open;
  end;//with logicaneg
    end;

procedure Taltadecontratos.cmbBusqCteChange(Sender: TObject);
begin
case cmbBusqCte.ItemIndex of
0: begin edtBuscarCte.MaxLength:=0; end;
1: begin
   edtBuscarCte.MaxLength:=0;
   LogicaNegocio.CDSclieCOD.IndexFieldNames:='Cliente';
   DBGridMostrarClientes.Visible:=true;
  end;
end;//case

edtBuscarCte.Text:='';
edtBuscarCte.SetFocus;

end;

este es todo el codigo que uso garcias por su gran ayuda

ecfisa 15-04-2015 09:58:09

Hola alexglez1255
Cita:

Empezado por alexglez1255 (Mensaje 491331)
...
pero solo me ubica si le pongo lo primero por ejemplo
CLIENTE : MARIO HINOJOSA PEREZ

cuando le tecleeo el dato a buscar me encuentra el registro si empiezo tecleando MARIO pero si en ves de eso le pongo HINOJOSA no me lo encuentra y tambien queria que resaltara en el dbgrid el registro encontrado... me explico ..?

Perfectamente, pero para obtener ese tipo de resultado vas a tener que usar un filtro en lugar de Locate:
Código Delphi [-]
procedure TtuForm.EditChange(Sender: TObject);
begin
  with ClientDataSet do
  begin
    Filtered := False;
    Filter   := Format( 'NOMBRE_DEL_CLIENTE LIKE %s ', [ QuotedStr('%' + Edit.Text + '%') ] );
    Filtered := True;
  end;

Saludos :)

Neftali [Germán.Estévez] 15-04-2015 10:02:48

En este caso deberás realizar la búsqueda y filtrar los registros utilizando SQL. Puedes utilizar el operador LIKE.
Además el Locate no es muy eficiente pues obliga a recorrer todos los registros de la tabla (si hay pocos no hay problema).

Revisa este ejemplo y mira el código. Es exactamente lo que te estoy comentando, a ver si es lo que necesitas.


alexglez1255 15-04-2015 23:35:10

muchas gracias neftali voy a probar tu sugerencia....ECFISA gracias por tu sugerencia esa ya lo hice pero no es posible cuando se escribe el apellido, solo funciona el filtro cuando lo que se escribe esta al principio

pero gracias por su ayuda

ecfisa 16-04-2015 01:45:07

Hola alexglez1255.
Cita:

Empezado por alexglez1255 (Mensaje 491375)
muchas gracias neftali voy a probar tu sugerencia....ECFISA gracias por tu sugerencia esa ya lo hice pero no es posible cuando se escribe el apellido, solo funciona el filtro cuando lo que se escribe esta al principio

Sin dudas te refieres al ejemplo que te dí en este hilo. Pero este último, aunque parecido, no es igual.

Podes apreciar en esta imágen la diferencia del comportamiento con el anterior:


Te sugiero que lo pruebes tál como figura en el mensaje ya que realiza correctamente lo que solicitas

También te adjunto los fuentes del demo (incluye la tabla country) por si tuvieras alguna dificultad.

Saludos :)

ecfisa 16-04-2015 01:50:16

1 Archivos Adjunto(s)
Hola de nuevo.

Olvide el adjunto...

Saludos :)


La franja horaria es GMT +2. Ahora son las 23:26:17.

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