Página 2 de 2

Re: Obter data e hora do servidor

Enviado: 12 Nov 2008 19:36
por alaminojunior
Também não vejo porquê não linkar com Blinker.

Re: Obter data e hora do servidor

Enviado: 12 Nov 2008 19:39
por Maligno
Pablo César escreveu:Será falta de memória ? Por quê com BLINKER funcionou e com RTLINK não ???
A resposta nisso esta no meio através do qual o interpretador de comandos foi re-instanciado. O comando RUN é bem pobrinho. E a função SwpRunCmd(), muito provavelmente, utiliza algum outro recurso, que torna possível execuções desse tipo.

Re: Obter data e hora do servidor

Enviado: 12 Nov 2008 19:42
por alxsts
Meus caros, agradeço pelo interesse e empenho em ajudar com suas pesquisas.

Fiz mais alguns testes: criei o .Bat que o Maligno sugeriu e não funcionou tambem.
Linkeditando com o Exospace, de qualquer forma funciona!
Concluo que quando utilizo o RTLink, não há memória suficiente para rodar o Net Time (ele nem mostra a mensagem "Programa muito grande para ser carregado na memória" ). Por isso tentei rodar o CMD /C START, na tentativa de rodar em outra janela, com outro espaço de memória.

Vou dar um jeito de usar o Exospace ou BLinker.

Segue em anexo o código da função, se quiserem analisar.

Obrigado a todos.

[]s
AlxSts

Obter data e hora do servidor

Enviado: 12 Nov 2008 19:49
por Pablo César
O comando SwpRunCmd("CMD /C NET TIME > NULL") mesmo em BLINKER como o Maligno indicou, não está funcionando gente.
alxsts escreveu:Fiz mais alguns testes: criei o .Bat que o Maligno sugeriu e não funcionou tambem.
Não foi Maligno que indicou, mas isso não importa. Acho que você não deve ter feito como eu indiquei. Pois executando o NET TIME através de arquivo BATCH, funciona sim !

Aproveitando o seu próprio código, fiz algumas modificações, compile e verá que funciona:

Código: Selecionar todos

PARAMETERS VSERV

IF VSERV=NIL
   ? "Informe parametro !. Coloque o nome do servidor."
   ? "Exemplo: SRVRDATE SERVIDOR02"
   QUIT
ENDIF
? GetSvrSysDateTime( VSERV, .F.)

FUNCTION GetSvrSysDateTime( cServer, lSync )
Local dDate,cTime, nStart, nEnd, cString, nLen
Local cSetDate, cCommand
Local cRet := ""

// DEFAULT cServer TO "\\Server02"
// DEFAULT lSync   TO .F.           // Sincronizar estacao X servidor (Tratar depois)

IF ! Empty( "DATAHORA.TXT" )
   MEMOWRIT("VESERVER.BAT","@NET TIME \\"+cServer+" > DATAHORA.TXT")
   cCommand := "VESERVER.BAT"
   RUN ( cCommand )

   IF File("DataHora.txt")
      cString := Memoread("DataHora.txt")
      IF ( ! Empty( cString ) )
         nLen := AT( "/", cString )

         IF nLen > 0
            cSetDate := Set( _SET_DATEFORMAT, "mm/dd/yyyy" )

            While Substr( cString, nLen, 1 ) != " "
               nLen--
            Enddo

            nStart := nLen + 1

            cString := Substr( cString, nStart, Len( cString ) )

            nEnd := AT( " ", cString )

            dDate := Ctod( Substr( cString, 1, nEnd - 1 ) )

            cString := Substr( cString, nEnd + 1, Len( cString ) )

            nEnd := AT( " ", cString )

            cTime := Substr( cString, 1, nEnd - 1 )

            cString := Substr( cString, nEnd + 1, Len( cString ) )

            nEnd := AT( ":", cTime )

            If nEnd == 2
               cTime := StrZero( Val( Left( cTime, 1 ) ), 2 ) + ":" + Substr( cTime, nEnd + 1, 2 )
            Endif

            IF ( At( "PM", cString ) > 0 ) .And. Left( cTime, 2 ) != "12"
               cTime := StrZero( Val( Left( cTime, 2 ) ) + 12, 2 ) + Substr( cTime, 3, 3 )
            ELSEIF ( At( " AM", cString ) > 0 ) .And. Left( cTime, 2 ) == "12"
               cTime := "00" + Right( cTime, 3 )
            ENDIF
         ELSE
            dDate := CtoD( "" )
            cTime := "  :  "
         ENDIF
         DELETE FILE( "DATAHORA.TXT" )
      ENDIF
   ENDIF

   Set( _SET_DATEFORMAT, cSetDate )

   cRet := DtoC( dDate ) + " " + cTime
ENDIF
RETURN cRet
Acho que compilando, não resta dúvidas.

Re: Obter data e hora do servidor

Enviado: 12 Nov 2008 20:08
por Maligno
Estranho. Pra mim funcionou certinho. Quem explica? :)

Obter data e hora do servidor

Enviado: 12 Nov 2008 20:13
por Pablo César
Maligno, você experimentou com: SwpRunCmd("CMD /C NET TIME > NULL") ?

Re: Obter data e hora do servidor

Enviado: 12 Nov 2008 21:04
por alxsts
Pablo, desculpe, confundi quem me sugeriu o .Bat.

O .Bat que criei está certo (@NET TIME \\Server02 > DATAHORA.TXT)

Rodei a tua versão da rotina, de forma isolada. Funcionou perfeitamente.

Embuti na minha aplicação e obtive os mesmos resultados de antes: com RTLink não funciona e com ExoSpace funciona. Isso reforça a minha tese de falta de memória. Mas vou mudar para Exospace. Não vamos mais perder tempo com isto, a não ser por curiosidade.

Obrigado a todos.

[]s
AlxSts

Obter data e hora do servidor

Enviado: 12 Nov 2008 21:35
por Pablo César
Ahhh entendí Alex, eu também cheguei a pensar nessa possibilidade (falta de memória). Só que antes de compilar com Exospace, aceite um conselho. Não use mais esse linkador, utilize o BLINKER, ele é tão bom quanto e melhor até. Você vai ver que vai te mais ganho, por quê não utiliza o BLINKER ?