Página 1 de 1

hb_Default e hb_DefaultValue

Enviado: 18 Mai 2016 13:16
por asimoes
Prezados,

Me confirmem se o que está acontecendo é um bug, hb_default e defaultValue estão retornando a data e não o valor passado para o parâmetro

Código: Selecionar todos

nValor:=Teste1(1)
nValor:=Teste2(1)

FUNCTION Teste1(nValor)              
   nValor:= hb_defaultValue(nValor, Date())                                  
RETURN Nil   

FUNCTION Teste2(nValor)              
   hb_Default(@nValor, Date())              
RETURN Nil   

hb_Default e hb_DefaultValue

Enviado: 18 Mai 2016 19:59
por Vlademiro
Segue o fonte do programa com a respectiva saída entre comentários :

Código: Selecionar todos



#include "hbver.ch"

FUNCTION MAIN()
private nValor

   nValor:= Teste1(1)

   nValor := Teste2(1)

   ? nValor

    ? "Harbour build date: " + hb_Version( HB_VERSION_BUILD_DATE_STR )
    ? "Major version number: " , hb_Version( HB_VERSION_MAJOR )
    ? "Minor version number: " , hb_Version( HB_VERSION_MINOR )
    ? "Revision number: " , hb_Version( HB_VERSION_RELEASE )
    ? "Build status: " , hb_Version( HB_VERSION_STATUS )
    ? "-------------------------------------------------------------------"

   /**

    Exibe

       05/18/16
       NIL

Harbour build date: Oct 14 2015 13:10:58
Major version number:           3
Minor version number:           2
Revision number:           0
Build status:  dev
-------------------------------------------------------------------


   */

RETURN NIL

FUNCTION Teste1(nValor)
   nValor:= hb_defaultValue(nValor, Date())
   ? nValor
RETURN Nil

FUNCTION Teste2(nValor)
   hb_Default(@nValor, Date())
RETURN Nil




hb_Default e hb_DefaultValue

Enviado: 18 Mai 2016 20:12
por asimoes
Não é isso não deixa eu explicar melhor.

nValor:=Teste1(1)
nValor = 18/05/2016 e não 1

nValor:=Teste2(1)
nValor = 18/05/2016 e não 1

nValor:=Teste3(1)
nValor = 1

Para hb_Default e hb_DefaultValue o que eu entendi é tipo esperado tem que ser o mesmo passado para o parâmetro

Código: Selecionar todos

FUNCTION Teste1(nValor)              
   nValor:= hb_defaultValue(nValor, Date())                                  
RETURN nValor  

FUNCTION Teste2(nValor)              
   hb_Default(@nValor, Date())              
RETURN nValor

FUNCTION Teste3(nValor)
    __DefaultNIL(@nValor, Date())
RETURN nValor      

hb_Default e hb_DefaultValue

Enviado: 19 Mai 2016 09:10
por Vlademiro
Refiz o teste e ficou assim :

Código: Selecionar todos


#include "hbver.ch"

FUNCTION MAIN()
local nValor

   nValor:= Teste1(1)
   ? nValor

   nValor := Teste2(1)
   ? nValor

   nValor := Teste3(1)
   ? nValor

   nValor := Teste4(1)
   ? nValor

    ? "Harbour build date: " + hb_Version( HB_VERSION_BUILD_DATE_STR )
    ? "Major version number: " , hb_Version( HB_VERSION_MAJOR )
    ? "Minor version number: " , hb_Version( HB_VERSION_MINOR )
    ? "Revision number: " , hb_Version( HB_VERSION_RELEASE )
    ? "Build status: " , hb_Version( HB_VERSION_STATUS )
    ? "-------------------------------------------------------------------"

   /**

    Exibe


05/19/16
05/19/16
         1
         1
Harbour build date: Oct 14 2015 13:10:58
Major version number:           3
Minor version number:           2
Revision number:           0
Build status:  dev



   */

RETURN NIL
*** Acrescentei essa função
#include "common.ch"
FUNCTION Teste4(nValor)
DEFAULT nValor TO Date()
RETURN nValor



Acrescentei a função Teste4 (eu uso a macro DEFAULT TO definida em common.ch, ela foi definida inicialmente por Rick Spence em um de seus livros e acabou sendo incorporada em um arquivo ch).

Creio que essas funções que vc citou estão com algum problema. Talvez se alguém testasse com uma versão mais atualizada do harbour (3.4) ela mostre o resultado esperado.

hb_Default e hb_DefaultValue

Enviado: 19 Mai 2016 09:24
por Vlademiro
Encontrei esse post :
https://groups.google.com/forum/#!topi ... HieS0uzfU

Eu entendi o seguinte :

Quando vc passa um tipo de dado diferente o hb_Default irá atribuir o valor que vc definiu como default. Seria o mesmo que vc passar o NIL. Se vc definiu o padrão como Date() e passou o número 1, então a função irá aplicar o padrão (Date()).

Refiz os testes e eles confirmaram a minha suspeita, mas estou sem tempo para realizar mais alguns testes. Mas creio que seja isso mesmo.

Código: Selecionar todos

#include "hbver.ch"

FUNCTION MAIN()
local nValor

   nValor:= Teste1( Date() + 30 )
   ? nValor

   nValor:= Teste1(1)
   ? nValor

   nValor:= Teste2(Date() + 30 )
   ? nValor

   nValor := Teste2(1)
   ? nValor

   nValor := Teste3(1)
   ? nValor

   nValor := Teste4(1)
   ? nValor

RETURN NIL
*** Acrescentei essa função
#include "common.ch"
FUNCTION Teste4(nValor)
DEFAULT nValor TO Date()
RETURN nValor

FUNCTION Teste1(nValor)
   nValor:= hb_defaultValue(nValor, Date())
RETURN nValor

FUNCTION Teste2(nValor)
   hb_Default(@nValor, Date())
RETURN nValor

FUNCTION Teste3(nValor)
    __DefaultNIL(@nValor, Date())
RETURN nValor



hb_Default e hb_DefaultValue

Enviado: 19 Mai 2016 11:40
por JoséQuintas
O default é a data ou um campo do mesmo tipo: data
Como passou número 1, e não é campo data, assumiu o default.

Em outras palavras:
Se a rotina quer uma data, porque está passando número?.... rs

hb_Default e hb_DefaultValue

Enviado: 19 Mai 2016 12:17
por asimoes
Quintas,

Esse problema eu peguei em uma função corporativa, e não levei em conta que hb_default e hb_defaultvalue tem que ser do mesmo tipo, enfim sempre aprendendo.