Comportamiento extraño con cambo Bit en MySQL y VFP

66 views
Skip to first unread message

Alejandro Garcia G.

unread,
Nov 8, 2017, 8:59:34 AM11/8/17
to Comunidad de Visual Foxpro en Español
Saludos a todos.

Por MySQL tengo una tabla con un campo Bit (llamado valida) el cual me guarda 1 o 0, cuando hago esta consulta me da bien el resultado:

SELECT a.esc_codesca, a.esc_descrip, IFNULL(b.rdoc_valida, 0) AS valida
    FROM fin_conesca a
    LEFT JOIN fin_reladocu b ON a.esc_codesca = b.rdoc_coddoc AND b.rdoc_cedcli = '123456'

Sin embargo, cuando hago la misma consuta en VFP, el cursor que me generra me da valores en valida de esta manera:
- Cuando es 1 en la tabla MySQL el valor dado es 31
- Cuando es 0 en la tabla MySQl el valor dado es 30

Como debo mostrar todo esto en una cuadricula que contiene un Checkbox, no me muestrar nada en los registros correspondiente. ¿Que puedo hacer?

Irwin Rodriguez

unread,
Nov 8, 2017, 9:04:55 AM11/8/17
to publice...@googlegroups.com
Hola Alejo,

Has probado con CAST()?

SELECT a.esc_codesca, a.esc_descrip, CAST(b.rdoc_valida AS LOGICAL) AS valida

    FROM fin_conesca a
    LEFT JOIN fin_reladocu b ON a.esc_codesca = b.rdoc_coddoc AND b.rdoc_cedcli = '123456'

ó

SELECT a.esc_codesca, a.esc_descrip, CAST(b.rdoc_valida AS I(1)) AS valida

    FROM fin_conesca a
    LEFT JOIN fin_reladocu b ON a.esc_codesca = b.rdoc_coddoc AND b.rdoc_cedcli = '123456'
--
Irwin Rodríguez
Analista Programador

+593 0994903424
Latacunga - Ecuador

Alejandro Garcia G.

unread,
Nov 8, 2017, 9:45:57 AM11/8/17
to Comunidad de Visual Foxpro en Español
Irwin, saludos.

No, no habia pensado en esa opción, voy a realizar la prueba como me indicas y en un rato les cometno.

De antemano, gracias por la respuesta.

Alejandro Garcia G.

unread,
Nov 8, 2017, 9:53:21 AM11/8/17
to Comunidad de Visual Foxpro en Español
Nada, me da error en MySQL cuando hago la consulta, buscando ayuda ese tipo me indica que no esta soportado para esa instrucción.

Acepta:

Los valores que pueden adaptar son:

  • BINARY. Produce una expresión binaria, apta para comparaciones byte a byte en lugar de por caráceres.
  • CHAR.
  • DATE.
  • DATETIME.
  • DECIMAL. Solo está disponible a partir de la versión 5.0.8 de MySQL.
  • SIGNED. Valores enteros.
  • TIME.
  • UNSIGNED. Valores enteros con signo.

Antonio Meza

unread,
Nov 8, 2017, 9:58:04 AM11/8/17
to Comunidad de Visual Foxpro en Español
Que versión de Driver ODBC estas usando?

Por otro lado te recomiendo mejor usar un TINYINT.

saludos
Antonio Meza

Alejandro Garcia G.

unread,
Nov 8, 2017, 10:05:48 AM11/8/17
to Comunidad de Visual Foxpro en Español
Gracias Antonio, el Driver ODBC es 5.1 algo, es uno de los ultimos.

Con respecto a utilizar TINYINT, ¿como se haría?

Te explico lo que se requiere, en una tabla me contiene unicamente los registros que un cliente ha entregado, aquí tengo el campo Bit (o Tinyint) en donde me debe colcoar True (si lo entrego) o 1, según seaa el caso.

En otra tabla, que es la que cruzo, tengo un listado de X cantidad d documentos, lo que hago en la consulta es traer todos los documentos de esta tabla y me trae si uniendola con la otra el cliene me entrego o no ese documentos. Yo asumo que si el valor es 1 o True me lo entrego, el resto me viene por cuestiones del LEFT JOIN que hago en Null. Por eso intente hacer el IFNULL(campo, 0) para los que no tienen valor me los de en 0 y poder trabajar,  o esa era la idea.

¿Puedo hacer esto con TinyInt?.

Antonio Meza

unread,
Nov 8, 2017, 10:37:39 AM11/8/17
to Comunidad de Visual Foxpro en Español
TinyInt es del tipo Integer pero acepta valores pequeños hasta 128 creo no recuerdo exactamente, por lo tanto lo puedes usar para remplazar tu campo BIT, eso si tienes que guardar 0 o 1 en este nuevo tipo de campo.

En teoría deberías poder hacer lo que comentas con TinyInt

saludos
Antonio Meza

Carlos Miguel FARIAS

unread,
Nov 8, 2017, 11:09:11 AM11/8/17
to Grupo Fox
tinyint en mysql de -128 a 127 con signo y de 0 a 255 sin signo.
Un capo bit ocupa físicamente el mismo espacio en disco, un byte

Víctor Hugo Espínola Domínguez

unread,
Nov 8, 2017, 12:43:04 PM11/8/17
to publice...@googlegroups.com
Debería funcionar con CAST, prueba castenado a SIGNED o UNSIGNED o DECIMAL(1)

Saludos,
Víctor.
Lambaré - Paraguay.

Alejandro Garcia G.

unread,
Nov 9, 2017, 8:46:29 AM11/9/17
to Comunidad de Visual Foxpro en Español
Gracias a todos por las respuestas, no he probado con SIGNED o UNSIGNED.

Lo que hice fue como me daba solo el valor 1 con DECIMAL y el resto no, con un REPLACE reemplace los que venian nulos o vacios para que me los de en 0, y con esto me funciono, no deseaba hacerlo de esta manera (con el SCAN) pero me toco de momento.


Sin embargo, voy a intentar con SIGNED para ver.

Saludos.

Víctor Hugo Espínola Domínguez

unread,
Nov 9, 2017, 8:51:01 AM11/9/17
to publice...@googlegroups.com
Si venían nulos es porque eran nulos, hubieras combinado CAST e ISNULL o COALESCE

Saludos,
Víctor.
Lambaré - Paraguay.


Antonio Meza

unread,
Nov 9, 2017, 9:10:18 AM11/9/17
to Comunidad de Visual Foxpro en Español
Es decir que obtienes el cursor y ya en VFP aplicas un replace para corregir el detalle que tienes en el Select original?? es decir te vas por el camino fácil jejejeje

saludos
Antonio Meza
Reply all
Reply to author
Forward
0 new messages