Corrigindo o fonte TMYSQL.PRG

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

jamazevedo
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 29 Dez 2005 16:50
Localização: Manaus - AM

Corrigindo o fonte TMYSQL.PRG

Mensagem por jamazevedo »

Olá amigos do forum!

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
...
3) no meu caso apenas comentei as seguinte linhas:

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
...
4) recompilei a lib hbmysql e as colunas do tipo tinyint foram mostradas como campo numérico.

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!
______________________________________________________
Usando: Linux Ubuntu 18.04, Harbour 3.2.0dev r1811161533
______________________________________________________
José Airton de Menezes Azevedo
Manaus - AM
Responder