Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby anserkk » Fri Mar 13, 2009 7:19 am

Hola,

Tengo una tabla en MySQL con el tipo de datos como BIT. Esto es equivalente a un campo en LOGICAL DBF.
BIT tiendas, ya sea 0 o 1, cuando en DBF que representamos como. F. o. T.

Estoy utilizando ADO

Cuando me recupere los datos de MySQL en una tabla de registros, FiveWin / Puerto de muestra y procesamiento de datos a todos los TBI. T. independientemente de su real 0 y 1 's (.F. y .T.)

He comprobado los datos de la tabla utilizando sapo para MySQL y encontró que el conjunto de registros está mostrando los datos exactamente como es necesario.

Nadie ha encontrado este problema? Cualquier idea de cómo esto puede ser manejado de manera que los datos se convierte en bien .T. o .F.
He intentado mostrar el conjunto de registros de datos en un xBrwse también, pero todos los datos de la BIT se muestran como .T.

¿Hay algo que tengo que tener cuidado durante la manipulación de datos BIT utilizando FiveWin y ADO

Recuerdos

Anser
User avatar
anserkk
 
Posts: 1332
Joined: Fri Jun 13, 2008 11:04 am
Location: Kochi, India

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby Armando » Fri Mar 13, 2009 2:29 pm

Anserkk:

Aquí tienes un ejemplo que funciona bien:

Así es como esta definido el campo en la tabla
Code: Select all  Expand view

"PRO_CAN BIT NOT NULL COMMENT 'Canceled ?'," +;
 


Y este es el código usado en la columna del browse (TXBrowse)
Code: Select all  Expand view

aCol[ 6]    := oBrw:AddCol()
aCol[ 6]:AddResource("SI")
aCol[ 6]:AddResource("NO")
aCol[ 6]:cHeader    := "Can"
aCol[ 6]:bBmpData   := { || IF(oRsPro:BOF() .AND. oRsPro:EOF(),2,IIF(oRsPro:Fields("PRO_CAN"):Value,1,2)) }
 


Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3211
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby Daniel Garcia-Gil » Fri Mar 13, 2009 3:36 pm

Hola Armando...

me sucede lo mismo que a ansserkk

has creado la tabla desde codigo o desde MySql directamente o usando algun otro programa de mantenimiento?
de ser si tu respuesta, puedes verificar como esta creado el field en la tabla?
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby Armando » Fri Mar 13, 2009 4:47 pm

Daniel:

Eso es algo que he notado, cuando la tabla se convierte desde una DBF usando alguna herramienta como Dbf2Sql, ADO se pone muy exigente.

Mis tablas las creo desde código usando comandos SQL.

Aquí una imágen del código de mi post anterior.

Image

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3211
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby Daniel Garcia-Gil » Fri Mar 13, 2009 5:42 pm

Armando...
prueba este ejemplo y nos comentas que podria estar pasando...

solo adaptalo a tus parametros, igual el servidor y usuario aqui expuesto estan activo para este ejemplo

Gracias

Code: Select all  Expand view
/*
* test connection with ADODB
*/


#include "FiveWin.Ch"
#include "XBrowse.Ch"
#include "ado.Ch"


//----------------------------------------------------------------------------//

function main()

   execConnection()

return( 0 )

FUNCTION execConnection

LOCAL oCon, oRs, oError


oCon := MySQLConnect()

MakeTabla(oCon)

oRs  := MySQLRecordSet( oCon )

IF oRs:recordCount() > 0
   oRs:moveFirst()
ENDIF

TxBrowseShow( oRs )

oRs:close()

oCon:close()

RETURN( .T. )

/*
* --------------------------------------------------------------------------*
* --------------------------------------------------------------------------*
*/

FUNCTION MySQLConnect

LOCAL oError, oCon, cConnectionString


TRY

   oCon := TOleAuto():new( "ADODB.Connection" )

CATCH oError

   msgStop( "No se pudo crear la conexion" )
   RETURN( .F. )

END

cConnectionString := "Driver={MySQL ODBC 5.1 Driver}" + ;
                     ";Server=mcfox.dyndns.org"       + ;
                     ";DefaultDatabase=prueba01"       + ;
                     ";Database=prueba01"            + ;
                     ";Port=3306"                     + ;
                     ";User=prueba"                  + ;
                     ";Password=12345"              + ;
                     ";Option=3;"

oCon:connectionString := cConnectionString

TRY

   oCon:open()
   ? "Connection ok!"

CATCH oError

   msgInfo( "No se pudo crear la conexion" )
   showError( oError )
   RETURN( .F. )

END

RETURN( oCon )

/*
* --------------------------------------------------------------------------*
* --------------------------------------------------------------------------*
*/

FUNCTION MySQLRecordSet( oCon )

LOCAL oRs, oError, cQuerySql


TRY
   oRs := TOleAuto():new( "ADODB.RecordSet" )

CATCH oError

   msgStop( "No hay RS" )
   showError( oError )
   oRs := NIL
   RETURN( .F. )

END

&& -- Realizando uma query no cadastro de empresas
cQuerySql := "SELECT * FROM test"

oRs:cursorLocation := adUseClient // 3
oRs:lockType       := adLockOptimistic // 3
oRs:cursorType     := adOpenDynamic // 2

oRs:source         := cQuerySql

oRs:activeConnection( oCon )

TRY

   oRs:open()
   ? oRs:source,,, "oRs:recordCount()", oRs:recordCount()

CATCH oError

   msgStop( "No Query '" + cQuerySql + "'" )
   showError( oError )
   RETURN( .F. )

END

RETURN( oRs )

/*
* --------------------------------------------------------------------------*
* --------------------------------------------------------------------------*
*/

PROCEDURE showError( oError )

LOCAL cMensagemRetorno := ""

cMensagemRetorno := "[Subsystem]"         + CRLF + oError:SubSystem                 + CRLF + CRLF + ;
                    "[SubCode]"           + CRLF + alltrim( str( oError:SubCode ) ) + CRLF + CRLF + ;
                    "[Operacion]"         + CRLF + oError:Operation                 + CRLF + CRLF + ;
                    "[Descripcion]"       + CRLF + oError:Description               + CRLF + CRLF + ;
                    "[Argumentos]"        + CRLF + valToPrg( oError:Args )

RETURN( msgStop( cMensagemRetorno ) )

/*
* --------------------------------------------------------------------------*
* --------------------------------------------------------------------------*
*/

FUNCTION TxBrowseShow( oRs )

   local oWnd, oBrw, oCol

   DEFINE WINDOW ownd OF WndMain() TITLE "Test"

   @ 0,0 XBROWSE oBrw OF oWnd RECSET oRs AUTOCOLS AUTOSORT FOOTERS FASTEDIT ;
         LINES CELL

   oBrw:createFromCode()
   oWnd:oClient := oBrw

   ACTIVATE WINDOW oWnd ON INIT oBrw:setFocus()

return nil

function MakeTabla( oCon )
local cCmdSql := "CREATE TABLE IF NOT EXISTS TEST ("+;
                 "ROW_ID INTEGER    NOT NULL AUTO_INCREMENT COMMENT 'LLAVE',"+;
                 "CODIGO CHAR(5)    NOT NULL COMMENT 'CODIGO CLIENTE',"+;
                 "NOMBRE CHAR(30)   NOT NULL COMMENT 'NOMBRE CLIENTE',"+;
                 "ACTIVO BIT        NOT NULL COMMENT 'ACTIVO',"+;
                 "PRIMARY KEY(ROW_ID))"+;
                 "ENGINE = InnoDB COMMENT 'Test';"
                 
oCon:Execute( cCmdSql )

cCmdSql := "INSERT INTO TEST (CODIGO,NOMBRE,ACTIVO) VALUES('001','NOMBRE01',0);"
oCon:Execute( cCmdSql )
cCmdSql := "INSERT INTO TEST (CODIGO,NOMBRE,ACTIVO) VALUES('002','NOMBRE02',1);"
oCon:Execute( cCmdSql )
cCmdSql := "INSERT INTO TEST (CODIGO,NOMBRE,ACTIVO) VALUES('003','NOMBRE03',0);"
oCon:Execute( cCmdSql )
cCmdSql := "INSERT INTO TEST (CODIGO,NOMBRE,ACTIVO) VALUES('004','NOMBRE04',1);"
oCon:Execute( cCmdSql )
return nil
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby Armando » Fri Mar 13, 2009 7:42 pm

Daniel:

Aún no hago la prueba perooooooo, por aquí veo algo diferente:

Prueba cambiando los 0 y 1 cuando insertas los registros por '0' y '1' (tipo caracter)

Code: Select all  Expand view

cCmdSql := "INSERT INTO TEST (CODIGO,NOMBRE,ACTIVO) VALUES('004','NOMBRE04','1');"
 


Me comentas por favor

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3211
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby Daniel Garcia-Gil » Fri Mar 13, 2009 7:54 pm

Aramndo
Gracias por tu respuesta

Posiblemente seria de gran ayuda si lograras probar el test tu mismo siendo tu un gran conocedor del tema

he hecho el cambio sugerido y lementablemnente me he encontrado con esto

Code: Select all  Expand view
Application
===========
   Path and name: C:\prg\Julio\ADODB.exe (32 bits)
   Size: 1,806,848 bytes
   Time from start: 0 hours 0 mins 5 secs
   Error occurred at: 03/13/09, 15:19:56
   Error description: Error ADODB.Connection/0  S_OK: EXECUTE
   Args:
     [   1] = C   INSERT INTO TEST (CODIGO,NOMBRE,ACTIVO) VALUES('001','NOMBRE01','0');

Stack Calls
===========
   Called from: source\rtl\win32ole.prg => TOLEAUTO:EXECUTE(0)
   Called from: C:\prg\Julio\ADODB.prg => MAKETABLA(182)
   Called from: C:\prg\Julio\ADODB.prg => EXECCONNECTION(25)
   Called from: C:\prg\Julio\ADODB.prg => MAIN(14)

System
======
   CPU type: Intel(R) Core(TM)2 CPU          6600  @ 2.40GHz 2400 Mhz
   Hardware memory: 2045 megs

   Free System resources: 90 %
        GDI    resources: 90 %
        User   resources: 90 %

   Compiler version: xHarbour build 1.1.0 Intl. (SimpLex) (Rev. 6195)
   Windows version: 6.1, Build 7000

   Windows total applications running: 0

Variables in use
================
   Procedure     Type   Value
   ==========================
   TOLEAUTO:EXECUTE
     Param   1:    C    "INSERT INTO TEST (CODIGO,NOMBRE,ACTIVO) VALUES('001','NOMBRE01','0');"
     Local   1:    U    
     Local   2:    N    0
   MAKETABLA
     Param   1:    O    Class: TOLEAUTO
     Local   1:    C    "INSERT INTO TEST (CODIGO,NOMBRE,ACTIVO) VALUES('001','NOMBRE01','0');"
   EXECCONNECTION
     Local   1:    O    Class: TOLEAUTO
     Local   2:    U    
     Local   3:    U    
   MAIN 
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby Daniel Garcia-Gil » Fri Mar 13, 2009 8:02 pm

Realmente no se que podria estar mal,

cCmdSql := "INSERT INTO TEST (CODIGO,NOMBRE,ACTIVO) VALUES('001','NOMBRE01',0);"

Colcandolo de esta forma no me genera ningun error y en la tabla se guarda correctamente, el problema esta en la lectura del campo que siempre retorna .T.

mira la imagen

Image
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby Armando » Fri Mar 13, 2009 8:14 pm

Daniel:

He realizado la prueba de la que te incluyo una imágen:

Image

Y como se ve la estamos obteniendo igual, incluso he modificado tu ejemplo
para leer una de mis tablas y tambien me muestra .T. o .F.

Ahora me pregunto, que esperamos que nos muestre ? o por qué suponemos
que esta mal ?

Me corrijo, veo que en tu imágen muestra puras .T., pero en mi imágen si las
muestra bien. Y el código es el mismo que tú me enviaste.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3211
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby Daniel Garcia-Gil » Fri Mar 13, 2009 8:20 pm

Armando...

Espero ahora poder captado tu atencion :wink:

entiendes la situacion... que puede faltar??

que driver del conector de mysql usas?
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby Armando » Fri Mar 13, 2009 8:30 pm

Daniel:

Llevas razón, quiería yo levantar el trofeo antes de llegar a la meta :oops:

Utilizo el "Driver={MySQL ODBC 3.51 Driver}"

Estoy probando con el código que me enviaste conectandome a tu servidor
lo único que he cambiado ha sido el driver. Todo hace suponer que ahi esta
el problema, te sugiero hacer una prueba con el 3.51.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3211
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby wmormar » Fri Mar 13, 2009 8:32 pm

Amigos,

La regla de grabado de información para SQL indica:

Todos las columnas tipo caracter se colocaran entre comillas o apóstrofos y las de tipo númerico sin comillas o apóstrofos.

En SQL no existen campos lógicos, tal cual los conocemos.

También debemos de acostumbrarnos a crear nuestras tablas con los nombres en minúsculas y usarlos en nuestros códigos en minúsculas de igual forma. Esto es para no entrar en conflictos con versiones nuevas y actuales de los servidores que usemos.

Por otro lado en el caso de ADO, el conector mysql que debemos de usar es el 3.5, pues es el más estable, y muy checado por varios colegas.

Mi humilde opinión.

saludos

William Morales

Armando wrote:Daniel:

Aún no hago la prueba perooooooo, por aquí veo algo diferente:

Prueba cambiando los 0 y 1 cuando insertas los registros por '0' y '1' (tipo caracter)

Code: Select all  Expand view

cCmdSql := "INSERT INTO TEST (CODIGO,NOMBRE,ACTIVO) VALUES('004','NOMBRE04','1');"
 


Me comentas por favor

Saludos
William, Morales
Saludos

méxico.sureste
User avatar
wmormar
 
Posts: 1074
Joined: Fri Oct 07, 2005 10:41 pm
Location: México

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby Daniel Garcia-Gil » Fri Mar 13, 2009 8:46 pm

Listo... comprobado es el conector...

se ha eliminado el problema

Gracias Armando y William por su tiempo
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby anserkk » Sat Mar 14, 2009 4:40 am

Hola,

Ante todo, permítanme agradecer a Daniel, Armando y William.

Estoy enfrentando el mismo problema que se explica Daniel.

Cuando insertar datos en la Tabla I han utilizado valor numérico, ya sea 0 ó 1 para almacenar datos en un campo de tipo BIT
es decir,
Code: Select all  Expand view
cCmdSql: = "INSERT INTO TEST (CODIGO, NOMBRE, ACTIVO) VALUES ('001 ',' NOMBRE01 ', 0);"


Estoy utilizando el controlador ODBC 5.1 (Daniel también está utilizando la misma)

Después de los datos se inserta y cuando compruebe la tabla de datos para MySQL sapo usando los datos es perfecto y es comprobar que muestra dentro y fuera de tipo de datos BIT.

Pero cuando leo / recuperar los mismos datos en el uso de registros ADO de FiveWin, la BIT de datos es siempre. T. independientemente del valor real 0 y 1's

Ahora, después de leer todo este post Yo entiendo que el problema anteriormente descrito se produce debido a un error en la última versión del controlador ODBC 5.1

Mudarse a ver ODBC 3.5 debería resolver el problema. Es realmente triste para pasar de una versión más reciente de una versión anterior, pero no hay otra manera.

¿Se trata de un problema de compatibilidad con Harbour / xHarbour y ODBC versión 5.1.

¿Alguien trató de repetir el mismo problema en cualquier otro lenguaje de programación para eg.VB / Delphi y MySQL ODBC y ver 5.1?

Una vez más doy las gracias a Daniel, Armando y William.

Gracias

Anser
User avatar
anserkk
 
Posts: 1332
Joined: Fri Jun 13, 2008 11:04 am
Location: Kochi, India

Re: Manejar datos MySql BIT (lógical) en FiveWin / xHarbour

Postby wmormar » Sat Mar 14, 2009 8:05 am

anserkk,

El problema no es FWH o [x]Harbour, el problema es específicamente el ODBC (o sea el conector) de mysql. El problema no se a ciencia cierta si es por la versión del servidor MYSQL instalado, pero definitivamente es un problema generado por el conector.

El pasarte a una versión anterior no debe de generar problemas de conexión o de manejo de datos, inclusive puedes usar los "Procedimientos Almacenados" sin problema alguno.
William, Morales
Saludos

méxico.sureste
User avatar
wmormar
 
Posts: 1074
Joined: Fri Oct 07, 2005 10:41 pm
Location: México

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 34 guests