Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Cómo puedo hacer un filtro booleano en paradox? (https://www.clubdelphi.com/foros/showthread.php?t=43881)

Forest 23-05-2007 01:27:19

Cómo puedo hacer un filtro booleano en paradox?
 
Hola, tengo un problema para hacer un filtro booleano en paradox (en Delphi 6), uso el código:

Código:

mitabla.filter:='micampo = ' + QuotedStr('TRUE');
Pero me manda un error que dice: 'Type mismatch in expression'

después intenté simplemente con:

Código:

mitabla.filter:='micampo = TRUE';
Pero me manda el mismo error x_X.

Aunque cuando compila no manda ningún error, al intentar hacer el filtro me manda el error y marca como si el error estuviera en la línea de abajo de la funcion que usa el código, lo explico rapidamente:

Código Delphi [-]
function filtro
begin
   mitabla.filter:='micampo = ' + QuotedStr('TRUE');
end

procedure bla
begin
   filtro();
   tabla.first;
   blablabla;
end;

La línea donde me marca el error es en tabla.first, y si quito la llamada a la funcion filtro entonces no hay ningún error.

Espero puedan ayudarme U.U...

Byes!

Caral 23-05-2007 01:57:56

Hola
A veces algunas tablas necesitan esto:
Código Delphi [-]
 mitabla.filter:= ' micampo = "TRUE"  ';
Pasa en access, pruebalo, tal vez sirva.
Saludos

Forest 23-05-2007 02:10:34

No... parece que no funciona me dice que las comillas no son aceptadas para expresiones de filtros u.u... Ya las probé de algunas formas, como sin apostrofes, dentro de un quotedstr con y sin apostrofes, etc. En resumen creo que esa no es la forma, pero gracias.

Alguien más que tenga una idea de como hacerlo? :(

Byes!

sitrico 23-05-2007 03:04:06

Otra idea (aqui no tengo como probar)

Código Delphi [-]
mitabla.filter:= 'micampo'

Código Delphi [-]
mitabla.filter:= 'micampo = 1'
// el 1 = true

ó tambien puedes usar el evento OnFilterRecord (más complicado)

sitrico 23-05-2007 03:04:25

Otra idea (aqui no tengo como probar)

Código Delphi [-]
mitabla.filter:= 'micampo'

y

Código Delphi [-]
mitabla.filter:= 'micampo = 1'
// el 1 = true

ó tambien puedes usar el evento OnFilterRecord (más complicado ;) )

Forest 23-05-2007 03:29:14

Si había probado con ambas opciones pero no funcionó x_x, creo que es algo de que el Delphi no jala correctamente los valores del Blob binary (el campo booleano), tampoco puedo mostrar los valores de este tipo de campo en dbgrid´s.

Pero bueno, cambié el tipo del campo a Alfanumérico y compararé si el valor es S o N... creo que será la forma menos complicada.

Muchas gracias por la ayuda igualmente, pero si alguien de todas formas conoce la forma en que se hacen estos filtros no dude en postearlo <.<

Byes!

Caral 23-05-2007 04:07:31

Hola
Cita:

Escrito por: Forest.
pero si alguien de todas formas conoce la forma en que se hacen estos filtros no dude en postearlo
Me suena a que no confias en nosotros:o
Bueno, cuando aprenda, te ayudo.
Saludos

aprendiz2 24-05-2007 06:41:14

la respuesta...
 
Cita:

Empezado por Forest
el Delphi no jala correctamente los valores del Blob binary (el campo booleano),

El "Blob Binary" no es un campo booleano... El campo booleano en la tabla se llama Logical ( se pone la "L" ).....

( lo se porque tambien he caido en esa... ! jaja !. Pongo la "B" pensando en Booleano... pero la "B" es para Blob Binary.. que es otra cosa !!! )

Sugerencia, prueba hacer el cambio de la definicion en la tabla, y despues
prueba directo en el Object Inspector poner el filtro, (cuando estas en modo de "edicion" en Delphi). Poner la condicion en la propiedad Filter, sin comillas ni nada, para probar:

NombredelCampo=true ( esto lo escribes en la propiedad. Si funciona ahi, todo estata bien en el programa.

En el programa escribes

TablaX.Filter := 'nombreDelCampo = true' ;

Asi de sencillo, sin el quotedString, ni dobles comillas. Tal y como haces la prueba en el ObjectInspector, asi debe funcionar en el programa.


Suerte, ojala te sirva !

aprendiz2 24-05-2007 06:48:49

y recuerda...
 
...y recuerda.. poner la propiedad Filtered en true, para que tenga efecto el filtro. Tambien un Table.Refresh viene bien despues de quitar poner / quitar filtros, sobre todo en multiusuario...

( se que son tonteras lo que escribo aqui, pero como a mi a veces se me olvida hacerlo, pues se me ocurre que quizas a otra persona tambien se le olvide hacerlo de vez en cuando ! ).

P.D. para mi es mucho mejor usar el evento OnFilterRecord, puedo hacer filtros que son mas complejos ahi, que no podria hacerlos en el "Filter", y a mi se me hace mas sencillo poner la logica en el OnFilterRecord, que en el Filter, pero como todo en la vida, es cuestion de gustos y costumbres.


Saludos otra vez


La franja horaria es GMT +2. Ahora son las 12:44:59.

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