Jump to content
Fivewin Brasil

Edu

Membros
  • Posts

    126
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by Edu

  1. Caro ADutheil, A variavel cDirectory está vazia neste momento. Já tentei deste modo mas não funcionou. Acho que esta classe não suporta o protocolo TLS. Desconheço a curl easy, mas consegui com outra classe chamada qFtpClient. Para quem estiver interessado. Segue anexo. qFTPClient.txt
  2. Kapiaba, Não consegui! Interessante que se eu colocar o nome do usuário = usuario@dominio.com.br, não consegue estabelecer conexão. Como se a url estivesse mal formada. Dá erro logo de cara. Mas se eu colocar só o nome do usuário, ele estabelece a conexão e retorna o erro de autenticação. Não sei mais o que fazer...
  3. 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
  4. 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.
  5. Boa tarde. Function GetNtpDate() retrieves the internet "time" from a time server. Please review samples\itime.prg Obs.: Acho que só funciona nas versões do FWH 1308 em diante. Abs.
  6. Edu

    Alinhar get

    Tenta com a classe FGet - Format Get. Ela possui a propriedade nAlign e o metodo SetAlign. Samples: fw\samples\testfget.prg
  7. Edu

    Alinhar get

    Boa tarde. Se você estiver usando Pelles, dá pra alinhar nas propriedades do objeto. Caso contrário você pode alinhar na PICTURE "@R 99999999" Abs.
  8. 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
  9. Muito bom! http://bitactual.es/2016/07/28/antonio-linares-creador-de-fivewin-y-harbour/
  10. Bom dia! Eu consegui baixar o arquivo mas fazer upload não deu certo. Utilizei o Google Drive.
  11. Obrigado Kapiaba! Vou testar aqui. Abraço.
  12. 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!
  13. 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. Fonte: http://www.gismaps.com.br/viewer/tutorial/xls2dbf.htm
  14. Muito Bom!! É isso mesmo! Só pra complementar, li sobre o assunto no Wikipedia, que descreve bem como funciona: HTTP Daemon is a software program that runs in the background of a web server and waits for the incoming server requests. The daemon answers the request automatically and serves the hypertext and multimedia documents over the internet using HTTP. Link: https://en.wikipedia.org/wiki/Httpd
  15. Bom dia! Nunca usei. Serve pra que?
  16. 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.
  17. 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?
  18. 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?
  19. 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
  20. Galera. Pra quem não entendeu muito bem, este link explica sobre o Agendador de tarefas [schtasks.exe] https://support.microsoft.com/pt-br/kb/814596 Abs.
  21. 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") cUrl:= "https://www.nfe.fazenda.gov.br/scripts/srf/intercepta/captcha.aspx?opt=image"// link da imagem 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
  22. Bom dia! Vc pode executar um ascan no vetor do combobox. Testa assim: REDEFINE COMBOBOX oCbx[1] VAR vUF items("ac","al","Am","Ap",Ba",....) ID 100 OF oDlg UPDATE oCbx[1]:bLClicked:={|| nAt:= ASCAN(oCbx[1]:aItems,,,{|X| X[1] == vUF}) }
  23. 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...