Jump to content
Fivewin Brasil

Rogerio Figueira

Membros
  • Posts

    180
  • Joined

  • Last visited

  • Days Won

    16

Posts posted by Rogerio Figueira

  1. Salve a todos!
    Eu completo 67 daqui a 2 meses, trabalho nessa área desde 1990, nunca fui empregado, preferi ganhar menos mas ser independente.
    Ainda nem penso em parar.
    Em 1998 vim para o interior, morar num sítio, no começo foi pauleira tinha que ir em Sampa vários dias por semana, depois com o avanço da internet fui deixando de ir.
    Hoje faço todo atendimento via whatsapp a internet está bem distribuida no BR.
    Ano passado viajei por 4 meses por boa parte do BR, trabalhando on-line, eu minha esposa e duas cachorrinhas.
    Aposentar para que ? Esta atividade eu gosto, mantenho os neurônios em dia.
    Atualmente estou convertendo um sistema para PHP para rodar na web, o banco de dados já é MariaDB, então me sinto motivado a continuar trabalhando.
    Meu projeto para os próximos anos, terminar um carro mais apropriado, instalar uma StarLink e viajar mais, trabalhando todo dia um pouco.
    Saludos!
     

    Dscn0340a.jpg

  2. Boa tarde

    Uso uma dica que foi postada aqui no fórum faz tempo, o sndmail.dll
    Mas não uso contas de gmail como origem, crio contas para os usuários em nosso servidor num domínio próprio para isso.
    Gmail é zica.

  3. 9 horas atrás, Breno disse:

    Grato Rogério. Pedi pro Kabiaba as classes da versão dele para decifrar o mistério. Mas de qualquer forma já resolveu meu problema urgente com o primeiro exemplo dele ( Com buttonbar). Mas se vc puder me mandar essas duas classes que funcionaram com vc, agradeceria.

    Abçs

    Breno, eu já não lembro mais qual era o bug da classe da versão em uso, mas teve comentários lá no fórum e eu passei a utilizar esta que funcionou e funciona até hoje. Tbm uso BUTTONBAR sem problemas.
    Segue a classe.

    COMBOBOX.PRG

  4. Boa tarde.
    O Pelles salva o .rc 
    O arquivo .res é criado automaticamente no processo de compilação.
    Uso um arquivo .mak  como o exemplo a seguir:
     

    # ---------------------------------------------------------------------------
    VERSION = BCB.01
    # ---------------------------------------------------------------------------
    !ifndef BCB
       BCB = $(MAKEDIR)\..
    !endif
    !ifndef BHC
       BHC = E:\xHarbour
    !endif
    !ifndef FWH
       FWH=E:\FWH
    !endif
    # ---------------------------------------------------------------------------
    PROJECT  = 3189001.EXE
    OBJFILES = 3189001.obj

     

    CFILES   = 3189001.c

    RESFILES = faz.RES

     

    RESDEPEN = $(RESFILES)
    LIBFILES = E:\FWH\lib\FiveHX.lib      \
               E:\FWH\lib\FiveHC.lib      \
               E:\xHarbour\lib\rtl.lib      \
               E:\xHarbour\lib\vm.lib       \
               E:\xHarbour\lib\gtgui.lib    \
               E:\xHarbour\lib\lang.lib     \
               E:\xHarbour\lib\macro.lib    \
               E:\xHarbour\lib\rdd.lib      \
               E:\xHarbour\lib\dbfntx.lib   \
               E:\xHarbour\lib\dbfcdx.lib   \
               E:\XHARBOUR\LIB\HBSIX.LIB    \
               E:\XHARBOUR\LIB\DBFFPT.LIB   \
               E:\XHARBOUR\LIB\PCREPOS.LIB  \
               E:\XHARBOUR13\LIB\DBFFPT.LIB   \
               E:\xHarbour\lib\common.lib   \
               E:\xHarbour\lib\pp.lib       \
               E:\BORLAND\bcc55\lib\cw32.lib        \
               E:\BORLAND\bcc55\lib\import32.lib    \
               E:\BORLAND\bcc55\lib\PSDK\odbc32.lib \
               E:\BORLAND\bcc55\lib\wininet.lib

    DEFFILE =
    # ---------------------------------------------------------------------------
    CFLAG1 =  -O2 $(CFLAGS) -d -L$(BHC)\lib\b32 -c -M
    CFLAG2 =  -I$(BHC)\include;$(FWH)\include;$(BCB)\include;$(BCB)\include\vcl
    PFLAGS =
    RFLAGS =
    LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(BHC)\lib;$(BHC)\lib\b32 -Gn -aa -Tpe -s
    IFLAGS =
    LINKER = ilink32
    # ---------------------------------------------------------------------------
    ALLOBJ = c0w32.obj $(OBJFILES)
    ALLRES = $(RESFILES)
    ALLLIB = $(LIBFILES)
    # ---------------------------------------------------------------------------
    .autodepend

    $(PROJECT): $(CFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE)
        $(BCB)\BIN\$(LINKER) @&&!
        $(LFLAGS) +
        $(ALLOBJ), +
        $(PROJECT),, +
        $(ALLLIB), +
        $(DEFFILE), +
        $(ALLRES)
    !

    .cpp.obj:
        $(BCB)\BIN\bcc32 $(CFLAG1) $(CFLAG2) -o$* $*

    .c.obj:
        $(BCB)\BIN\bcc32 -I$(BHC)\include $(CFLAG1) $(CFLAG2) -o$* $**

    .prg.c:
        $(BHC)\bin\harbour /m/n/a/q -I$(FWH)\include;$(BHC)\include -o$* $**

    .rc.res:
        $(BCB)\BIN\brcc32 -w32  $(RFLAGS) $<
    #-----------------------------------------------------------------------------

  5. Citar
    Citar

     

    Bom dia.
    Se você tem um painel cPanel, acesse MySQL remoto e entre o IP que você quer permitir o acesso ou %.%.%.%  para todos.

    Caso não tenha o cPanel, use um terminal para acessar e editar o arquivo my.cnf que pode estar em /etc/mysql/my.cnf ou
    /etc/my.cnf   ou /usr/local/etc/my.cnf

    Comente o comando bind-address  = 127.0.0.1  e adicione bind-address  = 0.0.0.0  para todos ou especifique um IP.

    []´s


     

     

  6. 20 horas atrás, Theotokos disse:

    boa tarde poderia explicar melhor sobre tDolphin, como usar o que instalar.... etc....

    Boa tarde.
    Se você tem o Fivewin atualizado, melhor seria usar o FWMaria nativo dele. Tem gente que já migrou do tDolphin para o FWMaria, dizem compensar.
    Eu ainda não fiz isso por motivo de custos, vou esperar passar a pandemia e os negócios melhorarem.

    Usar o tDolphin é simples, para mim a migração foi muito fácil.

    Você precisa baixar as libs e fazer uns testes . Depois disso mãos a obra.
    https://bitbucket.org/danielgarciagil/tdolphin/downloads/

    Na pasta samples tem vários exemplos.

    Qualquer dúvida, pode perguntar.

  7. Bom dia Edu.

    Eu não sei se existe vantagem em usar o SQLRDD. Eu fiz minha migração usando o tDolphin, estou contente com a solução mas agora existe uma opção melhor que é a solução nativa do FiveWin nas últimas versões.

    No caso dos pedidos: pode continuar usando dbf local e depois salvar a partir dele no SqL, mas pode ser diferente:
    Eu faço assim: quando salva o pedido, já cria o registro no SQL e depois vai inserindo os itens do pedido direto no sql a cada inclusão de item.
    Uso matrizes para guardar os dados de cada item. Quando o usuário clica Salvar o item, o sistema monta o comando SQL a partir dos valores da matriz.
    No caso, existe uma tabela para os dados gerais do pedido e uma tabela com todos os itens de todos os pedidos.
    Exemplo parcial:

            cQry := 'INSERT INTO `itpedi` SET '
            cQry += 'codite = "'+ xi+'",'
            cQry += 'codped = "'+ matriz[1]+'",'
            cQry += 'codped_id = "'+ alltrim(str(matriz[45]))+'",'
            cQry += 'produt_id = "'+ alltrim(str(matriz[43]))+'",'
            cQry += 'fornec_id = "'+ alltrim(str(matriz[44]))+'",'        
            cQry += 'qtd_ped = "'+ alltrim(str(matriz[2]))+'",'
            cQry += 'qtd_ent = "'+ alltrim(str(matriz[18]))+'",'
            cQry += 'aentre = "'+ alltrim(str(matriz[19]))+'",'
            cQry += 'codpro = "'+ matriz[3]+'",'
            cQry += 'codfor = "'+ matriz[6]+'",'
            cQry += 'preco_unit = "'+ alltrim(str(matriz[4]))+'",'
            cQry += 'preco_tot = "'+ alltrim(str(matriz[8]))+'",'
            cQry += 'status = "'+ matriz[5]+'",'
            cQry += 'pdesc = "'+ alltrim(str(matriz[9]))+'"'

            sysrefresh()
            oQry2   := oServer:sqlQuery( cQry)
            sysrefresh()


    []´s

     

  8. Olá Edu,

    Eu já fiz alguns estudos de implantação de coletores para clientes, mas meus clientes são tão miseráveis que nunca quiseram investir em coletores, que são caros.
    O que eu vi sobre eles, é que geram um arquivo TXT delimitado. A sua aplicação só precisa ler esse TXT e processar conforme a necessidade.
    É bem simples a implantação. Veja com seu cliente se ele já tem o coletor e veja com o fornecedor como é a geração dos dados.
    []´s

  9. Pessoal,
    eu uso faz tempo o Pelles 8.00.
    Tem funcionado bem, exceto por dois pequenos problemas que não consegui resolver até agora .

    Se em algum diálogo eu tiver uma pergunta com ?  quando salvo pelo Pelles ele acrescenta uma barra invertida \ , ficando então \?  que gera erro na compilação.
    11: Invalid escape sequence
    O que tenho feito é abrir o arquivo .rc  e substituir os \?  por ? , mas tenho que fazer sempre que salvo algo no Pelles.

    Outro erro:
    Tenho este diálogo para o uso do calendário auxiliar:

    CALENDAR DIALOGEX DISCARDABLE 6, 18, 138, 122
    STYLE DS_SHELLFONT|WS_POPUP|DS_3DLOOK|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
    FONT 9, "Arial"
    {
      CONTROL "", 2001, "SysMonthCal32", WS_TABSTOP, 4, 4, 132, 100
      CONTROL "OK", 103, "Button", WS_TABSTOP, 51, 104, 35, 14
    }

    Sempre que salvo o arquivo .rc com o Pelles ele altera esse diálogo alterando a linha

    FONT 9, "Arial", 0, 0, 1

    e então na compilação é gerado o erro  24: Expecting BEGIN

    Nesse caso também tenho que editar o código  e remover o  , 0, 0, 1

    Pergunto aos colegas:  alguém já passou por isso usando o Pelles?  Tem alguma idéia do motivo dessas substituições e como resolver?

    []´s

     

  10. Desde o velho Clipper (RIP)  como constava no manual,  o uso de variáveis definidas como matrizes consome menos memória.
    Então eu sempre que possível uso matrizes para todas as variáveis.
    Também facilita bastante a programação.

     

    IF oQry:nRecCount >0
        cmatriz[10] := oQry:cheques
        cmatriz[11] := oQry:autcartao1
        cmatriz[12] := oQry:valorcartao1
        cmatriz[13] := oQry:venc_cartao1
        cmatriz[14] := oQry:autcartao2
        cmatriz[15] := oQry:valorcartao2
        cmatriz[16] := oQry:venc_cartao2
        cmatriz[17] := oQry:autdebito
        cmatriz[18] := oQry:valordebito
        cmatriz[19] := oQry:dinheiro
        cmatriz[20] := oQry:data
        
        for xx=10 to 20
            ocmatriz[xx]:refresh()
        
        next

    END

    []´s

     

  11. Augusto,

    Sabendo de problemas que podem ocorrer pelo uso de aspas simples ou duplas no conteúdo de campos, eu adotei uma solução radical.
    Sempre antes de qualquer INSERT ou UPDATE, eu limpo o conteúdo digitado pelo cliente, assim:

    cQry += 'endereco = "'+ ClearChar(cmatriz[4], {"'",'"'} )+'",'

     

    Function ClearChar(cString,aChar)
       Aeval(aChar, {|cChar| cString:=StrTran(cString,cChar,"")})
    Return(cString)

    []´s

  12. Bom dia Luiz,

    O que faço é o seguinte:
    Quando é gerado um error.log o programa sempre aborta.
    Então tenho uma rotina que na inicialização do programa, ele verifica se existe um arquivo error.log . Existindo o arquivo é enviado por e-mail para mim, para uma conta exclusiva para receber os erros. Em seguida o error.log é excluido.
    Isso ajuda na correção de erros, no suporte e no pega-pirata.

    Sds.

  13. Como o Marcio falou acima, no seu caso o Terminal Server seria a solução imediata.
    É a solução que tenho recomendado aos clientes que querem continuar com o sistema antigo.
    Funciona bem,  inclusive permite rodar nossos aplicativos em tablets Android.:D

    Mas a solução definitiva é mudares para SQL.  Parece um bixo complicado, mas assim que começares vais ver que é muiiiiito mais fácil de trabalhar com SQL do que com DBFs.

  14. Aguiar, faz tempo que não lido com isso. O último ajuste foi em 2015, estava funcionando ao menos até 2017.
    Segue o código que tenho aqui:
     

    //*----------------------------------------------------------------------------*
    //
    // M., Ronaldo: Boleto Bancario em Harbour
    //
    // Method Banco_033() Class MR_Boleto
    //
    //*----------------------------------------------------------------------------*
    Method Banco_033() Class MR_Boleto
    
       ::Banco_Dv_____ := "7"
       ::Banco_Nome___ := "Banco Santander"
    
       IF EMPTY( ::Prefixo______ )
          ::Prefixo______ := ::Conta________
          ::Conta________ := ''
          ::Prefixo_DV___ := ::Conta_DV_____
          ::Conta_DV_____ := ''
       ENDIF
    
       ::Prefixo______ := PADL( ALLTRIM( Left( ::Prefixo______,  6 ) ),  6, '0' )
       ::Prefixo_DV___ := PADL( ALLTRIM( Left( ::Prefixo_DV___,  1 ) ),  1, '0' )
    
       ::NossoNumero__ := PADL( ALLTRIM( Left( ::NossoNumero__, 12 ) ), 12, '0' )
       ::NossoNumer_DV := ::DC_Mod11( ::Banco________, 9, .F., ::NossoNumero__, .F. )
    
       digNossoNumero := ::DC_Mod11( ::Banco________, 9, .F., ::NossoNumero__, .F. )
    
       ::NossoNumero_z := ::NossoNumero__ + " " + ::NossoNumer_DV
    
       ::Ag_Cod_Cedent := TRAN( ::Banco_Agencia + '/' + ::Prefixo______ + '-' + ::Prefixo_DV___, "@!")
    
       ::Campo_Livre__ := '9' + ::Prefixo______ + ::Prefixo_DV___ + ::NossoNumero__ +  + ::NossoNumer_DV  + '0'+ ::Carteira_____
    
       Return NIL
    

     

    Sds.

  15. Edu,
    provavelmente o e-mail vai formatado em html.
    Nesse caso, basta inserir a imagem relativa ao endereço onde ela está no dominio/site do cliente.

    Se o cliente não tem dominio/site, crie uma pasta no seu próprio dominio para armazenar os logos dos clientes, que é o que eu faço.

    No caso o comando a ser usado no corpo da msg seria este:
    <IMG SRC="'+logo+'" ALT="Logotipo"   BORDER=0>
    no caso, logo carrega o endereço do logo do cliente, p. ex.
    logo := "http://servidor.net/pasta/logo.jpg"

    []´s

  16. Pessoal, quero agradecer a colaboração de todos e postar aqui a solução baseada na dica do Rochinha e outra que descobri na documentação do MySQL.

    Desta forma eu pego o IP do cliente da última conexão ao banco MySQL, isto é, conecto ao banco de dados e logo a seguir executo esta verificação:

       TRY
          CONNECT bServer HOST alltrim(host) ;
                          USER alltrim(usuario) ;
                          PASSWORD alltrim(senha) ;
                          PORT nPort ;
                          FLAGS nFlags;
                          DATABASE "information_schema"                               
       CATCH oErr     
        MsgInfo( oErr:Description )

         RETURN NIL
       END
       oQry:= bServer:Query("SELECT host FROM information_schema.processlist  WHERE ID = connection_id( ) LIMIT 0 , 10")  
       userIP := oQry:host

    bServer:end()

    //=========================================
    Aqui usando a dica do Rochinha a partir do código do PINGA:


    #include "dll.ch"

    static xdll


    CLASS TdWebService

      DATA hOpen

      DATA sbuffer HIDDEN

      DATA xDLL HIDDEN

      METHOD New(buffersize) CONSTRUCTOR

      METHOD OpenWS(url)

      METHOD End()

    ENDCLASS


    METHOD New(conexion,buffersize) CLASS TdWebService

     DEFAULT buffersize:=64000

     ::sbuffer:=buffersize

     xDll:=LoadLib32("wininet.dll")

     ::hOpen = InternetOpen("TdWebService", 1,,, 0)

     RETURN Self


    METHOD OpenWS(url) CLASS TdWebService

     local hFile,ret,xml

     hFile = InternetOpenUrl(::hOpen, url,"",0,,0)

     xml:=space(::sbuffer)

     InternetReadFile(hFile, @xml, ::sbuffer, @Ret)

     return alltrim(xml)

     //return subst(alltrim(xml),1,len(alltrim(xml))-5)


    METHOD End() CLASS TdWebService

     FreeLib32(xDll)

     return nil
     
     
     Dll32 FUNCTION InternetOpenUrl(hInternetSession As 7, lpszUrl As 8, lpszHeaders As 8, dwHeadersLength As 7, dwFlags As 7, dwContext As 7) As 7 FROM "InternetOpenUrlA" PASCAL Lib xDll
     
     Dll32 FUNCTION InternetReadFile(hFile As 7, @sBuffer As 8, lNumBytesToRead As 7, @lNumberOfBytesRead As 7) As 7 PASCAL Lib xDll

    //==========================

    function getIPExtern( _site_ )

     local _IPExtern_

     ws:=TdWebService():new()

     _IPExtern_ := ws:OpenWS(_site_)

     ws:end()

    msginfo(_IPExtern_)
     return
     
     //===========================
     
      getIPExtern("http://representantes.info/meuip.php")

    //=========================
    Conforme a dica do Sistem acima,  o código do arquivo meuip.php  é este:
    <?php $ip = getenv("REMOTE_ADDR");echo "$ip" ?>

    //=============================

    Sds.

     

     

     

     

     

     

×
×
  • Create New...