Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-03-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Hola Caral

Si no estoy tan mal, lo que hace roman es evitar el uso del try...except con el case y me parece una excelente idea.

En todo caso, yo haría lo siguiente.

Código Delphi [-]
// J debe ser el indice del campo que deseas filtrar
case ADOQuery1.Fields[J].DataType of 
   ftString   : ADOQuery.Filter := ComboBox2.Text+ ' Like "'+Edit1.Text+ '*"'; //No se si es correcto el * y mejor deberias usar el signo de %.
     ftInteger : ADOQuery.Filter := ComboBox2.Text+ ' = '+Edit1.Text;
     ftFloat,ftCurrency : ADOQuery.Filter := ComboBox2.Text+ ' >= '+Edit1.Text;
end;

Se me hace raro que no puedas usar el signo = y uses el >=, pero eso puede suceder en campos de punto flotante o de moneda, por eso lo puse en el case de ftFloat y ftCurrency. Bueno, eso creo.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #2  
Antiguo 24-03-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 28
Caral Va por buen camino
Gracias egostar
Estoy tratando de hacerlo, de esta manera no hay forma, no se por que.?
Les agradezco todas sus intervenciones, me ayudan mucho.
Gracias
PD: Algun dia aprendere.
Saludos
Responder Con Cita
  #3  
Antiguo 26-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
No me gustaría que este tema se quedara así .

¿Por qué no te sale? Si en el combo1 tenemos los nombres de campos:
Código Delphi [-]
var idx :integer;
begin
  idx := query1.Fields.indexof(combo1.items[combo1.itemindex]);
  case Query1.Fields[idx].Datatype of
   .....
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 26-03-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 28
Caral Va por buen camino
Hola Lepe
La respuesta a esto:
Cita:
¿Por qué no te sale?
Ignorancia, desconocimiento, la opcion de Roman es fenomenal, funciona a medias, osea no pasa nada, no genera el filtro, pero no da error, por que , no se, me encantaria aplicarla, pero desconozco como, lo he intentado de varias formas (a mi alcance de conocimiento), pero no funciona.
Me gusta la forma en la que ayuda Roman, te da una pauta y luego te deja para que pienses, asi se aprende mas, bueno en este caso como que soy duro de mollera.
Saludos
Responder Con Cita
  #5  
Antiguo 26-03-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Hola Caral,

Estuve revisando el código e hice algunas pruebas, después de probar las opciones, este código me funcionó perfectamente.

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Query2.Close;
  case Query1.Fields[idx].Datatype of
     ftString   : Query2.Filter := ComboBox1.Text+ ' = '''+Edit1.Text+ '*''';
     ftInteger  : Query2.Filter := ComboBox1.Text+ ' = '+Edit1.Text;
     ftFloat,
     ftCurrency : Query2.Filter := ComboBox1.Text+ ' >= '+Edit1.Text;
     ftDate,
     ftTime     : Query2.Filter := ComboBox1.Text+ ' = '''+Edit1.Text+ '''';
  end;
  Query2.Filtered := True;
  Query2.Open;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  idx := ComboBox1.ItemIndex;
end;

Utilice dos TQuery un TComboBox, Un TEdit y un BitButton.

Nota: En la propiedad filter no puedes usar el Like ni comillas.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #6  
Antiguo 26-03-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 28
Caral Va por buen camino
Hola Maestros
No hay manera, me genera errores, lo tengo asi:
Os muestro el codigo completo para que lo veais mejor:
El combobox1, muestra las tablas.(bien)
El combobox2, muestra los campos.(bien)
El edit1 (en el evento onchange) hace el filtro.(Mal).
Código Delphi [-]
unit UFManTablas;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DBCtrls, DB, ADODB, Grids, DBGrids, ExtCtrls;

type
  TFManTablas = class(TForm)
    Panel1: TPanel;
    Label2: TLabel;
    ComboBox1: TComboBox;
    DBGrid1: TDBGrid;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    DBNavigator1: TDBNavigator;
    Button1: TButton;
    ComboBox2: TComboBox;
    Label1: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Button2: TButton;
    Button3: TButton;
    procedure ComboBox1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FManTablas: TFManTablas;

implementation

uses UDM1;

{$R *.dfm}

procedure TFManTablas.ComboBox1Change(Sender: TObject);
begin
    ComboBox2.Clear;
    ADOQuery1.Close;
    ADOQuery1.SQL.Text:= 'Select * from '+ComboBox1.Text;
    ADOQuery1.Open;
    DBGrid1.Columns.Clear;
    DBGrid1.Columns.State := csCustomized;
    DBGrid1.Columns[0].Width := 64;
    // con esto veo el nombre de los campos de la tabla gracias a Roman.
    DataModule1.AC1.GetFieldNames(ComboBox1.Text, ComboBox2.Items);
    
end;

procedure TFManTablas.Button1Click(Sender: TObject);
begin
  Close;
end;

procedure TFManTablas.FormCreate(Sender: TObject);
begin
   // con esto veo el nombre de las tablas garcias a Roman
   DataModule1.AC1.GetTableNames(ComboBox1.Items);
end;

procedure TFManTablas.Edit1Change(Sender: TObject);
var
//   Filtro : String;
idx :integer;
begin
//   idx := AdoQuery1.Fields.indexof(ComboBox2.items[ComboBox2.itemindex]);
/    idx := ComboBox2.ItemIndex;
     AdoQuery1.Close;
  case AdoQuery1.Fields[idx].Datatype of
     ftString   : AdoQuery1.Filter := ComboBox2.Text+ ' = '''+Edit1.Text+ '*''';
     ftInteger  : AdoQuery1.Filter := ComboBox2.Text+ ' = '+Edit1.Text;
     ftFloat,
     ftCurrency : AdoQuery1.Filter := ComboBox2.Text+ ' >= '+Edit1.Text;
     ftDate,
     ftTime     : AdoQuery1.Filter := ComboBox2.Text+ ' = '''+Edit1.Text+ '''';
  end;
  AdoQuery1.Filtered := True;
  AdoQuery1.Open;


 {  // esta opcion da un error en tiempo de diseño no en ejecucion
   // esto es por la rutina try except, que lo produce
   // no afecta el programa, filtra bien
   If (Edit1.Text <> '') then
   begin
   AdoQuery1.Filtered := false;
   try
   Filtro := ComboBox2.Text+ ' Like '''+Edit1.Text+ '*''';
   ADOQuery1.Filter := Filtro;
   ADOQuery1.Filtered := True;
  // showmessage(Filtro + '1');
   except
         Filtro := ComboBox2.Text+ ' = '+Edit1.Text;
         ADOQuery1.Filter := Filtro;
         ADOQuery1.Filtered := True;
   //       showmessage(Filtro + '2');
   end
    end
   else ADOQuery1.Filtered := False; }
 end;

procedure TFManTablas.Button2Click(Sender: TObject);
begin
  //  ADOQuery1.Close;
    Edit1.Text:= '';
end;

end.
A ver si se os ocurre algo.
Gracias
Saludos
Responder Con Cita
  #7  
Antiguo 26-03-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Hola Caral

Veo dos cosas,

1. El idx yo lo pondría en el evento onchange del combobox de los campos.

2. en el Edit1.Change veo que hay una inconsistencia que te da error cuando inicializas a '';

Código Delphi [-]
procedure TFManTablas.Edit1Change(Sender: TObject);
begin
    if Edit1.Text <> '' then begin // Solo si hay un campo a filtrar se realiza la operación.
      AdoQuery1.Close;
      case AdoQuery1.Fields[idx].Datatype of
          ftString   : AdoQuery1.Filter := ComboBox2.Text+ ' = '''+Edit1.Text+  '*''';
          ftInteger  : AdoQuery1.Filter := ComboBox2.Text+ ' = '+Edit1.Text;
          ftFloat,
          ftCurrency : AdoQuery1.Filter := ComboBox2.Text+ ' >= '+Edit1.Text;
          ftDate,
          ftTime     : AdoQuery1.Filter := ComboBox2.Text+ ' = '''+Edit1.Text+ '''';
     end;
     AdoQuery1.Filtered := True;
     AdoQuery1.Open;
  end;
end;

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 26-03-2007 a las 21:28:27.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Llenar un combobox con los campos de una tabla enecumene Conexión con bases de datos 6 07-03-2007 21:42:28
Deshabilitar items de un ComboBox vejerf Varios 0 06-02-2007 19:50:33
Codigo en los Items de un Combobox juanjoassenza OOP 3 20-07-2006 10:19:03
eliminar items combobox emiliu Varios 5 20-12-2005 08:12:13
Lista de items combobox Carlos Arevalo OOP 1 16-08-2003 07:10:48


La franja horaria es GMT +2. Ahora son las 06:43:44.


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
Copyright 1996-2007 Club Delphi