Ver Mensaje Individual
  #7  
Antiguo 09-06-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Reputación: 27
Caral Va por buen camino
Hola
Vamos a resolver esto paso a paso:
1- Tienes que filtrar o un dato (interger) o un dato (string) en el mismo adotable.
2- Tratamos de usar OR pero se niega.
Entonces lo podemos atacar por otro lado, definiendo el filtro dependiendo de si es uno u otro:
Primero creamos una variable global, esta la colocamos publica:
Código Delphi [-]
 public
    { Public declarations }
   tipo: integer;
Esta variable nos servira para que guarde simplemente un numero.
Ahora nos colocaremos en el evento onKeyPress del edit (edtBuscar) que es el que da el dato al filtro.
En ese evento colocamos esto:
Código Delphi [-]
if (Key in ['0'..'9',#8]) then
  begin
  Tipo:= 1;
  end
  else
  Tipo:= 0;
Esto lo que hace es simplemente indicar si escribimos numeros o letras, de ser numeros el valor de Tipo sera 1 de lo contrario 0.
Bien ahora si hacemos el filtro:
Código Delphi [-]
procedure TfrmTicket.btnBuscarClick(Sender: TObject);
var
   Filtro : String;
begin
  ADOTableTicket.Filtered := False; // desconectamos el filtro

  if edtBuscar.Text <> '' then // si no esta vacío
  begin

  If Tipo = 1 then begin // si tipo es igual a 1 filtra por el tiquet (integer)
  Filtro := 'TicketID Like '+edtBuscar.Text;
  end;

  If Tipo = 0 then begin // si tipo es igual a 0 filtra por el usuario (string)
  Filtro := 'Usuario Like '''+ edtBuscar.Text + '*''';
  end;

  ADOTableTicket.Filter := Filtro; // obtiene el filtro
  ADOTableTicket.Filtered := True // lo Filtro

  End;
end;
Bien, creo que es un codigo mas claro.
Primero definimos si queremos filtrar por numeros o letras.
Segundo con el valor generado en la variable hacemos o un filtro u otro.
Espero que si no te sirve por lo menos ayas aprendido algo mas, aunque sea sencillo.
Saludos
__________________
Siempre Novato
Responder Con Cita