Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   !!Problemas con IF y sus valores !! (https://www.clubdelphi.com/foros/showthread.php?t=75949)

Caral 30-09-2011 00:17:57

Hola
Código Delphi [-]
procedure TFClientes.Edit1Change(Sender: TObject);
var
   Filtro : String;
begin
   If (Edit1.Text <> '') then
   begin
      datamodule1.tarchivo.Filtered := False;
      If ComboBox1.Text = 'Numero' then Filtro := 'Numero Like '+Edit1.Text
         else If ComboBox1.Text = 'Nombre' then Filtro := 'Nombre Like '''+ Edit1.Text + '*''';

      datamodule1.tarchivo.Filter := Filtro;
      datamodule1.tarchivo.Filtered := True
   end
   else datamodule1.tarchivo.Filtered := False;
end;
Saludos

Darkseratul 30-09-2011 00:43:14

Gracias
 
Cita:

Empezado por Caral (Mensaje 414093)
Hola
Código Delphi [-]
procedure TFClientes.Edit1Change(Sender: TObject);
var
   Filtro : String;
begin
   If (Edit1.Text <> '') then
   begin
      datamodule1.tarchivo.Filtered := False;
      If ComboBox1.Text = 'Numero' then Filtro := 'Numero Like '+Edit1.Text
         else If ComboBox1.Text = 'Nombre' then Filtro := 'Nombre Like '''+ Edit1.Text + '*''';

      datamodule1.tarchivo.Filter := Filtro;
      datamodule1.tarchivo.Filtered := True
   end
   else datamodule1.tarchivo.Filtered := False;
end;
Saludos

Muchas gracias por responder invertir los los campos fue lo primero que pensé funciona pero me da el mismo resultado

que el código anterior

Código Delphi [-]
procedure TFClientes.Edit1Change(Sender: TObject);
begin
  // Siempre se quita el filtro
  datamodule1.tarchivo.Filtered := False;

  // Hacer algo si hay texto
  if (Edit1.Text <> '') then
  begin
    // Crear el filtro
    if CheckBox1.Checked  then
    begin
      datamodule1.tarchivo.Filter := 'Nombre Like ''' + Edit1.Text + '*''';
      datamodule1.tarchivo.Filtered := True
    end
    else if CheckBox2.Checked  then
      begin
      datamodule1.tarchivo.Filter := 'Numero Like '+ Edit1.Text;
      datamodule1.tarchivo.Filtered := True
    end
    else
    datamodule1.tarchivo.Filtered := False;
   end;
end;

paso lo mismo es como me dijiste que se salta el Like creo que el error esta en la tabla en la base de datos :(

ecfisa 30-09-2011 02:10:17

Hola Darkseratul.

Cita:

Eso no puede pasar por que el el evento de onclick del chebox le digo que ponga en false los demas chebox
Como veo que que los CheckBox son excluyentes, te convendría usar un RadioGroup.

Uff!! realmente no sé si no me he perdido con tanto mensaje... :), pero creo que tu error es intentar usar LIKE con un campo numérico.

Un ejemplo usando RadioGroup:
Código Delphi [-]
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
  with DataModule1.tarchivo do
  begin
    Filtered:= False;
    case RadioGroup1.ItemIndex of
      0: Filter:= 'Nombre Like ' + QuotedStr(Edit1.Text + '*');
      1: Filter:= 'Numero >= ' + QuotedStr(Edit1.Text);
      2: Filter:= 'OtroCampo Like ' + QuotedStr(Edit1.Text + '*');
      ...
    end;
    Filtered:= True;
  end;
  RadioGroup1.ItemIndex:= -1;
end;

Un saludo.

Caral 30-09-2011 02:45:40

Hola
El codigo sirve, lo que pasa es que creo que no es lo que buscas, te explico:
Cuando haces una busqueda de un texto, el filtro se comporta como debe, va buscando letra por letra ya que son palabras y una palabra es un todo.
Cuando se busca por numero estos van progresivamente, osea:
0
1
2
3
etc.......
Si quieres buscar el numero 1234, tendrás que pasar por el 1233 antes ya que es el numero anterior.
NO puedes buscar un numero por su inicio, osea todos los que empiecen por 1, por lo menos no con este tipo de filtros.
Para hacer eso se necesitaría, me imagino, hacer una función que lo haga y pasar ese valor al filtro.
Espero que me entiendas.
Saludos
PD: El código de ecfisa filtra teniendo el cuenta si es mayor o igual, pero no sirve en este caso, por que tampoco filtrara solo los que empiecen por un numero determinado que es, creo, lo que buscas, no lo se.

ecfisa 30-09-2011 03:21:01

Cita:

El código de ecfisa filtra teniendo el cuenta si es mayor o igual, pero no sirve en este caso, por que tampoco filtrara solo los que empiecen por un numero determinado que es, creo, lo que buscas, no lo se.
Totalmente de acuerdo, si lo que desea es hacer una busqueda incremental sobre un campo numérico no funcionará. Sólo que tratándose de magnitudes me pareció lógico comparar por mayor o igual.

Cita:

NO puedes buscar un numero por su inicio, osea todos los que empiecen por 1, por lo menos no con este tipo de filtros.
También de acuerdo, yo tampoco conozco que haya manera de hacelo.

Un saludo.


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

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