Versão atual TDOLPHIN - Campo Null

Post Reply
MGA
Posts: 1219
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Versão atual TDOLPHIN - Campo Null

Post by MGA »

Amigos,

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

Com a versão NOVA da TDOLPHIN _ 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

FWH17.04
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
User avatar
carlos vargas
Posts: 1421
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Versão atual TDOLPHIN - Campo Null

Post by carlos vargas »

please, replace in tdolqry.prg, recompile and test.

Code: Select all

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)
MGA
Posts: 1219
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Re: Versão atual TDOLPHIN - Campo Null

Post by MGA »

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

FWH17.04
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
Frafive
Posts: 189
Joined: Wed Apr 05, 2006 9:48 pm

Re: Versão atual TDOLPHIN - Campo Null

Post by Frafive »

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
MGA
Posts: 1219
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Re: Versão atual TDOLPHIN - Campo Null

Post by MGA »

Carlos!
ubiratanmga@gmail.com

FWH17.04
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
nnicanor
Posts: 296
Joined: Fri Apr 23, 2010 4:30 am
Location: Colombia

Re: Versão atual TDOLPHIN - Campo Null

Post by nnicanor »

Prueba reemplazando el metodo VerifyValue en tdolqry.prg:

Code: Select all


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

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
MGA
Posts: 1219
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Re: Versão atual TDOLPHIN - Campo Null

Post by MGA »

Gracias Nicanor,

vou testar!
ubiratanmga@gmail.com

FWH17.04
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
Post Reply