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.