Ver Mensaje Individual
  #17  
Antiguo 26-03-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Reputación: 25
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