CreateObject e ExecQuery não executa SQL - Harbour.

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

Moderador: Moderadores

Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

CreateObject e ExecQuery não executa SQL - Harbour.

Mensagem 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é+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

CreateObject e ExecQuery não executa SQL - Harbour.

Mensagem 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()
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

CreateObject e ExecQuery não executa SQL - Harbour.

Mensagem 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)
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

CreateObject e ExecQuery não executa SQL - Harbour.

Mensagem 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.
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
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

CreateObject e ExecQuery não executa SQL - Harbour.

Mensagem 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.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

CreateObject e ExecQuery não executa SQL - Harbour.

Mensagem 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
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
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

CreateObject e ExecQuery não executa SQL - Harbour.

Mensagem 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.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

CreateObject e ExecQuery não executa SQL - Harbour.

Mensagem 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.
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/
Responder