Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-02-2008
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
campo filter firebird

Buenas, ya he cambiado todas mis base de datos a firebird en la aplicacion que estaba realizando, y funciona!!!. De momento sigo usando del tipo:
table1.fielbyname('codigo').asinteger, todavia nose como se podria hacer en sql.

La pregunta viene con los campos filter, porque pongo por ejemplo:

table1.filter:='Tipo = '+'1 Cama KSize';
table1.filtered:=true;
pero me arroja un error, para campos que no llevan espacios funciona pero para estos no funciona da error.
Esto es asi? o que estoy haciendo mal.

gracias
Responder Con Cita
  #2  
Antiguo 11-02-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Bueno, a pesar de que no nos dices cual es dicho error, yo creería que es porque faltan las comillas... osea debería ser asi:

Código Delphi [-]
table1.filtered := False;
table1.filter   := 'Tipo = '+'"1 Cama KSize"';
table1.filtered := True;

Por otro lado, dependiendo de lo que necesites, muchas veces deberias plantearte usar los filtros desde la consulta y no desde la propiedad Filter de los TQUery (Eso si, repito, dependiendo de lo que necesites).

Espero te sirva.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 11-02-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Para acceder a Firebird te recomiendo que uses componentes como los IBExpress (IBX) o algunos otros como MDO...

Esto por que usar componentes TTable para acceder a los datos de Firebird es muy costoso en cuanto al tráfico en la red...

Para tu problema con los filtros, trata así:

Código Delphi [-]
Table1.Filter := 'Tipo = ''1 Cama KSize''';
Table1.Filtered := True

Pero lo optimo sería algo así (usando un componente TIBQuery de los IBX:

Código Delphi [-]
TIBQuery1.SQL.Text := 'select * from Tabla where Tipo = ''1 Cama KSize''';
TIBQuery1.Open;


Saludos...
Responder Con Cita
  #4  
Antiguo 11-02-2008
gendelphi gendelphi is offline
Miembro
 
Registrado: jul 2003
Ubicación: Tlaxcala Mexico
Posts: 73
Poder: 21
gendelphi Va por buen camino
También puedes hacerlo usando parámetros:
Código Delphi [-]
TIBQuery1.SQL.Text := 'select * from Tabla where Tipo = :Tipo';
TIBQuery1.ParamByName('Tipo').Value:= '1 Cama KSize ';
TIBQuery1.Open;
Responder Con Cita
  #5  
Antiguo 12-02-2008
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias por las respuestas, me que da mucho por aprender de estas cosas.
Código Delphi [-]
table1.filtered := False;
table1.filter   := 'Tipo = '+'"1 Cama KSize"';
table1.filtered := True;
si en vez de poner '"1 Cama KSize, pongo una variable no funciona
Código Delphi [-]
cv:='1 Cama KSize';
table1.filtered := False;
table1.filter   := 'Tipo = '+cv;
table1.filtered := True;
Esto asi no funciona.

gracias de nuevo
Responder Con Cita
  #6  
Antiguo 12-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
anubis,
Acostumbrate a usar QyotedSTr() y te olvidas del parto de controlar las comillas.

Código Delphi [-]
table1.Filter := 'Tipo = ' + QuotedStr(cv));

Y como consejo, en lo posible evitate empler filter. Es un proceso que en ocasiones suele ser lento. Se gana más perfomance empleando su variante: una consulta SQL. Y en este tema de las consultas SQL, lo mejor es emplear parámetros, tal como lo demuestra gendelphi.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 12-02-2008
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Cita:
Empezado por ayuda Delphi sobre Filter en los IBX
Specifies rows in a dataset that meet the filter conditions.

property Filter: string;

Description

Use the Filter property to restrict the rows in the dataset to those that meet the filter conditions. The syntax for Filter is the same as the search condition that appears after a WHERE clause in a Select statement. For example, to view only those records where the value in the Country field contains 'France' or 'Fiji':

Country = 'France' or Country = 'Fiji'

You can use standard SQL wildcards such as percent (%) and underscore (_) in the condition when you use the LIKE operator. The following filter condition retrieves all Countries beginning with 'F':

Country LIKE 'F%'

To view rows that have a NULL value in the Country column and Contact_Name is not NULL, use the IS operator:

Country is NULL and Contact_Name is not NULL

You can also use complex expressions in filter clauses. The following example retrieves rows containing Country values that use Francs as currency.

Country IN (SELECT Country from Country where Currency = '_Franc')
No entiendo porque puede ser lento el trabajar con Filters?
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #8  
Antiguo 12-02-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Si estás en ambiente Cliente/Servidor y tienes tablas grandes y desde tu aplicación Delphi usas componentes TTable (o TIBTable), cada que abras un componente de estos, este se traerá todo el contenido de la tabla hasta la PC cliente, lo que conlleva a saturar la red y lentitud en la aplicación. Es por esta razón que trabajar con filtros es algo lento.

Ahora, usando IBX, es preferible hacer el filtro directamente desde la cláusula where ya que con esto solo se traen los datos necesarios.

Saludos...
Responder Con Cita
  #9  
Antiguo 12-02-2008
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
bueno creo que están mezclando el caso de el Filter en un componente TTable y un componente IBTable, lo que yo tengo entendido es que el componente TTable trae toda la información e internamente este le hace los procesos de filtrado y demás, mientras que los componentes estilo IBX o MDO ponen en un IBTable después de un "select * from table" la clausula "where Filtro = ValorFiltro".... para probar esto los invito a hacer la siguiente pruba:

en Paradox creen una Tabla con 10 mil registros con dos campos uno llamado Id (entero auto incrementado de 1 a 10000) y otro nombre (texto de tamaño 150 y por defecto 'Usuario ' + id)... accedan a dicha tabla con un TTable con filtro (id < 200) y sin filtro, luego accedan con un componente TQuery (select * Tabla) con filtro (where id < 200) y sin filtro... veran que la velocidad siempre es similar tanto en el TQuery como en el TTable (con filtros o sin ellos)

Luego realizar el mismo proceso pero con un bd en FIrebird y componentes IBX o MDO, verá que la velocidad de un IBQuery con where id < 200 ó de una TTable con filtro id < 200 son similares y mucho mas rápidas que sin dichos filtros
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"

Última edición por RONPABLO fecha: 12-02-2008 a las 18:09:50.
Responder Con Cita
  #10  
Antiguo 22-02-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

osea que te traes la data desde le servidor y luyego la filtar en el cliente.

Yo creo que deberias traerte la data ya filtrada. Bueno eso pienso yo.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
Respuesta



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
campo money en Firebird ebeltete Firebird e Interbase 23 02-05-2008 19:11:11
Campo Filter de ADOTable Sr.Scorpion Conexión con bases de datos 17 20-03-2007 18:49:53
problema con un campo en firebird julyus Conexión con bases de datos 2 05-01-2007 22:15:13
Problemas firebird y campo float con ibexpert IPQ Firebird e Interbase 1 23-08-2006 16:33:16
Grabar Imagen en campo BLOB Firebird pcicom Conexión con bases de datos 0 06-04-2005 01:34:06


La franja horaria es GMT +2. Ahora son las 10:18:54.


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