Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Filtros con maskedit (https://www.clubdelphi.com/foros/showthread.php?t=48324)

novato03 21-09-2007 17:32:32

Filtros con maskedit
 
Hola amigos del clubdelphi, mi pregunta es, cómo le hago para filtrar un registro de teléfono en este formato (809)999-9999?, ya que cuando lo intento en ese formato da error.:confused: Utilizo delphi-7 y access.

Si alguien me puede dar una ayuda, se lo agradecería, gracias anticipadas...:(

enecumene 21-09-2007 17:55:41

Hola, podrias postear algo codigo? para asi poderte ayudar.

Saludos.

novato03 23-09-2007 05:08:55

Asunto
 
Este es el código que utilizo...

Código Delphi [-]
procedure TFrmContactos.MaskEdit1Change(Sender: TObject);
var
   Filtro : String;
begin

   If (MaskEdit1.Text <> '') then
   begin
      Dmodulo.tblContactos.Filtered := False;
      If ComboBox1.Text = 'Teléfono' then Filtro := 'telefono Like '+MaskEdit1.Text
         else If ComboBox1.Text = 'Celular' then Filtro := 'celular Like '''+ MaskEdit1.Text + '*''';
      Dmodulo.tblContactos.Filter := Filtro;
      Dmodulo.tblContactos.Filtered := True
   end
   else Dmodulo.tblContactos.Filtered := False;

end;

Cuando utilizo un Edit me presente al siguiente error al empezar a digitar el número en este formato (809)999-9999.


Cita:

Project Sisconem.exe raised exception class EOleException with message 'No se encontró el elemento en la colección que corresponde con el nombre o el ordinal pedido'. Process stopped. Use or Run to continue.
y cuando utilizo un MaskEdit presenta el siguiente error...

Cita:

Project Sisconem.exe raised exception class EOleException with message 'Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros'. Process stopped. Use or Run to continue.

Es que acaso no es posible filtrar con formato como este (809)999-9999?:confused:

waly2k1 23-09-2007 05:38:10

Error de Nombre de Campo
 
No vi mucho el codigo, pero el 1º error que te presenta es porque no existe el nombre del campo por el cual estas filtrando.
Verificá bien en tu tabla si los campos telefono y celular existen realmente, quizas en plural, acentuados o algo por el estilo.
El segundo es porque tenes un lio con los apóstrofes '''.

En lugar de traer una tabla con todos los contactos y despues filtrar, te recomiendo uses un query y lo cargas cuando selecciones en el combo.

Si bien el like en Access funciona con asterisco, cambialo por % que de esta forma te va a funcionar con cualquier BD.

Por qué no usas un poco de lógica ?
al cargar el combo lo cargas asi: TELEFONO y CELULAR (sacando el acento de tel.)
Entonces usas
Filtro := ComboBox1.Text + 'LIKE ' + QuotedStr( MaskEdit1.Text ) + '%';

Así te queda mas legible.
Saludos y espero haberte ayudado

novato03 23-09-2007 14:53:05

Asunto
 
Gracias por la ayuda, pero me sigue presentando el mismo error, en todo caso el código que escribi arriba me finciona perfectamente con Código con su respectivo acento en el combobox, tambien funciona con empresa, contacto, etc, el problema ocurre al implemntar la busqueda por teléfono en este formato, sin estos simbolos ()- me funciona pero al incluirlos bam error, ya sea con maskedit o edit.:mad:

enecumene 23-09-2007 15:42:19

Hola, Creo que te faltan comillas aqui:

Código Delphi [-]
If ComboBox1.Text = 'Teléfono' then Filtro := 'telefono Like '+MaskEdit1.Text+ '*'''

intentalo, luego nos comentas.

Saludos.

Lepe 23-09-2007 15:53:01

Filtro := ComboBox1.Text + 'LIKE ' + QuotedStr( MaskEdit1.Text ) + '%';

ummmm, el comodin debe estar dentro del QuotedStr y antes de la palabra "like" falta un espacio (o dará fallo al ejecutar el sql)

Código Delphi [-]
Filtro := ComboBox1.Text + ' LIKE ' + QuotedStr( MaskEdit1.Text+ '%') ;
y ahora si, todo el texto y el comodín se encierran entre comillas.

Saludos

Caral 23-09-2007 15:54:25

Hola
Aquí la pregunta seria:
Los campos Teléfono y Celular son Numéricos o texto en la base de datos.
Si son numéricos no va a aceptar ().
Saludos

waly2k1 23-09-2007 19:41:15

Bien
 
Cita:

Empezado por Lepe (Mensaje 233227)
ummmm, el comodin debe estar dentro del QuotedStr y antes de la palabra "like" falta un espacio (o dará fallo al ejecutar el sql)


Efectivamente Sr., totalmente de acuerdo con tu acotación. Lo escribí rápido y no presté atención a esos 'detalles'.

Saludos

novato03 23-09-2007 22:47:17

Asunto
 
Gracias a todos por la ayuda, logré solucionar el problema para filtrar por el maskedit el único problema es que cuado limpio el mask edit no se muestran todos los registros en el DBGrid se queda en blanco, aúnque ese problema no sucede cuando realizo la busqueda por código, empresa, contacto, etc, inmediatamente limpio regresan al DBDgrid los registros pero con el maskedit no sucede la misma situación. Acaso debo agregar algo más?:confused:

Lepe 24-09-2007 11:56:23

Acabo de releer el hilo y me parece extraño que funcione. Tenía entendido que "Like" era incompatible con la propiedad Filter (o sea que no funcionaba). Revisa que devuelva los datos correctos.

Yo hablaba de sql, es decir de un TADOQuery en el que su claúsula where fuese la comentada.

En cuanto a lo que comentas, puede que esté interfiriendo las otras condiciones de búsqueda, en resumen, debería quedar algo así:
Código Delphi [-]
 Dmodulo.tblContactos.Filtered := False;
 if ChequedaCondiciones then
   Dmodulo.tblContactos.Filtered := True;
Ya que si cada condición pone el Filtered a True/False, puede que al final no haga lo que deseas.


Saludos


La franja horaria es GMT +2. Ahora son las 16:14:43.

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