No puedo filtrar por dos campos
Hola muy buenas tardes tengan ustedes...
Estoy haciendo una base de datos donde tengo que filtrar dos campos a la vez pero no puedo :( y quisisera saber como hacerles, miren, esto es lo que estoy haciendo: procedure TForm1.Edit1Change(Sender: TObject); begin // filtrar o localizar if (not cbFiltrar.Checked) then begin // Busqueda incremental ClientDataSet1.Locate('Campo4', Edit1.Text, [loCaseInsensitive, loPartialKey]); Exit; end else begin // esto sería para filtrar if (Edit1.Text = '') then begin ClientDataSet1.Filtered := false; ClientDataSet1.Filter := ''; end else begin ClientDataset1.Open; ClientDataSet1.Filter := '(Campo4 =' +QuotedStr(Edit1.Text) +') and (Campo5 = '+QuotedStr(Edit2.Text)+ ')'; ClientDataSet1.Filtered := True; end; end; end; y pues nomas no lo filtra.... por favor quien me pueda ayudar se lo agradeceria bastante. |
jejeje otra preguntota despues de filtrar como le hago para eliminar los otros datos que no coinciden???
gracias |
Hola,
Bienvenido al Club Delphi, primero que todo siempre aconsejamos a los nuevos usuarios a que revisen la Guia de estilo y que además usen la Búsqueda de los foros |
Usar las etiquetas [ delphi ][ /delphi ] sin los espacios...
Ahora... ¿seguro que le estas pasando bien el filtro? :rolleyes: |
sip.... puedo filtrar solo lo de el edit1 pero lo del edit2 nomas no lo hace... y revise todos los posts que hay y ninguno me ha funcionado:(....como le puedo hacer...eske hagan de cuenta que filtra el primer edit pero el segundo no lo filtra de la misma tabla
|
Cita:
A que te refieres con que filtra el primero edit y el segundo no, por lo que veo solo que un registro tenga los dos valores te lo va a mostrar, no uno u otro Salud OS |
Hao!
mira eske por ejemplo si pongo solo: ClientDataSet1.Filter := ('Campo4 =' + QuotedStr(Edit1.Text) ); me muestra lo que voy filtrando del edit pero no se como hacerle para que agarre el filtro del segundo edit ya le trate de mil maneras y naaaa pero aunque lo deje como está arriba hace lo mismo me filtra solo lo del primer edit |
Cita:
Salud OS |
ok mira:
tengo varios campos que se llaman: campo2,campo3,campo4,campo5 respectivamente y lo que quiero hacer es filtrar lo que viene en el campo4 para despues aplicar otro filtro para campo5 pero que sin se quite el filtro de campo4.....por ejemplo: aplico filtro a campo4 (filtro Edit1 funciona correctamente) selecciona: Ing. Industrial aplico filtro a campo5 (filtro Edit2 ??) seleccion: Quimica I por lo que quedaria en la tabla Ing. Indutrial Quimica blabalbal no se si me de a entender gracias |
Cita:
Lo que tu necesitas es un ordenamiento por el campo4 y despues por el campo5, pero eso no lo vas a poder hacer con una Tabla, que me imagino estas usando, para esos menesteres necesitas una sentencia SQL mas o menos de esta forma
A ver si así obtienes lo que necesitas. Salud OS |
Una molestia del tamaño del mundo no me podrias explicar paso por paso??
eske soy novato en bases de datos, mira: estoy jalando el archivo a una DBgrid desde microsoft access y de ahi empieza el show asi es...eske la vvd no se a que te refieres con tabla muchas gracias y perdon por la molestia |
Cita:
Salud OS |
TADOQuery=ADOQ(nombre)
TDataSetProvider=DSProvider(nombre) TClientDataSet=ClientDataSet1(nombre) TDataSource=DataSource1(nombre) ClientDataSet1: TClientDataSet; DataSource1: TDataSource; DBGrid1: TDBGrid; Edit1: TEdit; Label2: TLabel; StatusBar1: TStatusBar; ADOQ: TADOQuery; DSProvider: TDataSetProvider; lblData: TLabel; cbFiltrar: TCheckBox; parte del codigo: [/delphi] procedure TForm1.Edit1Change(Sender: TObject); begin // filtrar o localizar if (not cbFiltrar.Checked) then begin // Busqueda incremental ClientDataSet1.Locate('Campo4', Edit1.Text, [loCaseInsensitive, loPartialKey]); Exit; end else begin // esto sería para filtrar if (Edit1.Text = '') then begin ClientDataSet1.Filtered := false; ClientDataSet1.Filter := ''; end else begin ClientDataset1.Open; ClientDataSet1.Filter := ('Campo4 =' + QuotedStr(Edit1.Text) ); ClientDataSet1.Filtered := True; end; end; end; procedure TForm1.FormShow(Sender: TObject); var path:string; begin Path := ExtractFilePath(Application.ExeName) + 'Data11.xml'; // Existe el XML? if FileExists(path) then begin ClientDataSet1.LoadFromFile(path); lbldata.Caption := ExtractFileName(path); Exit; end; // Probar con el MDB Path := ExtractFilePath(Application.ExeName) + 'Data.MDB'; // Existe el MDB? if FileExists(path) then begin ClientDataSet1.ProviderName := 'DSProvider'; ADOQ.Open; ClientDataSet1.Active := True; ADOQ.Close; ClientDataSet1.ProviderName := ''; lbldata.Caption := ExtractFileName(path); Exit; end; // Si llega aqui es que no existe ninguno de los dos. MessageDlg('No se ha encontrado ninguna fuente de datos; Data.XML o Data.MDB', mtWarning, [mbOK], 0); end; muchisimas gracias..:) |
alguien que me pueda ayudar????:( ya lo intente de muchisimas formas y nadae perdon por la molestia pero la verdad no se mucho de bases de datos es la primera vez que hago una
gracias |
La condición esta mal. Ponle >= y <=
Te Explico si es (igual Edit1.text) no podra ser (igual a edit2.text) Asi es que lo que tienes que hacer es, poner entre rangos osea: de 1 a 100 solo quiero de 10 a 20 seria asi if (>= 10) and (<= 20) then ... Lo mismo con los flitros. Saludos |
La franja horaria es GMT +2. Ahora son las 20:09:48. |
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