Jump to content
Fivewin Brasil

emotta

Membros
  • Posts

    1,609
  • Joined

  • Last visited

  • Days Won

    88

Posts posted by emotta

  1. Elaptime já controla virada de dia, segue um exemplo simples pra fazer o que vc precisa (o exemplo abaixo só não vai funcionar se a pessoa ficar mais de 24 horas na mesa, se ficar até 23h 59m na mesa da certo)

     

    cHor1 := "23:50:00"
    cHor2 := "00:10:00"
     
    cDif := ElapTime(cHor1, cHor2)
    ? cDif  // vai retornar 00:20:00
     
    ? TimeToMin(cDif)
     
    Static Function TimeToMin(cTime)
    Local nHor := Val(SubStr(cTime, 01, 02))
    Local nMin := Val(SubStr(cTime, 04, 02))
    Local nSeg := Val(SubStr(cTime, 07, 02))
    Return (nHor * 60) + nMin + (nSeg / 60)
  2. o negócio e nem depender mais que outros façam o build, basta fazer um git clone do projeto xharbour e compilar você mesmo.

    outra sugestão é dar um fork no repositório do xharbour no github e ter o seu clone e eventualmente ir pareando com o oficial.

    eu sigo fazendo assim desde agosto, qdo o Ron disponibilizou tudo no github.

     

  3. coloque no inicio do seu fonte o ch de compatibilidade

     

    #include "hbcompact.ch"

     

    ou então, ao vez de colocar o include acima, cole as 2 linhas abaixo no inicio do seu fonte:

    #xtranslate hb_ReadIni([<x,...>])       => hb_iniReadStr(<x>)
    #xtranslate hb_WriteIni([<x,...>])      => hb_iniWriteStr(<x>)

  4. Marcio, esse tipo de situação se resolve com expressão regular.

    Infelizmente não vou conseguir te ajudar muito pois esse é um assunto que não domino, nas poucas vezes que precisei eu estudei o assunto, resolvi e como uso muito pouco acabo esquecendo como funciona de fato. Já usei pra validar email (por exemplo) e algumas outras coisas pontuais.

    Se quiser estudar o assunto pesquise sobre a função HB_RegExAll, ou pesquise sobre expressão regular, esse é um conceito que existe em todas as linguagens que programação.

     

    Veja tb o link abaixo no wikipedia explicando o que é:

    Expressão regular – Wikipédia, a enciclopédia livre (wikipedia.org)

     

  5. infelizmente não da pra eu pegar pra ver isso já que a mesma dificuldade que eu teria vc tb teria, que é pesquisar como colocar os parametros do CURL chamando direto para MSXML2.ServerXMLHTTP.6.0

    o máximo que consigo é realmente disponibilizar a função que fiz já a alguns anos, baseados em outros exemplos que não lembro agora, mas que uso em produção e perfeitamente funcional.

    Então a garantia q vc tem é q a função está funcionando perfeitamente, o seu desafio é entender como passar os parametros que hj vc tem usando CURL para o json.

     

     

  6. 6 horas atrás, kapiaba disse:

    Se for no PROGRAMA DE FOLHA DE PAGAMENTOS, salvo engano, isso é permitido. Pero, como faz 150 anos que não trabalho mais nesta área, não tenho certeza, agora NO PONTO ELETRÔNICO, NEM A PAU JUVENAL. abs.

    Abs.

     

    Regards, saludos.

    A questão nem é ser proibido. Quanto mais informações pessoais vc tem, mais responsabilidade vc tem, então o ideal é ter somente o que e necessário 

     

    Pra ponto não é necessário as informações que citei, tiramos outras tb, e deixamos de informação pessoal somente o que precisa. Essa regra vale pra todos os tipos de sistema em relação a lgpd.

    A regra é:  não precisa da informação, tira fora.

     

    Outro erro comum é pensar informações de empresa entram tb na lgpd. Lgpd é somente de pessoas 

  7. O que você precisa fazer é no seu contrato com o cliente especificar quais informações o seu sistema armazena. Feito isso o cliente (usuário do sistema) tem que tomar as medidas para pegar o consentimento de tais informações com os respectivos donos. Lembrando que LGPD é somente sobre dados de pessoas (nunca empresa).

    O correto é você fazer uma limpa em seu sistema e retirar campos que não sejam necessários. Vou te dar um exemplo meu: Tínhamos no cadastro de funcionários os campos Nome do Pai e Nome da Mãe. Como entendemos que esses campos não são necessários para fazer a gestão de ponto e frequência, nós retiramos os campos do cadastro.

    Alguns clientes reclamaram, explicamos o motivo que é pra segurança do próprio cliente, todos entenderam e aceitaram a retirada das informações.

    Qualquer dado que possa identificar uma pessoa deve ter cuidado dobrado no sistema (nome, cpf, rg, email, etc). E os dados que contem informações pessoais, como religião, opção sexual, etc, esses mais cuidado ainda.

    Mas na pratica tudo se resume ao que eu disse acima: Em contrato deixe claro ao cliente quais campos que identificam uma pessoa no sistema você tem em seu sistema. Se tiver duvida de como colocar isso em seu contrato, faça como o Kapiaba disse acima, procure um advogado pra reformular o seu contrato.

    abraços

     

     

  8. Function TestApi()
    Local aHeader := {}
    Local cLink := "https://api-hmg.lecupon.com/client/v2/businesses/123123/authorized_users"
    Local nStatus_code
     
    aadd(aHeader, {"X-ClientEmployee-Email", "seuemail@email.com"})
    aadd(aHeader, {"X-ClientEmployee-Token", "auth_token"})
    aadd(aHeader, {"accept", "application/json"})
     
    cResp := CallEndPoint("GET", cLink, "", aHeader, @nStatus_code)
     
    ? nStatus_code
    ? nStatus_code
     
    Return
     
    Static Function CallEndPoint(cMode, cLink, cJSon, aHeader, nStatus_code)
    Local cResp := ""
    Local nI
    Static oHTTP
     
    nStatus_code := 0
     
    If aHeader == NIL
            aHeader := {{"Content-Type","application/json" }}
    EndIf
     
    If oHTTP == nil
        oHTTP := CreateObject( "MSXML2.ServerXMLHTTP.6.0" )
        oHTTP:SetTimeouts(600000, 600000, 600000, 600000)
    EndIf
     
    oHTTP:Open( cMode, cLink, .F. )
     
    For nI := 1 to Len(aHeader)
            oHTTP:SetRequestHeader( aHeader[nI,1],aHeader[nI,2] )
    Next
    Try
        oHTTP:Send(cJson)
        while oHTTP:readyState # 4
            oHTTP:waitForResponse(1000)
            Inkey(.1)
        enddo
        nStatus_code := oHTTP:status
     
        cResp := oHTTP:responseText
    Catch
    End
    oHTTP:Abort()
     
    HB_GCALL()
     
    Return cResp
       
  9. Você está colocando um MSGINFO dentro de um BEGIN/END TRANSACTION, vc nunca deve fazer isso pois se acontece algum erro a mensagem será apresentada na tela e até o usuário dar ok a sua transação fica aberta e isso gera um lock no banco.

    Outro detalhe é que você deve fazer suas transações de forma que se der esse tipo de erro sejam repetidas por algumas vezes. É comum o banco de dados, por algum motivo, dar por exemplo deadlock e o correto é ser feito o rollback e ser enviado o mesmo comando e então o banco aceita.

    Se não sabe o que é deadlock sugiro pequisar no youtube sobre o assunto, basicamente ocorre quando uma conexão fica aguardando o unlock de outra conexão e essa outra fica aguardando o unlock da primeira conexão, ou seja, uma fica esperando a outra e o servidor do banco precisa escolher uma pra derrubar e priorizar a outra. Pesquise sobre o assunto.

    Eu não trabalho com MySql, mas o que disse acima são informações úteis para qualquer banco de dados que você trabalhe. O comportamento acima é de qualquer SGDB.

    Abraços

  10. Instale o visual Studio conforme escrito e o acesdk (esse pede pra alguém do fórum não estou com minha máquina)

    - instalar visual studio Community - https://visualstudio.microsoft.com/pt-br/downloads/
    - instalar apenas DESENVOLVIMENTO PARA DESKTOP COM C++

     

    Dps execute as instruções

     

    Importante fazer o clone do xharbour a partir da raiz do drive C: ficando c:\xharbour 

     

    Dps é só executar os comando que descrevi no final 

     

    Demora uns 10 minutos pra compilar a primeira vez, até parece q travou, mas não interrompa.

    Outra coisa é que eventualmente, ao compilar algumas libs da erro, é só dar enter e prosseguir.

     

    Os binários serão gerados dentro de c:\xharbour\bin\vc e tb em c:\xb\bin

     

    As libs estão tb em c:\xharbour\lib e na xhb tb, é só procurar SQL.lib em alguma dessas pastas 

     

    Depois de gerado esses binários, pra compilar é só direcionar pra esses paths e tudo será compilado 

     

     

  11. 6 minutos atrás, infosys2 disse:

    O Marcos gambeta adicionou ao seu repositório do hb++, e  dá pra ser compilado com o harbour 3.2 e 3.4, assim como também já removeu a dependência do bison pra compilar o mesmo, e disse que pretende remover a dependência de usar o xhb.hbp na compilação, o que seria ideal também.
    Está caminhando, em breve acredito que vai estar no repositório do harbour na pasta contrib.

     

    Baixe os fontes já corrigidos para  harbour  aqui neste link:


    https://github.com/marcosgambeta/sqlrddpp/tree/main

    fantástico !

  12. 1 hora atrás, infosys2 disse:

    Ja compilei com harbour   e bcc7    nao preciza nem mesmo do bison 

    show de bola, mas é estranho pois o sqlrdd precisa do BISON pra gerar o parse de comandos sql.

    vc conseguiu conectar no banco de dados e executar os comandos, por exemplo: :exec ou :execute ?

     

  13. Em 20/08/2023 at 18:59, infosys2 disse:

    coloca ai este arquivo sqly.h      para mim fazer um teste 

    Compilando   com  este esta linha de comando   aqui :  hbmk2 -xhb sqlrdd.hbp 

    
    Error E2209 sqllex.c 16: Unable to open include file 'sqly.h'
    Error E2147 sqllex.c 23: 'YYSTYPE' cannot start a parameter declaration
    Error E2147 sqllex.c 31: 'YYSTYPE' cannot start a parameter declaration
    Error E2147 sqllex.c 42: 'YYSTYPE' cannot start a parameter declaration
    Error E2451 sqllex.c 71: Undefined symbol 'ERRORVAL' in function sqlyylex
    Error E2451 sqllex.c 77: Undefined symbol 'ERRORVAL' in function sqlyylex
    Error E2451 sqllex.c 82: Undefined symbol 'ERRORVAL' in function sqlyylex
    Error E2288 sqllex.c 93: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 95: Undefined symbol 'ERRORVAL' in function sqlyylex
    Error E2451 sqllex.c 102: Undefined symbol 'INTEGERVAL' in function sqlyylex
    Error E2288 sqllex.c 107: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 109: Undefined symbol 'ERRORVAL' in function sqlyylex
    Error E2451 sqllex.c 116: Undefined symbol 'REALVAL' in function sqlyylex
    Error E2288 sqllex.c 142: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2288 sqllex.c 143: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 145: Undefined symbol 'STRINGVAL' in function sqlyylex
    Error E2451 sqllex.c 150: Undefined symbol 'ERRORVAL' in function sqlyylex
    Error E2288 sqllex.c 163: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2288 sqllex.c 164: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 166: Undefined symbol 'QUOTED_IDENT' in function sqlyylex
    Error E2451 sqllex.c 170: Undefined symbol 'ERRORVAL' in function sqlyylex
    Error E2288 sqllex.c 180: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2288 sqllex.c 181: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 183: Undefined symbol 'DATEVAL' in function sqlyylex
    Error E2451 sqllex.c 186: Undefined symbol 'ERRORVAL' in function sqlyylex
    Error E2451 sqllex.c 194: Undefined symbol 'BINDVAR' in function sqlyylex
    Error E2288 sqllex.c 201: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 203: Undefined symbol 'OPERATOR' in function sqlyylex
    Error E2288 sqllex.c 208: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 210: Undefined symbol 'OPERATOR' in function sqlyylex
    Error E2288 sqllex.c 215: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 217: Undefined symbol 'ASTERISK' in function sqlyylex
    Error E2288 sqllex.c 222: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 224: Undefined symbol 'OPERATOR' in function sqlyylex
    Error E2288 sqllex.c 234: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 236: Undefined symbol 'EQUALS' in function sqlyylex
    Error E2288 sqllex.c 243: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 245: Undefined symbol 'COMPARE' in function sqlyylex
    Error E2288 sqllex.c 247: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 249: Undefined symbol 'COMPARE' in function sqlyylex
    Error E2288 sqllex.c 256: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 258: Undefined symbol 'COMPARE' in function sqlyylex
    Error E2288 sqllex.c 262: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 264: Undefined symbol 'COMPARE' in function sqlyylex
    Error E2288 sqllex.c 266: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 268: Undefined symbol 'COMPARE' in function sqlyylex
    Error E2288 sqllex.c 275: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2451 sqllex.c 277: Undefined symbol 'COMPARE' in function sqlyylex
    Error E2451 sqllex.c 279: Undefined symbol 'NOT' in function sqlyylex
    Error E2288 sqllex.c 284: Pointer to structure required on left side of -> or ->* in function sqlyylex
    Error E2228 sqllex.c 284: Too many error or warning messages in function sqlyylex
    *** 51 errors in Compile ***
    hbmk2[sqlrdd]: Erro: Executando compilador C/C++. 2
    bcc32.exe -c -q -CP437 -d -O2 -OS -Ov -Oc -Oi -6  -tWM -w -Q -w-sig- -n.hbmk\win\bcc -Ic:\bcc7\Include -Ic:\bcc7\Include\dinkumware -Ic:\bcc7\Include\windows\crtl -Ic:\bcc7\Include\windows\rtl -Ic:\bcc7\Include\windows\sdk -IC:\harbour32\include -I.hbmk\win\bcc -I. sqlact.c sqllex.c

     

    não adianta eu mandar o meu, ele tem que gerar corretamente, quem gera o BISON. Mas ainda estou trabalhando pra conseguir compilar xharbour open source e sqlrdd de acordo com o repositório que o ron postou no git

     

    quando conseguir vou ver se consigo clarear um pouco esse trabalho de compilação que é bem complexo.

  14. só pra ficar registrado aqui e ajudar alguem que também estava com este problema.

    eu já tinha instalado o gnu BISON mas ele estava no meu drive C

    a compilação do projeto eu estava fazendo no drive G

    então só precisei copiar a pasta c:\GnuWin32 para g:\GnuWin32 de forma que o arquivo g:\GnuWin32\bin\bison.exe fosse encontrado pelo xBuildw e gerou o sqly.h

     

    agora estou com outros problemas que estou investigando

×
×
  • Create New...