Jump to content
Fivewin Brasil

emotta

Membros
  • Posts

    1,609
  • Joined

  • Last visited

  • Days Won

    88

Everything 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. Muito triste a noticia. Com seu forum ajudou a muitos ! Deixou um legado. Todo respeito ao Toledo. Que Deus conforte a familia.
  3. 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.
  4. tem algo errado nas suas libs, vc copiou algo de alguma outra versão? uso hb_sha256 a muitos anos, é default do xharbour, nem precisa ser o comercial.
  5. 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>)
  6. 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)
  7. o ASC no final? não acredito que seja pois apenas indica que quer a ordem ASCENDENTE. Mas Ascendente é o default, então não é necessário, mas pode ser que o SQLRDD inclua isso automaticamente, sem o controle do desenvolvedor. De qq maneira não creio que seja esse o erro.
  8. Legal Sempre que dá esse tipo de erro eu pego a queria e executo direto no banco de dados, no meu caso sql server.
  9. Se vc pegar essa query e rodar direto no Firebird, ela funciona? Aparentemente esse erro não é da linguagem.
  10. eu já postei a função, é essa acima CallEndPoint
  11. 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.
  12. 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
  13. 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
  14. 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
  15. 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
  16. emotta

    SQLRDD

    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
  17. emotta

    SQLRDD

    - clonar repositório - c:\git clone https://github.com/ronpinkas/xharbour.git - instalar visual studio Community - https://visualstudio.microsoft.com/pt-br/downloads/ - instalar apenas DESENVOLVIMENTO PARA DESKTOP COM C++ - compilar com comandos abaixo: cd c:\xharbour set XBUILD_VC8=YES set HB_DIR_ADS=c:\acesdk\acesdk make_vc all && cd c:\xharbour\xHarbourBuilder\xHarbour-Builder && xbldfull.bat -all
  18. Pelo que entendi você tem o executável em FWH e dentro dele abre páginas WEB, ou seja, vc tem um browser dentro do seu sistema. É isso mesmo?
  19. emotta

    SQLRDD

    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 ?
  20. emotta

    SQLRDD

    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.
  21. emotta

    SQLRDD

    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
  22. emotta

    SQLRDD

    mesma coisa pra mim. está dando falta do arquivo sqly.h se encontrar este arquivo poderemos compilar os demais
×
×
  • Create New...