Jump to content
Fivewin Brasil

Edu

Membros
  • Posts

    126
  • Joined

  • Last visited

  • Days Won

    3

Posts posted by Edu

  1. Prezados,

    Bom dia!

    Eu tenho uma rotina de conexão com servidor FTP que funcionava bem com a Locaweb, porém mudamos para Hostgator e parou de funcionar.

    Ao tentar conectar retorna o erro: 530 - Login authentication failed.

    Obs.: No Filezilla e pelo cmd funciona normal.

    Alguém sabe me dizer a causa disso.

     

    ********************************************************************************
    FUNCTION ConnectFTP()
        * Estabelece a conexao com o servidor FTP
        LOCAL aFiles, lExistDir
        
        IF !IsInternet()
            Msginfo("Você não está conectado à internet!", "Atenção")
            RETURN NIL
        ENDIF
              
        PARAM_CON() // obtem as variaveis de conexao

       cUrl      := "ftp://" + cUser + ":" + cPassword + "@" + cServer 
        

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


       // Comprobamos si el usuario contiene una @ para forzar el userid 
       IF At( "@", cUser ) > 0 
          oFTP:oUrl:cServer   := cServer 
          oFTP:oUrl:cUserID   := cUser 
          oFTP:oUrl:cPassword := cPassword 
        ENDIF 


       IF oFTP:Open( cUrl )
           
            * Obtem a lista de arquivos e pastas na raiz do FTP
           aFiles := oFtp:listFiles()
           
           * verifica se o diretorio principal existe
           lExistDir:= .f.
            FOR i:= 1 TO LEN(aFiles)
               IF aFiles[i,1] == "VALIDADE"
                   lExistDir:= .t.
               ELSE
                   lExistDir:= .f.
                ENDIF    
           NEXT
           
           * Se nao existir, cria o diretorio 
            IF !lExistDir
               oFtp:mkd( "VALIDADE" )  // cria a pasta dentro do ftp
           ENDIF
           
           oFtp:Cwd("VALIDADE")  // acessa o diretorio 

           Msginfo("Conexão com servidor FTP estabelecida com sucesso!", "Ok")
           
            lConnected:= .t.
           
           Grava_historico("Conexão com o Servidor FTP iniciada")
           
       ELSE
          cStr := "Não foi possível conectar com o servidor FTP" + " " +   oURL:cServer
          IF oFTP:SocketCon == NIL
             cStr += Chr( 13 ) + Chr( 10 ) + "Conexão não inicializada"
          ELSEIF InetErrorCode( oFTP:SocketCon ) == 0
             cStr += Chr( 13 ) + Chr( 10 ) + "Resposta do servidor:" + " "+ oFTP:cReply
          ELSE
             cStr += Chr( 13 ) + Chr( 10 ) + "Erro na conexão:" + " " +InetErrorDesc( oFTP:SocketControl )
          ENDIF

          msgstop(cStr,"Erro")
        ENDIF
       
    RETURN NIL

     

  2. Boa tarde amigo.

    Tenta assim:

    SELECT DISTINCT Clientes.cod, Clientes.nome, NF.nfe, max(NF.dtanfe) from Clientes INNER JOIN NF
    ON Clientes.cod = NF.codigoDoCliente ORDER BY Clientes.cod;

     

    Na cláusula ON : Substituir pelos campos de relacionamento das suas tabelas.

    Na cláusula ORDER BY: Substituir pelo campo que queira ordenar.

    Abraço.

     

     

  3. Bom dia galera.

    Existe funções do Habour para criar 'background tasks'. Achei interessante!

    Abs.

    HB_IDLEADD()
    Adds the background task.
    Syntax
    HB_IDLEADD( <bAction> ) --> nHandle
    Argument(s)
    <bAction> is a codeblock that will be executed during idle states. There are no arguments passed to this codeblock during evaluation.
    Returns
    <nHandle> The handle (an integer value) that identifies the task. This handle can be used for deleting the task.
    Description
    HB_IDLEADD() adds a passed codeblock to the list of background tasks that will be evaluated during the idle states. There is no limit for the number of tasks.
    Example(s)

    nTask := HB_IDLEADD( {|| SayTime() } )

    Referência: http://www.fivetechsoft.com/harbour-docs/api.html#hb_idleadd

  4. Boa tarde amigos. Gostaria de uma ajuda na seguinte situação, as vezes quando ocorre algum erro ou por alguma adversidade externa, o sistema para de funcionar e o usuário fecha. Até ai tudo bem, porém algumas vezes o processo fica "preso" no gerenciador de tarefas da máquina, impossibilitando a atualização do sistema e/ou cópia dos DBFs.

    Eu tive a seguinte ideia: Toda vez que um usuário fechar o sistema, executaria uma função que mataria o processo do sistema no Windows, se o mesmo existisse. A princípio funcionaria se o encerramento do sistema fosse de forma normal. Mas quando por exemplo, o usuário está no meio de uma operação e perde conexão de rede com o servidor. A partir daí, o sistema vai parar de responder e provavelmente, acontecerá o caso explicado acima. Isto posto, se eu precisar fazer uma atualização do sistema, eu não vou conseguir pois arquivos estarão em uso na rede.

    Então eu outra ideia, que seria criar um arquivo texto com o IP da maquina e o código do usuário toda vez que o usuário efetuasse login. Este arquivo será apagado quando o usuário sair do sistema de forma normal, caso contrário o arquivo será mantido. Quando for efetuado uma atualização, eu carregaria esses arquivos, para obter o endereço IP das máquinas que provavelmente estão com a instância no gerenciador de tarefas e criaria um batch file com o código para matar o processo, copiaria este arquivo para a maquina na rede e executava ele. Não sei se isso é viável.

    Gostaria de sugestões de vocês sobre o assunto. Grato!

  5. Bom dia!

    Tente exportar direto do excel para DBF. Lembrando que o nome das colunas não podem ultrapassar de 10 caracteres.

    >> Salvar arquivo xls em dbf
    * Baixar o suplemento do excel. Arquivo SaveDBFIV.xlam (suplemento do Excel para exportar DBF)
    * Ao fazer o download do arquivo SaveDBFIV.xlam, descompacte-o e coloque-o na pasta
    C:\Users\Nome do usuário\AppData\Roaming\Microsoft\Suplementos ou outra utilizada
    para complementos, AddIns e suplementos (dependendo do sistema operacional, a localização da pasta pode ser diferente).
    * Clicar no botão Office ou menu Arquivo, dependendo da versão do Office.
    Selecionar a opção Suplementos. Clicar no botão Ir...
    Clicar em Procurar...
    Selecionar o arquivo baixado e confirmar.
    * Agora só salvar como o arquivo ou Arquivo -> Suplementos e selecionar o DBF no tipo do arquivo.
  6. Boa tarde!

    Pelo que vi no programa Editor, está gravado em Hexa. Mas quando vou extrair retorna o erro dizendo que não existe o nome do campo.

    Executei o print dos nomes das colunas e a coluna 'Foto' não imprime.

    Pesquisei sobre o assunto, algumas pessoas falaram que pode estar no arquivo de extensão (.MB). Se estiver, não sei como abrir este arquivo.

  7. Bom dia amigos!



    Estou convertendo um banco de dados Paradox via ADO, está tudo indo bem mas não consigo extrair a imagem do banco de dados.


    Quando abro no programa PDE(Paradox Data Edit), a imagem está lá.



    O erro retornado é que o campo não existe. Alguém tem alguma ideia de como fazer isso?


  8. Bom dia amigos!

    Estou convertendo um banco de dados Paradox via ADO, está tudo indo bem mas não consigo extrair a imagem do banco de dados.

    Quando abro no programa PDE(Paradox Data Edit), a imagem está lá.

    O erro retornado é que o campo não existe. Alguém tem alguma ideia de como fazer isso?

  9. Boa tarde!

    Eu consegui acessar o SQL SERVER via ADODB.

    Não precisei instalar nada.

    Tenta assim:

    Try
    MSQL:= CreateObject("ADODB.Connection")
    MSQL:Open("Driver=SQL Server; network=dbmssocn; Server="+wServer+"; database="+wBanco+"; uid="+wUser+"; pwd="+wPass+";")
    Catch oError
    Msginfo("Erro de conexão com SQL Server: "+oError:description)
    RETURN NIL
    End
  10. Boa tarde amigo!

    Aqui vai um exemplo que fiz pra baixar o captcha do website da NF-e. Creio que servirá pra você.

    *************************************************************************
    FUNCTION BaixaCaptcha()
    * Funcao que baixa a imagem captcha
    LOCAL ErroNET:= .F.
    LOCAL cUrl, oPg, cBuf
    LOCAL cImage:= ""
    IF !IsInternet()
    MsgInfo("Equipamento sem conexão com a Internet")
    RETURN cImage
    ENDIF
    oPg:=CreateObject("Microsoft.XMLHTTP")
    oPg:Open("GET", cUrl, .F.)
    * Tenta enviar a requisicao
    Try
    oPg:Send()
    Catch oError
    ErroNET:=.T.
    End Try
    IF !ErroNET
    * obtem o retorno da requisicao
    cBuf := oPg:responseBody
    * grava o arquivo de imagem
    memowrit("./captcha.jpg", cBuf)
    cImage:= "./captcha.jpg"
    ELSE
    MsgInfo("Ocorreu um erro de conexão com o website da receita federal. Tente mais tarde.")
    ENDIF
    RETURN cImage
  11. Eu faço com o TXBROWSE e funciona perfeitamente.

    oBrw:= TXBROWSE():NEW()
    oBrw:CreateFromResource(4008)
    oBrw:SetArray(vetParc)
    xBrStyles(oBrw, 1)
    oBrw:aCols[1]:cHeader := "Parcela"
    oBrw:aCols[1]:bStrData:= {|| vetParc[oBrw:nArrayAt,1] }
    oBrw:aCols[1]:nWidth := 42
    oBrw:aCols[1]:nHeadStrAlign:= AL_LEFT
    oBrw:aCols[1]:nDataStrAlign:= AL_RIGHT
    oBrw:aCols[2]:cHeader := "Valor"
    oBrw:aCols[2]:bStrData:= {|| TRANSF(vetParc[oBrw:nArrayAt,2],"@E 999,999.99") }
    oBrw:aCols[2]:nWidth := 90
    oBrw:aCols[2]:nHeadStrAlign:= AL_LEFT
    oBrw:aCols[2]:nDataStrAlign:= AL_RIGHT
    oBrw:aCols[3]:cHeader := "Data"
    oBrw:aCols[3]:bStrData:= {|| DTOC(vetParc[oBrw:nArrayAt,3]) }
    oBrw:aCols[3]:nWidth := 70
    oBrw:aCols[3]:nHeadStrAlign:= AL_LEFT
    oBrw:aCols[3]:nDataStrAlign:= AL_LEFT
    oBrw:aCols[3]:nEditType := EDIT_GET
    oBrw:aCols[3]:cEditPicture := "99/99/9999"
    oBrw:aCols[3]:bEditValue := {||vetParc[oBrw:nArrayAt,3]}
    oBrw:aCols[3]:bOnPostEdit := {|aCols, uVal, nKey| If(nKey == VK_RETURN .AND. xplano == 2 ,;
    vetParc[oBrw:nArrayAt,3]:= uVal, NIL)}
    oBrw:aCols[3]:bEditWhen := {|| xplano == 2 }
    oBrw:aCols[4]:cHeader := "Forma de Pagamento"
    oBrw:aCols[4]:bStrData:= {|| vetParc[oBrw:nArrayAt,4] }
    oBrw:aCols[4]:nWidth := 200
    oBrw:aCols[4]:nHeadStrAlign := AL_LEFT
    oBrw:aCols[4]:nEditType := 2
    oBrw:aCols[4]:aEditListTxt := aForma
    oBrw:aCols[4]:aEditListBound := aForma
    oBrw:aCols[4]:bLDClickData := {|| NIL } // desabilita o duplo-clique nesta coluna
×
×
  • Create New...