Ir al contenido



Foto

Tutorial (Filtros, SQL, Parametros) novatos


  • Por favor identifícate para responder
2 respuestas en este tema

#1 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 03 febrero 2010 - 08:49

Hola
He querido tomar este tema ya que me parece que son continuas las preguntas y dudas que se generan alrededor de estos puntos.
Cuando usar filtros, cuando es mejor usar sql y si usar o no parametros son preguntas que nosotros los novatos nos hacemos siempre que tratamos de desarrollar un nuevo proyecto o simplemente empezamos con bases de datos y Delphi.
Tratare de analizar (si alguien me ayuda mejor  :D) los pros y contras de cada uno de estos, ademas haré unos ejemplos de códigos para ilustrar todo esto.
Me gustaría que este tutorial fuera interactivo (participen) con sus dudas y soluciones así aprenderemos todos.

 
 
Empecemos tratando de explicar el uso de los filtros:

Un filtro se hace para que, de una tabla, se nos traiga solamente la información que necesitemos.
Los filtros se pueden usar directamente de la tabla, osea usando un componente table o bien usando un componente query (con sql).
En el primer caso nos revisara o recorrerá todo el contenido de la tabla haciéndolo lento (dependiendo de la cantidad de datos contenidos en la tabla), sin embargo me parece útil y rápido en el caso de tablas que contienen pocos datos, por ejemplo una tabla de usuarios u otra que contenga un par de campos con pocos datos.

Un ejemplo sencillo del uso de un filtro es:


delphi
  1. Table1.Filter:= 'TuCampo = Caral';
  2. Table1.filtered:= True;
  3. Table1.Open;


Aquí como ven me traerá del campo (TuCampo) todo lo que coincida con Caral, aunque como lo indique antes también traerá todo el contenido de la tabla, aun sin verlo.

 

Podemos ampliar el filtro colocando otras condiciones como el uso de Like (como) o condicionamientos como >= <=  o solos.

Un ejemplo sencillo seria:


delphi
  1. Table1.Filter:= 'TuCampo like C';
  2. Table1.filtered:= True;
  3. Table1.Open;



o con condicionales:


delphi
  1. Table1.Filter:= 'TuCampo >= 1';
  2. Table1.filtered:= True;
  3. Table1.Open;



Es importante tener en cuenta el tipo de dato que se va a filtrar ya que no sera el mismo tratamiento para un dato tipo string que para uno float, interger, date etc.

 

Los filtros no tienen por que ser tan específicos, dándonos la oportunidad de interactuar o colocar la condición que necesitemos.
Para esto se pueden usar muchos otros componentes básicos de delphi, los mas comunes son:
Combobox, Edit, DateTimePicker entre otros.
También podemos usar variables las que contengan o varíen su valor en algún proceso.

Voy a tratar de ir despejando todo esto poco a poco para que lo entendamos mejor.
Saludos

Continua..............

PD: Comentarios, aportes, ect. son bienvenidos. (y)

  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.091 mensajes
  • LocationRepública Dominicana

Escrito 03 febrero 2010 - 10:04

Saludos.

Agrego los operadores soportados en el filtro.

Filtros soportados en el ClientDataSet

[table]
[tr]
[td]Operator or function[/td]    [td]Example[/td]     [td]Supported by other datasets[/td]     [td]Comment [/td]
[/tr]
[tr][td]
Comparisons 
[/td][/tr]
[tr]
[td]=[/td]  [td]State = 'CA'[/td]  [td]Yes  [/td]
[/tr]
[tr]
[td]<>[/td]  [td]State <> 'CA'[/td]  [td]Yes  [/td]
[/tr]
[tr]
[td]>=[/td]  [td]DateEntered >= '1/1/1998'[/td]  [td]Yes  [/td]
[/tr]
[tr]
[td]<=[/td]  [td]Total <= 100,000[/td]  [td]Yes  [/td]
[/tr]
[tr]
[td]>[/td]  [td]Percentile > 50[/td]    [td]Yes  [/td]
[/tr]
[tr]
[td]<[/td]  [td]Field1 < Field2[/td]    [td]Yes  [/td]
[/tr]
[tr]
[td]BLANK[/td]  [td]State <> 'CA' or State = BLANK[/td]  [td]Yes[/td]  [td]Blank records do not appear unless explicitly included in the filter.  [/td]
[/tr]
[tr]
[td]IS NULL[/td]  [td]Field1 IS NULL[/td]  [td]No  [/td]
[/tr]
[tr]
[td]IS NOT NULL[/td]  [td]Field1 IS NOT NULL[/td]  [td]No  [/td]
[/tr]
[tr][td]
Logical operators 
[/td][/tr]
[tr]
[td]and[/td]  [td]State = 'CA' and Country = 'US'[/td]  [td]Yes  [/td]
[/tr]
[tr]
[td]or[/td]  [td]State = 'CA' or State = 'MA'[/td]  [td]Yes  [/td]
[/tr]
[tr]
[td]not[/td]  [td]not (State = 'CA')[/td]  [td]Yes  [/td]
[/tr]
[tr][td]
Arithmetic operators 
[/td][/tr]
[tr]
[td]+[/td]  [td]Total + 5 > 100[/td]  [td]Depends on driver[/td]  [td]Applies to numbers, strings, or date (time) + number.  [/td]
[/tr]
[tr]
[td]- [/td] [td]Field1 - 7 <> 10[/td]  [td]Depends on driver[/td]  [td]Applies to numbers, dates, or date (time) - number.  [/td]
[/tr]
[tr]
[td]*[/td]  [td]Discount * 100 > 20[/td]  [td]Depends on driver[/td]  [td]Applies to numbers only.  [/td]
[/tr]
[tr]
[td]/[/td]  [td]Discount > Total / 5[/td]  [td]Depends on driver[/td]  [td]Applies to numbers only.  [/td]
[/tr]
[tr][td]
String functions 
[/td][/tr]
[tr]
[td]Upper[/td]  [td]Upper(Field1) = 'ALWAYS'[/td]    [td]No  [/td]
[/tr]
[tr]
[td]Lower[/td]  [td]Lower(Field1 + Field2) = 'josp'[/td]    [td]No  [/td]
[/tr]
[tr]
[td]Substring[/td]  [td]Substring(DateFld,8) = '1998' Substring(DateFld,1,3) = 'JAN'  [/td]            [td]No  [/td]  [td]Value goes from position of second argument to end or number of chars in third argument. First char has position 1.  [/td]
[/tr]
[tr]
[td]Trim[/td]    [td]Trim(Field1 + Field2) Trim(Field1, '-')[/td]    [td]No  [/td]  [td]Removes third argument from front and back. If no third argument, trims spaces.  [/td]
[/tr]
[tr]
[td]TrimLeft[/td]  [td]TrimLeft(StringField) TrimLeft(Field1, '$') <> '' [/td]  [td]No  [/td]  [td]See Trim.  [/td]
[/tr]
[tr]
[td]TrimRight[/td]  [td]TrimRight(StringField) TrimRight(Field1, '.') <> ''[/td]  [td]No  [/td]  [td]See Trim.  [/td]
[/tr]
[tr][td]
DateTime functions 
[/td][/tr]
[tr]
[td]Year[/td]    [td]Year(DateField) = 2000[/td]  [td]No  [/td]
[/tr]
[tr]
[td]Month[/td]  [td]Month(DateField) <> 12[/td]  [td]No  [/td]
[/tr]
[tr]
[td]Day[/td]      [td]Day(DateField) = 1[/td]      [td]No  [/td]
[/tr]
[tr]
[td]Hour[/td]    [td]Hour(DateField) < 16[/td]  [td]No  [/td]
[/tr]
[tr]
[td]Minute[/td]  [td]Minute(DateField) = 0[/td]  [td]No  [/td]
[/tr]
[tr]
[td]Second[/td]  [td]Second(DateField) = 30[/td]  [td]No  [/td]
[/tr]
[tr]
[td]GetDate[/td]  [td]GetDate - DateField > 7[/td]  [td]No  [/td]  [td]Represents current date and time.  [/td]
[/tr]
[tr]
[td]Date[/td]    [td]DateField = Date(GetDate)[/td]  [td]No  [/td]  [td]Returns the date portion of a datetime value.  [/td]
[/tr]
[tr]
[td]Time[/td]    [td]TimeField > Time(GetDate)[/td]  [td]No  [/td]  [td]Returns the time portion of a datetime value.  [/td]
[/tr]
[tr][td]
Miscellaneous 
[/td][/tr]
[tr]
[td]Like[/td]    [td]Memo LIKE '%filters%'[/td]        [td]No  [/td]  [td]Works like SQL-92 without the ESC clause. When applied to BLOB fields, FilterOptions determines whether case is considered.  [/td]
[/tr]
[tr]
[td]In[/td]        [td]Day(DateField) in (1,7)[/td]      [td]No  [/td]  [td]Works like SQL-92. Second argument is a list of values all with the same type.  [/td]
[/tr]
[tr]
[td]*[/td]          [td]State = 'M*'[/td]        [td]Yes  [/td]  [td]Wildcard for partial comparisons.  [/td]
[/tr][/table]




Deben de tener en cuenta, que se indica si el operador es soportado por otros DataSet.

Extraído de la ayuda de Delphi 2007
  • 0

#3 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 04 febrero 2010 - 05:35

A mi nunca me funciono el LIKE en el filtro del clientdataset, no se porque no hacia nada. eso en D2009
  • 0