Jump to content
Fivewin Brasil

Mudança Sql


edutraini

Recommended Posts

Bom dia Pessoal 

Migrei meu sistema para sql express usando sqlrdd  e coloquei nas nuvens (locaweb) e ate agora estou muito feliz e satisfeito com a perfomance.

Logico que alguma rotinas aos poucos estou reescrevendo usando comandos sql para poder ficar mais rapido

Tenho duas duvidas 

1 - Hoje uso o rpv para gerar os relatorios mas gostaria de usar um outro programa para que nao precisasse ficar instalando na maquina do cliente.

2 - Para atualizar a versao do executavel na maquina do cliente  eu uso esse comando 

   oXMLHTTP := CREATEOBJECT( "Microsoft.XMLHTTP" )
   oADODBStream := CREATEOBJECT( "Adodb.Stream" )
   oXMLHTTP:Open( "GET", "http://www.emtinformatica.com.br/site/aco32.exe", .f. )
   oXMLHTTP:Send()
   oADODBStream:Type := 1
    oADODBStream:Open()
    oADODBStream:Write( oXMLHTTP:ResponseBody )
    oADODBStream:SaveToFile( "c:\sistema\aco32_novo.exe", 2 )

ou seja eu pego executavel aco32.exe que esta no meu http e salvo na pasta na maquina do cliente com outro nome pois no momento ele esta com o executavel aco32.exe aberto 

ai vem a duvida 

tem alguma forma que quando ele clicar no aco32.exe dentro do programa ele verificar que tem um aco32_novo.exe aonde ele fecha esse executavel renomeia a versao nova 

ou alguem poderia dar uma dica melhor de como atualizar o executavel 

 

 

Link to comment
Share on other sites

Acredito que via arquivo de lotes você consiga.

Segue uma ideia que pode ser executada pelo seu programa:

if file("c:\sistema\aco32_novo.exe")
   IF MsgNoYes("Existe uma nova versão do sistem. Gostaria de atualizar agora?", "Nova versão")
      cAtuInf := "@ECHO OFF"+CRLF+;
                 "COLOR F1"+CRLF+;
            	  'TASKKILL /IM aco32.exe /F'+CRLF+;
            	  'TIMEOUT /T 2 /NOBREAK'+CRLF+; // Esperar 2 segundos ignorando pressionamento de teclas
            	  'DEL aco32.exe'+CRLF+;
            	  'REN aco32_novo.exe aco32.exe'+CRLF+;
                 "START aco32.exe"+CRLF+;
                 "EXIT"
      if file(".\updaco32.bat") ; ferase(".\updaco32.bat") ; endif
      arq2 := fcreate(".\updaco32.bat")
      fwrite(arq2, cAtuInf)
      fclose(arq2)
      WAITRUN( GetEnv( 'ComSpec' )+' /C START .\updaco32.bat"', 0 )
      SysWait(10) // Precisa disso, senão o programa prossegue com a execução
   ENDIF
ENDIF

 

Link to comment
Share on other sites

Eduardo, pelo que entendi, você não conseguirá renomear/apagar o executável ao qual vc está utilizando. A saída é montar um executável paralelo que faz a verificação de nova versão em seu FTP e a partir daí vc roda ele em background (assim que entrar no seu aplicativo). Caso haja nova versão você avisa ao usuário e aí sim, traz a versão, mata a aplicação principal, renomeia o executável e reabre a aplicação.

O meu aplicativo é assim e faz anos que não tenho problema. 

Qualquer coisa, entra em contato comigo que posso te ajudar.

Um abraço,

 

Alexandre Pereira 

Link to comment
Share on other sites

Amiguinhos,

Deixe dar uma dica.

Olhe este pequeno aplicativo e moldem para execução do aplicativo desejado.

Baseado em exemplo existente no fivewin\samples

	// -> Sample showing how to activate and to finish an external application
#include "FiveWin.ch"
	function Main( applicativo )
   LOCAL dDate, cPath, cAPHack
	   SET DATE BRITISH
	   dDate := Date()
   cPath   := cFilePath( GetModuleFileName( GetInstance() ) )
   if empty( VerifyINI( "HACK", "APP", "", cPath+"HACK.INI" ) )
      cAPHack := cGetFile( "*.exe", "Nome do arquivo a hackear" )
      VerifyINI( "HACK", "APP", cAPHack, cPath+"HACK.INI", .t. )
      VerifyINI( "HACK", "DATE", DtoC(dDate), cPath+"HACK.INI", .t. )
   endif
   cAPHack := VerifyINI( "HACK", "APP", cAPHack, cPath+"HACK.INI" )
   cAPDate := VerifyINI( "HACK", "DATE", DtoC(dDate), cPath+"HACK.INI" )
   SET DEFAULT TO cPath
   RSetDate( CtoD( cAPDate ) )
   //?"NEW",date()
   ShellExecute( cAPHack, "RUNAS", "", cPath, 1 )
   SysWait( 10 )
   RSetDate( dDate )
   //?"OLD",date()
   return nil
	function RSetDate( cData )
   run( "date " + DtoC( cData ) )
   return .t.
   
function VerifyINI( _section_, _entry_, _var_, _inifile_, _grava_ )
   oIni := TIni():New( _inifile_ )
   if _grava_ = .t.
      oIni:Set( _section_, _entry_, _var_ )
   endif
   return oIni:Get( _section_, _entry_, _var_, _var_ )
#pragma BEGINDUMP
        #include <windows.h>
        #include <hbapi.h>
        // ShellExecute( cFile, cOperation, cParams, cDir, nFlag )
        HB_FUNC( SHELLEXECUTE )
        {
        hb_retnl( (LONG) ShellExecute( GetActiveWindow(),
                  ISNIL(2) ? NULL : (LPCSTR) hb_parc(2),
                  (LPCSTR) hb_parc(1),
                  ISNIL(3) ? NULL : (LPCSTR) hb_parc(3),
                  ISNIL(4) ? "C:\\" : (LPCSTR) hb_parc(4),
                  ISNIL(5) ? 1 : hb_parni(5) ) ) ;
        }
#pragma ENDDUMP

O executável resultante  muda a data do windows para uma data anterior, executa o aplicativo e depois retorna a data ao dia atual.

Ok.

Mas não é este o intuíto. O intuíto é executar um aplicativo através das informações no .INI.

Para tal sugiro que o nome do aplicativo seja nome.numero.exe exemplo clientes.34587.exe onde o numero pode ser um sequencial de controle de versão.

Supondo que se esteja ativo no cliente o clientes.34587.exe e seja necessário atualizar para clientes.34588.exe bastaria que o nome do novo arquivo seja re-escrito no .INI.

Ao executar o iginidor ele saiba qual direção tomar. 

Caso seja necessário retornar a versão anterior basta re-escrever o .INI com o numero de versão mais estável.

Link to comment
Share on other sites

Vou postar aqui o fonte do meu atualizador.


Qualquer coisa é só chamar.

Um abraço,

 

 



/////////////////////////////////////////////////////////////
#include "fivewin.ch"


STATIC oDlg, oTxt, oRas, oMeter, oRecup, oAtualiza, oSair

//////////////////////

Function Main()
  local oIni
  parameters cSistema, cPerfil, cPar1, cPar2 
  public lSair    := .f.
  public lCheck   := .f.
  public lUpLoad  := .f.
  public lQuiet   := .f.
  public cTxt     
  public cLogFile := 'ftplog.txt'
  public cRecup   := ''
  public cArquivo  
  public cLocal   := CurDrive()+':\'+Curdir()
  public cPasta := '/livecred'
  public oFtp 
  
  Set Date Brit
  Set Century On

  Set 3DLook On

  DEFAULT cSistema := 'NomeDoSistema'
  
  // Verificando se o Sistema já está aberto
  if isExeRunning( 'LiveCRED.exe' )
     Return .f.                      
  endif

  if cSistema = '/check'
     lCheck   := .t.
     lQuiet   := .t.
     cSistema := cPerfil
     cPerfil  := cPar1                              
  endif

   if cSistema = '/quiet'
        lQuiet   := .t.
        cSistema := cPerfil
        cPerfil  := cPar1
  endif

  if cSistema = '/upload'
     lUpLoad  := .t.
     cSistema := cPerfil
     cPerfil  := cPar1
  endif

  DEFAULT cPerfil  := '1'
  
  cArquivo := rtrim( lower(cSistema) )+'.zip'
  cTxt     := 'Início'

  nAtual  := 0                                                


  if !lCheck
       DEFINE ICON oIcon RESOURCE 'LiveCRED'
       DEFINE DIALOG oDlg RESOURCE "Live_A" Title "LiveCRED Versão 2.3" Icon oIcon

         redefine Get    oTxt     Var cTxt Memo        id 101 Color nRgb(0,0,220),nRgb(253,252,213) Of oDlg
         redefine Say    oRecup   Var cRecup           id 102 Color nRgb(150,0,0) of odlg
         redefine Meter  oMeter   Var nAtual Total 100 id 103 Of oDlg

         redefine BUTTON oAtualiza id 501 ACTION (oAtualiza:Disable(), oSair:Disable(), Atualiza(), oAtualiza:enable(), oSair:enable() ) CANCEL
         redefine BUTTON oSair     id 510 ACTION (lSair:= .t., oDlg:end() ) CANCEL
         ACTIVATE DIALOG oDlg CENTERED valid lSair on init iniciar()
  else
     ChecaVersao()
  endif
return .t.

/////////////////////////
static function iniciar()
oDlg:SetFocus()
oDlg:show()
oAtualiza:setfocus()
oAtualiza:refresh()
oDlg:refresh()
SysRefresh()
if lCheck
//   Visualiza('Verificando se existe nova versão disponível, aguarde...')
//   oAtualiza:disable()
//   oSair:Disable()
   ChecaVersao()
elseif lQuiet
   oAtualiza:disable()
   oSair:Disable()
   Atualiza()
   lSair := .t.
   oDlg:end()
    hb_gcAll()                                 
elseif lUpload
   oAtualiza:disable()
   oSair:Disable()
   EnviaVersao()
else                         
   visualiza('Clique em Executar para que a sua versão do '+upper(cSistema)+' seja automaticamente atualizada')
endif
return nil


Function ChecaVersao()
LOCAL lRetorno := .T.
local lErro      := .f., lAchou := .f., lTemVersaoNova := .f., lAtualiza := .f.
local i
local dDataRemoto, dDataLocal, cHoraRemoto, cHoraLocal, nTamRemoto, nTamLocal

cArqLocal  := cLocal+'\'+cSistema+'.zip'
cArqRemoto := cArquivo


for i = 1 to 2
   if Conecta( i )
      visualiza( "Conexão estabelecida, Verificando se existe Atualização..." )
      oFtp:Cwd(cPasta)
      aArquivo := oFTP:listfiles( cArqRemoto )
      if len( aArquivo ) = 0
         lRetorno := .f.
         // visualiza('Atualização não encontrada! **** ERRO **** ')
       else
   //       dDataRemoto := aArquivo[1,3]
   //       cHoraRemoto := aArquivo[1,4]
         nTamRemoto  := aArquivo[1,2]
      endif
      oFTP:Close()
   else
      lRetorno := .f.
   endif
   if lRetorno 
      exit
   endif
next


if lRetorno
   if file( cArqLocal )
     // dDataLocal  := fDate( cArqLocal )
     // cHoraLocal  := substr( fTime( cArqLocal ),1,5)
     nTamLocal := fsize( cArqLocal )
   else
     //  dDataLocal  := ctod( '01/01/2000' )
     //  cHoraLocal  := '00:00'
     nTamLocal := 0
   endif
   
  if nTamRemoto <> nTamLocal
      lTemVersaoNova := .t.
   endif

/*
  if dDataRemoto > dDataLocal
      lTemVersaoNova := .t.
   elseif dDataRemoto = dDataLocal
          if cHoraLocal < cHoraRemoto
              cTempo := elaptime( cHoraLocal, cHoraRemoto )
          else
              cTempo := elaptime( cHoraRemoto, cHoraLocal )
          endif
          nTempo := val(substr( cTempo,1,2))*60 + val(substr( cTempo,4,2))
          
          if nTempo > 210  // 3 horas e meia (diferença de horários do servidores ftps)
             lTemVersaoNova := .t.
          endif
   endif
*/

else
   lErro := .t.
   visualiza("Problemas para verificar nova versão! ")
   if !lQuiet 
       MsgInfo('Problemas para verificar nova versão!','Erro de Atualização')
   endif
endif

if !lErro .and. !lTemVersaoNova
   visualiza("Não Existe nova versão disponibilizada! ")
   if !lQuiet 
       MsgInfo('Não Existe nova versão disponível!','Sem Atualização')
   endif
endif

if !lErro .and. lTemVersaoNova
     if MsgYesNo('Existe nova versão disponível do NomeDoSistema, deseja atualizar?','Nova Versão')
        lAtualiza := .t.
     endif
endif

if lAtualiza
   visualiza("Resetando conexões...! ")
   syswait(2)
    sysrefresh()     
    killprocess(cSistema+".exe")
    MyWinExec('livecred '+if(lQuiet,'/quiet ','')+cSistema+' '+cPerfil)                                                                   
endif   

lSair:= .t.
quit
hb_gcAll()                                 
return nil


///////////////////////////////////////////////////////
FUNCTION EnviaVersao()
local aFR3, aArqs := {}
local lErro := .f.
local cArqLocal, cArqEXE, cExtensao, cPastaFR3, cPastaImagem

cArqLocal := CurDrive()+':\'+Curdir()+'\'+cArquivo
cPastaFR3 := 'p:\desenv\fr\'
cArqEXE   := CurDrive()+':\'+Curdir()+'\'+cSistema+'.EXE'
cExtensao := lower( right( cSistema, 3 ) )
aFR3      := directory( cPastaFR3+'*.fr3' )

for x = 1 to len( aFR3 )
   aadd( aArqs, cPastaFR3+aFR3[x,1] )
next

if cExtensao <> 'zip' .and. cExtensao <> 'rar'
   fErase( cArqLocal )
   aadd( aArqs, cArqEXE )

//   ? hb_zipfile( cArqLocal, {'c:\cardPrinter\crdLandEraseFront.bmp'} )  
    hb_zipfile( cArqLocal, aArqs )
else
   cArqLocal := CurDrive()+':\'+Curdir()+'\'+cSistema
endif

if EnviaFtp( cArqlocal )
   if !lQuiet
      MsgInfo('Ok! versão Enviada para o servidor WEB!','Ok')
   endif
else
   if !lQuiet
      MsgStop('ERRO AO ENVIAR VERSÃO!','Erro')
   endif
endif
lSair:= .t.
oDlg:end()
hb_gcAll()                                 

RETURN NIL

//////////////////////////////////////////////////
FUNCTION Atualiza()
local aArquivos := {}, i
local cArqLocal := CurDrive()+':\'+Curdir()+'\'+cArquivo
local cPastaBak := sonumeros(dtoc(date()))+'_'+sonumeros(time())
local cExtensao 
local lErro := .f.


// Apagando o arquivo existente
Ferase( cArquivo )
Ferase( cArqLocal )

if RecebeFtp( cArqlocal, cArquivo  )
   visualiza("Executando Backup da Versão Atual...")

    // Criando um backup dos arquivos anteriores
    lmkdir(cLocal+'\fr')
    lmkdir(cLocal+'\Live')
    lmkdir(cLocal+'\Live\'+cPastaBak)
        
    aArquivos := ZipRead(cLocal+'\'+cArquivo)

    for i = 1 to len(aArquivos)
        cExtensao := lower( right( aArquivos, 3 ) )
        if cExtensao <> 'fr3' .and. cExtensao <> 'gif'
             frename(cLocal+'\'+aArquivos,cLocal+'\Live\'+cPastaBak+'\'+aArquivos)
        endif
    next

    // Backup Criado
    visualiza("Descompactando a Versão Atual...")

    // Descompactando
    for i = 1 to len(aArquivos)
        
       // entrando em um loop caso o arquivo a ser descompactado esteja aberto
       do while .t.
       
           cExtensao := lower( right( aArquivos, 3 ) )
           
           if cExtensao <> 'fr3' .and. cExtensao <> 'gif' .and. file(cLocal+'\'+aArquivos) .and. frename(cLocal+'\'+aArquivos, cLocal+'\Live\'+cPastaBak+'\'+aArquivos ) <> 0
              if !lQuiet .and. MsgYesNo('Erro ao criar backup do Arquivo '+cLocal+'\'+aArquivos+' !'+CRLF+'Possivelmente ele está sendo utilizado.'+CRLF+'Deseja Retentar?','Arquivo Sendo Usado')
                  loop
               else
                  lErro := .t.
                  exit
               endif
           endif
               
           if !hb_unzipfile( cLocal+'\'+cArquivo, {|cArq| qout(cArq) }, .t.,'', cLocal, aArquivos )
                if !lQuiet .and. MsgYesNo('Erro ao DESCOMPACTAR o Arquivo '+cLocal+'\'+aArquivos+' !'+CRLF+'Possivelmente ele está sendo utilizado.'+CRLF+'Deseja Retentar?','Arquivo Sendo Usado')
                   loop
                else
                   lErro := .t.
                   exit
                endif
           endif
           
           // Tratando os arquivos FR3
           if cExtensao = 'fr3' .and. !copyfile(cLocal+'\'+aArquivos, cLocal+'\fr\'+aArquivos )
                if !lQuiet .and. MsgYesNo('Erro ao DESCOMPACTAR o Arquivo '+cLocal+'\'+aArquivos+' !'+CRLF+'Possivelmente ele está sendo utilizado.'+CRLF+'Deseja Retentar?','Arquivo Sendo Usado')
                   loop
                else
                   lErro := .t.
                   exit
                endif
           elseif cExtensao = 'gif' .and. !copyfile(cLocal+'\'+aArquivos, cLocal+'\imagem\'+aArquivos )
                if !lQuiet .and. MsgYesNo('Erro ao DESCOMPACTAR o Arquivo '+cLocal+'\'+aArquivos+' !'+CRLF+'Possivelmente ele está sendo utilizado.'+CRLF+'Deseja Retentar?','Arquivo Sendo Usado')
                   loop
                else
                   lErro := .t.
                   exit
                endif
           elseif cExtensao = 'fr3' .or. cExtensao = 'gif' 
                  ferase( cLocal+'\'+aArquivos )
              endif   
           
           exit
       enddo
       if lErro 
          exit
       endif
    next
    if lErro
       visualiza("ERRO, houve um erro! - VERSÃO NÃO ATUALIZADA")
       visualiza("Restaurando a versão anterior...")
          
       for i = 1 to len(aArquivos)
           CopyFile(cLocal+'\Live\'+cPastaBak+'\'+aArquivos, cLocal+'\'+aArquivos)
       next
    else
       visualiza("OK! Versão atualizada e pronta para ser usada!")
    endif

else 
    lErro := .t.
    visualiza("ERRO ao Receber o Arquivo de Atualização! - VERSÃO NÃO ATUALIZADA")
    if !lQuiet
       MsgAlert('Falha na recepção do arquivo!','Erro')
    endif
endif
 
if !lerro
   if !lQuiet
      MsgInfo('Ok! versão Atualizada e pronta para ser usada!','Ok')
   else
       MyWinExec( cSistema )                                                                   
   endif
endif
RETURN NIL

// Visualizar o que está sendo executado
/////////////////////////////
Function Visualiza( cTexto )
/////////////////////////////

if !lQuiet
   if valtype(cTexto) <> 'O'
     cTxt += CRLF+cTexto
   endif
   oTxt:SetText( cTxt )
   oTxt:SetPos(Len(cTxt))
   oTxt:refresh()
   oDlg:Refresh()
endif
sysrefresh()
Return Nil


// Ler os nomes dos arquivos que estão dentro do ZIP
* -----------------------------------------------------------------------------
Function zipread(zip_file)
* -----------------------------------------------------------------------------
local _array := {}
local zip := fopen(zip_file, 2), tmp :=space(4)
local method, orig_date, fn_date, comp_size, uncomp
local fn_size, extra, junk, file_name, orig_hora, fn_hora
do while .t.
   tmp := space(4)
   if fread(zip, @tmp, 4) != 4    // End of file
      exit
   endif
   if tmp = "PK" + chr(1) + chr(2)  // Central dir
      exit
   elseif tmp != "PK" + chr(3) + chr(4)
      exit
   endif
   tmp := space(26)
   fread(zip, @tmp, 26)
   method    := bin2i(substr(tmp, 5, 2))
   comp_size := bin2l(substr(tmp, 15, 4))
   fn_size   := bin2i(substr(tmp, 23, 2))
   extra     := bin2i(substr(tmp, 25, 2))
   file_name := freadstr(zip, fn_size)
   junk      := if(extra = 0, "", freadstr(zip, extra))
   extract(zip, comp_size, method, file_name)
   aadd(_array, file_name )
enddo
fclose(zip)
return _array

* -----------------------------------------------------------------------------
Static Function extract(_handle, _size, _method, unzip_file)
* -----------------------------------------------------------------------------
local newfile, tmp := space(4096)
if _method != 0
   fseek(_handle, _size, 1)    // Skip file
else
   if newfile = fcreate(unzip_file, 0)
      do while _size > 0
         fread(_handle, @tmp, len(tmp))
         _size -= min(_size, 4096)
         fwrite(newfile, tmp)
      enddo
      fclose(newfile)
   endif
endif
return nil


function SoNumeros( cString, cExcecao )

local cRetorno:='', x

DEFAULT  cExcecao:=''

for x=1 to len( cString )
        if substr( cString,x,1 )$'1234567890' .or. substr( cString,x,1 )$cExcecao
                cRetorno+=substr( cString,x,1 )
        endif
next

return cRetorno

////////////////////////////DADOS DA FUNCAO//////////////////////////////////
// NOME       : MyWinExec                                                 ///
// FINALIDADE : adequar WinExec ao windows 2000/nt                        ///
// PARAMETROS : <1> cComando                                              ///
// RETORNO    : nada                                                      ///
/////////////////////////////////////////////////////////////////////////////
function MyWinExec( cComando )

local cExecute:=''

if IsWinNT()  // NT, 2000 e XP
        cExecute:=GetEnv( 'COMSPEC' )+' /C '
endif

return WinExec( cExecute+cComando, 0 )


Function timefromstart
return '00:00:00'

KillProcess( "calc.exe" )


/////////////////////////////
FUNCTION KillProcess( cExe )

local oWmi, oList, oProc

oWmi := WmiService()
oList := oWmi:ExecQuery( "select * from Win32_Process where Name = '" + cExe + "'" )
for each oProc in oList
oProc:Terminate()
next
return nil

FUNCTION WMIService()
// It would be useful to keep this function in the library
static oWMI

local oLocator

if oWMI == nil

oLocator := CREATEOBJECT( "wbemScripting.SwbemLocator" )
oWMI := oLocator:ConnectServer()

endif

return oWMI

////////////////////////////////////////////////////////////////////////
FUNCTION RecebeFTP( cArqLocal, cArqRemoto )
////////////////////////////////////////////////////////////////////////

LOCAL lRetorno := .T.
local i 

for i = 1 to 2
   IF Conecta( i )
      visualiza( "Conexão estabelecida, fazendo o Download..." )
      oFtp:Cwd(cPasta)
      aArquivo := oFTP:listfiles( cArqRemoto )
      if len( aArquivo ) = 0
         lRetorno := .f.
         visualiza('Atualização não encontrada! **** ERRO **** ')
           lRetorno := .f.
       else
          lRetorno := Inicia_Progress(cArqLocal, aArquivo[1][2], cArqRemoto, oFtp )
      endif
      oFTP:Close()
   else
      lRetorno := .f.
   endif
   if lRetorno 
      exit
   endif
next

if lRetorno
      visualiza( "Arquivo Recebido com sucesso!" )
else
      visualiza( "Falha no Recebimento ***** ERRO *****" )
endif

RETURN lRetorno

//////////////////////////////////////////////////////
FUNCTION EnviaFtp( cFile )
//////////////////////////////////////////////////////

LOCAL lRetorno := .T.
local i
for i = 1 to 1
   IF Conecta( i )
      visualiza( "Conexão estabelecida, fazendo o Upload..." )
   
       oFtp:Cwd(cPasta)
      if !oFtp:UploadFile( cFile )
         lRetorno := .F.
      endif
      oFTP:Close()
   
       if lRetorno
         visualiza( "Arquivo enviado com sucesso!" )
      else
         visualiza( "Falha no Envio!" )
      endif
   ELSE
      lRetorno := .f.
   ENDIF
next

RETURN lRetorno


/////////////////////////////////////////////////////////////////////
Function Inicia_Progress( cArquivoDestino, nTotal, cArqRemoto, oftp)
/////////////////////////////////////////////////////////////////////
local lOk 
oFtp:exGauge := { | done, size| ShowGauge(done, size, nTotal, cArqRemoto ) }
if !oFtp:DownLoadFile(cArquivoDestino)
   lOk := .f.
else
   lOk := .t.
endif
return lOk


// Mostrar a Barra de Progresso durante upload/download
///////////////////////////////////////////////////
STATIC FUNCTION FtpProgress( nSent, nTotal, oFtp )
///////////////////////////////////////////////////
LOCAL cProgress
cProgress := Int( 100*nSent/nTotal )
ometer:set(cProgress )

return .t.

/////////////////////////////////////////////////////
Procedure ShowGauge( nSent, nSize, wTotal, ftpfile )
/////////////////////////////////////////////////////
if nSent > 0
  cProgress := Int( (nSent/wTotal)*100 )
  ometer:set(cProgress )
endif
return


///////////////////////////////
FUNCTION Conecta( nConexao )
///////////////////////////////

local cServer, cUsuario, cSenha, i

local cUrl
local oUrl
local lRetorno := .f.

default nConexao := 1

for i = nConexao to 2
   if i = 1
      cServer  := 'ftp.declatecnologia.com.br'
      cUsuario := 'XXXXXXXXXXXXXXXXXXX'
      cSenha   := 'YYYYYYYYYYY'                       
   elseif i = 2
      cServer  := 'ftp.declatecnologia.com.br'
      cUsuario := 'XXXXXXXXXXXXXXXXXXX'
      cSenha   := 'YYYYYYYYYYY'                       
   endif
    
   If !IsDigit( cServer )            //O Servidor é um Nome
      WSAStartup()
      cServer := GetHostByName( cServer )
      WSACleanUP()
   Endif

   cUrl := "ftp://" + cUsuario + ":" + cSenha + "@" + cServer

   visualiza( "Abrindo conexão com o "+str(i,1)+"o. Servidor..." )

   oUrl := tUrl():New( cUrl )
   oFTP := tIPClientFtp():New( oUrl )
   oFTP:nConnTimeout := 20000
   oFTP:bUsePasv := .T.

   // Forçar UserID se houver @ no usuário
   IF At( "@", cUsuario ) > 0
     oFTP:oUrl:cServer   := cServidor
     oFTP:oUrl:cUserID   := cUsuario
     oFTP:oUrl:cPassword := cSenha
   ENDIF

   oFtp:exGauge := ( @FtpProgress() )

   if oFTP:Open( cUrl )
      lRetorno := .t.
      exit
   endif
   Visualiza('Não conectou ao Servidor!!!')
   if oFTP:SocketCon == NIL
      Visualiza('Conexão não inicializada!!!')
   elseif InetErrorCode( oFTP:SocketCon ) == 0
      Visualiza('Resposta do Servidor: '+oFTP:cReply)
   else
      Visualiza('Erro na Conexão: '+InetErrorDesc( oFTP:SocketCon ))
   endif
next

RETURN lRetorno
 

LiveCRED.res

Link to comment
Share on other sites

21 horas atrás, edutraini disse:

Boa tarde, Alex

To usando a sua rotina mas esta dando erro 

Vc poderia me ajudar

ABraço

Olá Edu.

Claro, vc tem o meu telefone. Pode me chamar novamente, já cheguei na cidade onde vou ficar até o dia 15/12

Só no horário comercial que é meio difícil, mas no mais estou a disposição.

Um abraço,

Alexandre Pereira

CAMPEÃO BRASILEIRO

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...