Página 1 de 1
CreateObject e ExecQuery não executa SQL - Harbour.
Enviado: 01 Set 2016 17:18
por ANDRIL
Após instalar o MySql em minha máquina, a função que faz a leitura da Bios deixou de funcionar, como usa uma pesquisa SQL acho que o MySQL tem algo a ver com isso. O objeto oJbs vem vazio, como se não rodasse a Query.
Código: Selecionar todos
*****************************************************************************
FUNCTION BIOSDATE()
local oLoc, oSrv, oJbs, oJob, mb, bd
*****************************************************************************
BEGIN SEQUENCE
oLoc := CREATEOBJECT( "wbemScripting.SwbemLocator" )
oSrv := oLoc:ConnectServer()
oJbs := oSrv:ExecQuery( "SELECT * FROM Win32_BIOS" )
mb := ''
bd := '00/00/0000'
FOR EACH oJob IN oJbs
MB += if(empty(oJob:Manufacturer)=.t.,"Sem Fabricante",oJob:Manufacturer) + ', '
bd := SE(oJob:ReleaseDate)
if Empty( bd )
bd := '00/00/0000'
else
bd := Subst( bd, 7, 2 ) + '/' + Subst( bd, 5, 2 ) + '/' + Subst( bd, 1, 4 )
endif
MB += bd + ' #'
if oJob:SerialNumber=NIL
dados=""
else
dados=oJob:SerialNumber
endif
if oJob:Version=NIL
dados1=""
else
dados1=oJob:Version
endif
MB += SE(dados) + ' ('
MB += SE(dados1) + ')'
NEXT
RECOVER
mb := ''
END SEQUENCE
RETURN ctod(bd)
Tem alguma outra forma de detectar a data da Bios no HARBOU? Não posso desinstalar o MySQL no momento para ver se é mesmo que causou o problema.
Até+
CreateObject e ExecQuery não executa SQL - Harbour.
Enviado: 01 Set 2016 17:41
por JoséQuintas
testou retirando o begin sequence/end sequence ?
fui testar aqui mas...
Código: Selecionar todos
hbmk2: Error: Referenced, missing, but unrecognized Harbour function(s): SE()
CreateObject e ExecQuery não executa SQL - Harbour.
Enviado: 01 Set 2016 18:01
por JoséQuintas
Depois uma reorganizada, saiu algum resultado, mas foi só pra teste
Código: Selecionar todos
PROCEDURE Main
SET DATE BRITISH
? BiosDate()
RETURN
FUNCTION BiosDate()
LOCAL oScript, oServer, oObjList, oJob, cInfo, cDate
oScript := win_OleCREATEOBJECT( "wbemScripting.SwbemLocator" )
oServer := oScript:ConnectServer()
oObjList := oServer:ExecQuery( "SELECT * FROM Win32_BIOS" )
cInfo := ""
cDate := "00/00/0000" // Obriga Date British
FOR EACH oJob IN oObjList
cInfo += iif( Empty( oJob:Manufacturer ), "Sem Fabricante", oJob:Manufacturer ) + ", "
cDate := oJob:ReleaseDate
IF Empty( cDate )
cDate := "00/00/0000"
ELSE
cDate := Subst( cDate, 7, 2 ) + "/" + Subst( cDate, 5, 2 ) + "/" + Subst( cDate, 1, 4 )
ENDIF
cInfo += cDate + " #"
cInfo += iif( oJob:SerialNumber == NIL, "", oJob:SerialNumber ) + " (" + iif( oJob:Version == NIL, "", oJob:Version ) + ")"
NEXT
? cDate
? valtype( cDate )
cDate := Ctod( cDate ) // Obriga Date British
? cDate
? cInfo
RETURN ""
Código: Selecionar todos
d:\temp>test
19/04/2013
C
19/04/13
American Megatrends Inc., 19/04/2013 #To be filled by O.E.M. (_ASUS_ - 1072009)
CreateObject e ExecQuery não executa SQL - Harbour.
Enviado: 01 Set 2016 18:03
por JoséQuintas
Faltou acrescentar:
Se não colocar SET DATE BRITISH, dá erro na rotina e não sairia nada com BEGIN SEQUENCE/END SEQUENCE.
Não sei se pode ter sido esse o motivo, porque só compilou depois de dar uma geral.
CreateObject e ExecQuery não executa SQL - Harbour.
Enviado: 01 Set 2016 18:21
por ANDRIL
Jose testei a sua função, retorno o mesmo que a minha, ou seja, nada de concreto. Creio que o problema foi o MYSQL que instalei, de alguma forma deve ter mudado o motor padrão de busca SQL, assim interferindo na função. No meu WIN7, PAINEL DE CONTROLE -> em programas padrão notei que a extensão .SQL esta vinculada ao MYSQL, voce sabe qual é o programa padrão quando não se tem o MYSQL instalado?
Obrigado pela ajuda.
CreateObject e ExecQuery não executa SQL - Harbour.
Enviado: 01 Set 2016 19:03
por JoséQuintas
Testou a função ou o fonte?
Na função está pra não retornar nada... foi só durante teste.
Aqui uma versão final, sem depender do formato da data.
Código: Selecionar todos
PROCEDURE Main
LOCAL cInfo := ""
? BiosDate( @cInfo )
? cInfo
RETURN
FUNCTION BiosDate( cInfo )
LOCAL oScript, oServer, oObjList, oJob, dDate
hb_Default( @cInfo, "" )
oScript := win_OleCREATEOBJECT( "wbemScripting.SwbemLocator" )
oServer := oScript:ConnectServer()
oObjList := oServer:ExecQuery( "SELECT * FROM Win32_BIOS" )
FOR EACH oJob IN oObjList
cInfo += iif( Empty( oJob:Manufacturer ), "Sem Fabricante", oJob:Manufacturer ) + ", "
dDate := oJob:ReleaseDate
IF .NOT. Empty( dDate )
dDate := Stod( dDate )
cInfo += Dtoc( dDate ) + " #"
ENDIF
cInfo += iif( oJob:SerialNumber == NIL, "", oJob:SerialNumber ) + " (" + iif( oJob:Version == NIL, "", oJob:Version ) + ")"
NEXT
hb_Default( @dDate, Ctod( "" ) )
RETURN dDate
CreateObject e ExecQuery não executa SQL - Harbour.
Enviado: 02 Set 2016 07:24
por ANDRIL
Ontem, testei a função acima e não funcionou, o objeto retornado é vazio. Quanto o formato da data SET DATE BRITISH já uso como padrão.
Reiniciei o PC e ambas as funções voltaram a funcionar, retornando a data da Bios normalmente. Vai entender... Agora vou acompanhar para ver se esse problema ocorre novamente e tentar saber o por que.
Obrigado pela ajuda.
CreateObject e ExecQuery não executa SQL - Harbour.
Enviado: 08 Set 2016 15:46
por JoséQuintas
notei que a extensão .SQL esta vinculada ao MYSQL, voce sabe qual é o programa padrão quando não se tem o MYSQL instalado?
Essa sua questão ficou sem resposta.
Isso é pra arquivos físicos com extensão .SQL.
Da mesma forma que configura .PDF, .DOC, .XLS, etc.
Não é o caso da rotina.
Aqui a extensão está associada ao HEIDISQL, que geralmente é usado pra restaurar backup em formato .SQL.
Nota: Não sei se esse tipo de consulta depende dos direitos do usuário, e os famosos programas de banco causarem interferência nisso.