PDA

Ver la Versión Completa : problemas con el espacio


superhopi
27-05-2003, 09:39:37
Tengo un form que presenta los datos de una tabla en un dbgrid. Para reducir los registros tengo la opcion de hacer un filtrado de los datos, pero tengo un probema; cuando detecta un espacio me sale un mensaje de error diciendo que es un caracter no valido o que entra en conflicto con otros.
¿Cómo puedo hacer que el espacio me lo tenga en cuenta si quiero filtrar algo como "La casa"?

superhopi
27-05-2003, 14:13:53
Parece que no sabe nadie como solucionar el problema ^_^
No pasa nada, que no busquen espacios.
:cool:

andres1569
27-05-2003, 17:40:02
Hola:

Pues me extraña mucho. Lo he probado y no me da error. ¿Usas la propiedad Filer para filtrar? En ese caso la cadena debes ponerla entre comillas simples (supongo que lo has hecho así), si las pones dobles, al menos en mi caso, me advierte del error, algo así como "Invalid character ..." (quizás sea esto lo que te hace pensar que se refiere al espacio).

Un saludo

marcoszorrilla
27-05-2003, 18:48:45
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Filter:='Company ='+QuotedStr(Edit1.Text);
Table1.Filtered:=True;
end;


Si muestras el código que utilizas para hacer el filtrado será más fácil ver donde pueda estar el fallo.

Un Saludo.

superhopi
28-05-2003, 08:49:57
Mirad:
Lo que pretendo hacer es esto:

datos.obras.Filter:=comb+' like %' + conte.Text + '%';

datos--> modulo de datos
obras-->tabla
comb-->comb una variable tipo string que contiene el nombre del campo donde se quiere buscar
conte.text-->es el texto que se quiere buscar

Me sigue dando error si pongo:
- La casa
... sin embargo 'la','casa' o 'lacasa' no me da error.

Muchas gracias de antemano.

__cadetill
28-05-2003, 09:55:05
Prueba con esto


var str : string;
begin
str := '%' + conte.Text + '%';
datos.obras.Filter:=comb+' like ' + QuotedStr(str);
end;


Espero te sirva

marcoszorrilla
28-05-2003, 15:26:33
Los filtros no aceptan like ni aproximaciones, eso lo tienes que hacer mediante SQL.

O por el contrario utilizar el evento OnFilterRecord del TTable.

Aquí tienes un ejemplo, utilizando la tabla Customers del Alias DbDemos de Delphi.

Necesitas un TTable conectado a dicho alias y a la tabla Customers y un Edit en donde escribiras la cadena a filtrar.

procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
var
sp, ss: ShortString;
begin

with DataSet do
begin
//En el Tedit escribimos la cadena a filtrar
sp :=AnsiUpperCase(EdMifiltro.Text);
ss := AnsiUpperCase(FieldByName('Country').asString);
Accept := POS(SP,SS)>0 ;

end;


end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Filtered:=True;
end;


Un Saludo.

Bacterion
28-05-2003, 15:29:53
El filtro del TClientDataset (vale, del TCustomX) si que admite likes... yo le hecharía un vistazo.