hb_Default e hb_DefaultValue

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

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

hb_Default e hb_DefaultValue

Mensagem 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   
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

hb_Default e hb_DefaultValue

Mensagem 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



Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

hb_Default e hb_DefaultValue

Mensagem 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      
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

hb_Default e hb_DefaultValue

Mensagem 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.
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

hb_Default e hb_DefaultValue

Mensagem 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


Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

hb_Default e hb_DefaultValue

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

hb_Default e hb_DefaultValue

Mensagem 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.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder