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.