Versão atual TDOLPHIN - Campo Null

Versão atual TDOLPHIN - Campo Null

Postby MGA » Wed Oct 19, 2016 2:48 pm

Amigos,

Com a versão ANTIGA da TDOLPHIN os campos NULL funcionavam perfeitamente. :D

Com a versão NOVA da TDOLPHIN os campos NULL estão me gerando problemas. :(

Ex:

TABELA Clientes - Campo: CODIGO
NULL

oQry := oServer:Query( "SELECT CODIGO FROM clientes" )

OQry:codigo -> Valtype -> "C"

deveria ser NÚMERICO.

Como resolver este problema?
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: Versão atual TDOLPHIN - Campo Null

Postby carlos vargas » Wed Oct 19, 2016 5:12 pm

please, replace in tdolqry.prg, recompile and test.
Code: Select all  Expand view

METHOD GetRow( nRow ) CLASS TDolphinQry

   LOCAL cType, uValue, cField
   LOCAL cCol
   LOCAL nIdx
   LOCAL aRow
   LOCAL hRow, uItem, aStructure, nPad

   DEFAULT nRow  TO ::nRecNo

   IF ::hResult <> NIL
      DO CASE
      CASE ::nRecCount < 1
         ::lBof    := .t.
         ::lEof    := .t.
         ::nRecNo  := 1

      CASE nRow > 0 .and. nRow <= ::nRecCount
         ::lBof    := .f.
         ::lEof    := .f.
         ::nRecNo  := Max( nRow, 1 )

      CASE nRow > ::nRecCount
         ::lBof    := .f.
         ::lEof    := .t.
         ::nRecNo  := ::nRecCount

      CASE nRow < 1
         ::lBof    := .t.
         ::lEof    := .f.
         ::nRecNo  := 1

      ENDCASE

      nRow := ::nRecNo

      MySqlDataSeek( ::hResult, nRow - 1 )

      aRow := MySqlFetchRow( ::hResult )

      ::aRowOriginal := aRow

#ifndef USE_HASH
      ::aRow    := Array( Len( aRow ) )
      ::aOldRow := Array( Len( aRow ) )
#endif /*USE_HASH*/


      //fill ::aRow Info
      IF !HB_IsNil( aRow ) .AND. ::nRecCount > 0
         // Convert answer from text field to correct clipper types
         FOR EACH cField IN aRow
#ifdef __XHARBOUR__
            nIdx := HB_EnumIndex()
#else
            nIdx := cField:__EnumIndex()
#endif

            uValue := ::VerifyValue( nIdx, cField )

            ::SetData( nIdx, uValue )
         NEXT
      ELSE

         IF useClipperDefaultValue()

            aStructure := ::aStructure


            FOR EACH uItem IN aStructure
   #ifdef __XHARBOUR__
               nIdx := HB_EnumIndex()
   #else
               nIdx := uItem:__EnumIndex()
   #endif
               cType := uItem[ MYSQL_FS_CLIP_TYPE ]

               SWITCH cType
               CASE "M"
                  // we can not use PadR in  memo field
                  IF !HB_IsNil( uItem[ MYSQL_FS_DEF ] )
                     uValue := uItem[ MYSQL_FS_DEF ]
                  ELSE
                     uValue := ""
                  ENDIF
                  EXIT

               CASE "C"
                  IF D_SetPadRight()
                     nPad := Min( IIf( uItem[ MYSQL_FS_MAXLEN ] > uItem[ MYSQL_FS_LENGTH ],;
                               uItem[ MYSQL_FS_MAXLEN ], uItem[ MYSQL_FS_LENGTH] ), MAX_BLOCKSIZE )
                  ELSE
                     nPad := 0
                  ENDIF
                  IF !HB_IsNil( uItem[ MYSQL_FS_DEF ] )
                     uValue := PadR( uItem[ MYSQL_FS_DEF ], Max( Len( uItem[ MYSQL_FS_DEF ] ), nPad ) )
                  ELSE
                     uValue := Space( nPad )
                  ENDIF
                  EXIT

               CASE "N"
               CASE "I"
                  IF !HB_IsNil( uItem[ MYSQL_FS_DEF ] )
                     uValue := Val( uItem[ MYSQL_FS_DEF ] )
                  ELSE
                     uValue := 0
                  ENDIF
                  EXIT

               CASE "L"
                  IF !HB_IsNil( uItem[ MYSQL_FS_DEF ] )
                     uValue := ( uItem[ MYSQL_FS_DEF ] == "1" )
                  ELSE
                     uValue := .f.
                  ENDIF
                  EXIT

               CASE "D"
                  IF !HB_IsNil( uItem[ MYSQL_FS_DEF ] )
                     uValue := SqlDate2Clip( uItem[ MYSQL_FS_DEF ] )
                  ELSE
                     uValue := CToD("")
                  ENDIF


                  EXIT

         #ifdef __XHARBOUR__
               DEFAULT
         #else
               OTHERWISE
         #endif
                  uValue := NIL
               END
               ::SetData( nIdx, uValue )

            NEXT

         ENDIF
      ENDIF
#ifndef NOINTERNAL
   ELSE
      ::oServer:nInternalError := ERR_FAILEDGETROW
      ::nRecNo := 0
      ::CheckError()
#endif
   ENDIF

RETURN ::nRecNo

 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Versão atual TDOLPHIN - Campo Null

Postby MGA » Wed Oct 19, 2016 6:21 pm

Carlos,

muito obrigado por responder.

Meu amigo, eu tentei localizar a diferença entre os dois códigos(CARLOS e bitbucket.org). Eu não achei diferença, veja:

https://bitbucket.org/danielgarciagil/t ... /downloads

please, replace in tdolqry.prg, recompile and test.
METHOD GetRow( nRow ) CLASS TDolphinQry

LOCAL cType, uValue, cField
LOCAL cCol
LOCAL nIdx
LOCAL aRow
LOCAL hRow, uItem, aStructure, nPad

DEFAULT nRow TO ::nRecNo

IF ::hResult <> NIL
DO CASE
CASE ::nRecCount < 1
::lBof := .t.
::lEof := .t.
::nRecNo := 1

CASE nRow > 0 .and. nRow <= ::nRecCount
::lBof := .f.
::lEof := .f.
::nRecNo := Max( nRow, 1 )

CASE nRow > ::nRecCount
::lBof := .f.
::lEof := .t.
::nRecNo := ::nRecCount

CASE nRow < 1
::lBof := .t.
::lEof := .f.
::nRecNo := 1

ENDCASE

nRow := ::nRecNo

MySqlDataSeek( ::hResult, nRow - 1 )

aRow := MySqlFetchRow( ::hResult )

::aRowOriginal := aRow

#ifndef USE_HASH
::aRow := Array( Len( aRow ) )
::aOldRow := Array( Len( aRow ) )
#endif /*USE_HASH*/


//fill ::aRow Info
IF !HB_IsNil( aRow ) .AND. ::nRecCount > 0
// Convert answer from text field to correct clipper types
FOR EACH cField IN aRow
#ifdef __XHARBOUR__
nIdx := HB_EnumIndex()
#else
nIdx := cField:__EnumIndex()
#endif

uValue := ::VerifyValue( nIdx, cField )

::SetData( nIdx, uValue )
NEXT
ELSE

IF useClipperDefaultValue()

aStructure := ::aStructure


FOR EACH uItem IN aStructure
#ifdef __XHARBOUR__
nIdx := HB_EnumIndex()
#else
nIdx := uItem:__EnumIndex()
#endif
cType := uItem[ MYSQL_FS_CLIP_TYPE ]

SWITCH cType
CASE "M"
// we can not use PadR in memo field
IF !HB_IsNil( uItem[ MYSQL_FS_DEF ] )
uValue := uItem[ MYSQL_FS_DEF ]
ELSE
uValue := ""
ENDIF
EXIT

CASE "C"
IF D_SetPadRight()
nPad := Min( IIf( uItem[ MYSQL_FS_MAXLEN ] > uItem[ MYSQL_FS_LENGTH ],;
uItem[ MYSQL_FS_MAXLEN ], uItem[ MYSQL_FS_LENGTH] ), MAX_BLOCKSIZE )
ELSE
nPad := 0
ENDIF
IF !HB_IsNil( uItem[ MYSQL_FS_DEF ] )
uValue := PadR( uItem[ MYSQL_FS_DEF ], Max( Len( uItem[ MYSQL_FS_DEF ] ), nPad ) )
ELSE
uValue := Space( nPad )
ENDIF
EXIT

CASE "N"
CASE "I"
IF !HB_IsNil( uItem[ MYSQL_FS_DEF ] )
uValue := Val( uItem[ MYSQL_FS_DEF ] )
ELSE
uValue := 0
ENDIF
EXIT

CASE "L"
IF !HB_IsNil( uItem[ MYSQL_FS_DEF ] )
uValue := ( uItem[ MYSQL_FS_DEF ] == "1" )
ELSE
uValue := .f.
ENDIF
EXIT

CASE "D"
IF !HB_IsNil( uItem[ MYSQL_FS_DEF ] )
uValue := SqlDate2Clip( uItem[ MYSQL_FS_DEF ] )
ELSE
uValue := CToD("")
ENDIF


EXIT

#ifdef __XHARBOUR__
DEFAULT
#else
OTHERWISE
#endif
uValue := NIL
END
::SetData( nIdx, uValue )

NEXT

ENDIF
ENDIF
#ifndef NOINTERNAL
ELSE
::oServer:nInternalError := ERR_FAILEDGETROW
::nRecNo := 0
::CheckError()
#endif
ENDIF

RETURN ::nRecNo
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: Versão atual TDOLPHIN - Campo Null

Postby Frafive » Thu Oct 20, 2016 9:05 am

Hola

Me pasa igual con la última versión de dolphin, tambien falla con mysql embebido que cuando se produce un error de mysql, la aplicación se cierra, no captura el error.

Esperemos que el maestro Daniel corriga los errores.

Un saludo
Frafive
 
Posts: 189
Joined: Wed Apr 05, 2006 9:48 pm

Re: Versão atual TDOLPHIN - Campo Null

Postby MGA » Tue Oct 25, 2016 10:33 am

Carlos!
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: Versão atual TDOLPHIN - Campo Null

Postby nnicanor » Fri Dec 16, 2016 9:20 pm

Prueba reemplazando el metodo VerifyValue en tdolqry.prg:

Code: Select all  Expand view


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

METHOD VerifyValue( nIdx, cField ) CLASS TDolphinQry

   LOCAL cType, uValue
   LOCAL nPad

   cType := ::aStructure[ nIdx ][ MYSQL_FS_CLIP_TYPE ] //, ::aStructure[ nIdx ][ MYSQL_FS_TYPE ]

   SWITCH cType
      CASE "L"
         IF cField == NIL .OR. Empty(cField)
             uValue := If( IS_NOT_NULL( ::aStructure[ nIdx ][ MYSQL_FS_DEF ] ), ::aStructure[ nIdx ][ MYSQL_FS_DEF ],.F.)
         ELSE
            uValue := If( ValType( cField ) == "L", cField, !( Val( cField ) == 0 ) )
         ENDIF
         EXIT

      CASE "N"

         IF cField == NIL .OR. Empty(cField)
            uValue := If( IS_NOT_NULL( ::aStructure[ nIdx ][ MYSQL_FS_DEF ] ),::aStructure[ nIdx ][ MYSQL_FS_DEF ], 0 )
         ELSE
            uValue := If( ValType( cField ) == "N", cField, Val( cField ) )
         ENDIF
         EXIT

      CASE "D"
         IF Empty( cField ) .OR. Empty(cField)
            uValue := If( IS_NOT_NULL( ::aStructure[ nIdx ][ MYSQL_FS_DEF ] ), ::aStructure[ nIdx ][ MYSQL_FS_DEF ] ,CToD( "" ) )
         ELSE
            uValue := If( ValType( cField ) == "D", cField, SqlDate2Clip( cField ) )
         ENDIF
         EXIT
      CASE "M"
         // we can not use PadR in  memo field
         IF ( cField == NIL .OR. Empty(cField) )
            uValue := ""
         ELSE
            uValue := cField
         ENDIF
         EXIT
      CASE "T"
      CASE "C"
         IF D_SetPadRight()
            nPad := Min( If( ::aStructure[ nIdx ][ MYSQL_FS_MAXLEN ] > ::aStructure[ nIdx ][ MYSQL_FS_LENGTH ],;
                      ::aStructure[ nIdx ][ MYSQL_FS_MAXLEN ], ::aStructure[ nIdx ][ MYSQL_FS_LENGTH] ), MAX_BLOCKSIZE )
         ELSE
            nPad := 0
         ENDIF
         IF ( cField == NIL .OR. Empty(cField) )
            uValue := PadR(If( IS_NOT_NULL( ::aStructure[ nIdx ][ MYSQL_FS_DEF ] ), ::aStructure[ nIdx ][ MYSQL_FS_DEF ], "" ),nPad)
         ELSE
            uValue := PadR( cField, Max( Len( cField ), nPad ) )
         ENDIF

         EXIT
#ifdef __XHARBOUR__
      DEFAULT
#else
      OTHERWISE
#endif
  //       uValue = cField
      ENDSWITCH

RETURN uValue

 


Saludos,
Nicanor Martinez M.
Auditoria y Sistemas Ltda.
MicroExpress Ltda.
FW + FWH + XHARBOUR + HARBOUR + PELLES C + XDEVSTUDIO + XEDIT + BCC + VC_X86 + VCC_X64 + MINGW + R&R Reports + FastReport + Tdolphin + ADO + MYSQL + MARIADB + ORACLE
nnicanor@yahoo.com
nnicanor
 
Posts: 295
Joined: Fri Apr 23, 2010 4:30 am
Location: Colombia

Re: Versão atual TDOLPHIN - Campo Null

Postby MGA » Tue Dec 20, 2016 4:02 pm

Gracias Nicanor,

vou testar!
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: VictorCasajuana and 9 guests