Utilizando as funções disponíveis na lib HBMYSQL encontrei a seguinte dificuldade:
As colunas do tipo "tinyint" não erram retornadas corretamente quando fazíamos um select * from alguma_tabela, simplesmente em vez de retornar um valor numérico era retornado um valor lógico (.T.).
Olhando o fonte TMYSQL.PRG identifiquei o problema (que para mim era um problema).
Para corrigir faça o sequinte:
1) edite o arquivo: tmysql.prg que se encontra na pasta: /usr/src/harbour/contrib/hbmysql
2) procure por: METHOD GetRow( nRow ) CLASS TMySQLQuery, mais ou menos nas linhas de número 520 você verá o seguinte:
Código: Selecionar todos
...
IF ::aRow != NIL
// Convert answer from text field to correct clipper types
FOR i := 1 TO ::nNumFields
SWITCH ::aFieldStruct[ i ][ MYSQL_FS_TYPE ]
CASE MYSQL_TYPE_TINY
//DAVID:
IF ::aRow[ i ] == NIL
::aRow[ i ] := "0"
ENDIF
::aRow[ i ] := Val( ::aRow[ i ] ) != 0
EXIT
CASE MYSQL_TYPE_SHORT
CASE MYSQL_TYPE_LONG
CASE MYSQL_TYPE_LONGLONG
CASE MYSQL_TYPE_INT24
CASE MYSQL_TYPE_NEWDECIMAL
//DAVID:
IF ::aRow[ i ] == NIL
::aRow[ i ] := "0"
ENDIF
::aRow[ i ] := Val( ::aRow[ i ] )
EXIT
...
Código: Selecionar todos
...
CASE MYSQL_TYPE_TINY
///// //DAVID:
///// IF ::aRow[ i ] == NIL
///// ::aRow[ i ] := "0"
///// ENDIF
///// ::aRow[ i ] := Val( ::aRow[ i ] ) != 0
///// EXIT
CASE MYSQL_TYPE_SHORT
CASE MYSQL_TYPE_LONG
CASE MYSQL_TYPE_LONGLONG
CASE MYSQL_TYPE_INT24
CASE MYSQL_TYPE_NEWDECIMAL
...
Existem outros ponto em que os campos do tipo tinyint são tratados como campos lógicos e se for o caso é só alterá-los.
Observação: utilizo Linux, e a versão do Harbour é 2.1.0beta2 (Rev. 14955) não sei se o problema já foi corrigido em versões posteriores.
É isso!
Um grande abraço!
