Jump to content
Fivewin Brasil

oribeiro

Membros
  • Posts

    1,291
  • Joined

  • Last visited

  • Days Won

    35

Everything posted by oribeiro

  1. Entendi. Muito obrigado pelos esclarecimentos. Vou estudar os comandos SQL e ir migrando aos poucos. Por ora está quase tudo funcionando com SQLRDD trabalhando com comandos DBFCDX.
  2. Voce está dizendo que não da para confiar no SQLRDD?
  3. Bom dia João, Obrigado pela sua disposição em ajudar. Eu encontrei o problema. O SQLRDD não encontra a chave se o valor passado não tiver com os brancos no final. Exemplo com campo PROD com 15 Caracteres gravado com [1234567890 ]: - Com DBFCDX se eu faço SEEK [1234567890] ele acha. - Com SQLRDD se o mesmo comando não encontra o produto, então eu preciso enviar SEEK [1234567890 ] com os espaços em branco no final. Existe algum SET de configuração que eu ajuste o SQLRDD para encontrar a chave assim como faço no DBFCDX?
  4. Pessoal, Recebi um erro numa rotina com SQLRDD que com DBFCDX funciona normal. O erro é: Descricao do erro.: Erro SQLRDD/1 Tentativa de gravar um registro em tabela vazia sem antes adicionar uma linha - RollBack executed.: CONTAS Sequencia de erros ================== Programa: SR_WORKAREA:RUNTI Linha: 1895 Programa: SR_WORKAREA:WRITE Linha: 2186 Programa: SR_WORKAREA:SQLGO Linha: 3354 Programa: SR_WORKAREA:SQLFL Linha: 4754 O trecho do programa é: Select(cPrg+"CONTAS") (cPrg+"CONTAS")->(DBSEEK( cDocto+"P"+DTOS(wDtVenc) )) IF (cPrg+"CONTAS")->(EOF()) .or.; (cPrg+"CONTAS")->CL_FO<>cCl_Fo OADbAppend() REPLACE NR_CT With GERANUMCONTA() REPLACE Tipo With "P" REPLACE DtMov With mmDate REPLACE HrMov With Time() REPLACE Banco With wBanco REPLACE TpDoc With TpDoc[2] REPLACE Docum With cDocto REPLACE DtDoc With wDtDoc REPLACE Cl_Fo With cCl_Fo REPLACE Nome With cNome REPLACE DtVenc With wDtVenc REPLACE VrDocum With wVrDocum REPLACE Obs With wObs REPLACE Ca_Nr With TCateg[2] REPLACE Nr_Nf With Right( cNF ,Len((cPrg+"CONTAS")->NR_NF)) DbCommit() ///// <<<<<==== O ERRO ACONTECE NESSA LINHA DbUnLock() ELSE MsgAlert("Não consegui criar a conta do vencimento "+DtoC(wDtVenc)+" porque já existe uma conta com as mesmas características.","Atenção: Verifique") ENDIF O erro acontece na linha do DBCOMMIT(). Alguém já passou por essa situação com o SQLRDD?
  5. Bom dia João Bosco, Obrigado por responder. Eu tentei usar em 2013 uma versão do Display mas não deu prova porque as minhas telas são MDIChield composta de três elementos: Folder dentro de Dialog dentro de Windows. Então a tela ficava uma bagunça. Se você puder, por favor, me passar a sua versão do Display() eu tentarei novamente. email: oscar.ribeiro@outlook.com Obrigado. Um abraço.
  6. Obrigado João, Acho que você está falando desse link: Eu tinha até participado desse assunto em 2013 mas não lembrava mais. Na época eu tentei usar essa solução mas deu problema em alguns controles. Eu uso Folder dentro de Dialog e tudo isso dentro de uma Window e eles não se ajustaram automaticamente. Mas, pelo visto não há outra solução ainda pois o tópico não evoluiu.
  7. Pessoal, existe alguma forma automática de aumentar as telas do sistema com monitores de alta resolução? Quando eu criei as telas do meu sistema com o WorkShop a resolução padrão dos monitores era 640x480, raramente alguém tinha um monitor 800x600. Agora, com as resoluções atuais, minhas telas ficam muito pequenas dentro do sistema. Porém ainda tenho clientes com monitores antigos e não posso força-los a mudar. Alguém já passou por isso? Obrigado.
  8. Obrigado. Gostei do resultado com essa dll.
  9. Achei as respostas nesse link: http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=16714 1ª) Tanto faz MEMORY ou TEMPORARY 2ª) Quando fecho o arquivo o indice temporário é apagado automaticamente, mas se eu quiser apagá-lo sem fechar o arquivo, basta usar OrdDestroy( "nome_do_arquico_temporario" ) Obrigado.
  10. Pessoal, Estou trocando os meus filtros demorados por INDEX ON... MEMORY / TEMPORARY mas tenho algumas dúvidas. 1ª) Qual é a diferença entre MEMORY e TEMPORARY ? 2ª) Em qual momento o sistema apagará o index termporário ? Tem algum comando em que eu forço que ele apague o arquivo e libere a memória ?
  11. O link com a dll não está mais ativo. Alguém, por favor, pode me enviar a DLL? oscar@oasysitu.com
  12. Como faço isso? por favor, me dá um exemplo.
  13. Dei uma melhorada na função. Execute assim para permitir que o usuário abandone a função caso não houver retorno do arquivo: MsgWait1( "Aguarde o retorno do arquvo"+cFile, "Aguarde o retorno", 30, .T., {||File( cFile )} ) Se o usuário não puder cancelar e deve esperar até o arquivo aparecer na pasta, então faça assim: MsgWait1( "Aguarde o retorno do arquvo"+cFile, "Aguarde o retorno", 30, .F., {||File( cFile )} ) A diferença está no quarto parâmetro .T. ou .F. O legal dessa função é que mostra para o usuário que o sistema não está travado. É o que eu queria fazer com o MSGRUN() Confira. ******************************************************************************************* Function MsgWait1( cCaption, cTitle, nSeconds, lBot, bAction ) // MsgWait com "botão" de sair e "função" -> Exemplo: MsgWait1("cCaption", "cTitle", 5, .T., {||File("xxx.txt")} ) // o code block deve retornar (.T.) ******************************************************************************************* LOCAL oDlg, oProg1, oSay, oBtn, bOk, nInicio:=0 cCaption := iif(ValType(cCaption)#"C", "Por favor, aguarde...", cCaption) // Mensagem para a janela cTitle := iif(ValType(cTitle )#"C", "(OASyS) Mensagem com espera programada.", cTitle ) // Título para a janela nSeconds := iif(ValType(nSeconds)#"N", 5, nSeconds) // Quantos segundos a janela ficará aberta lBot := iif(ValType(lBot )#"L", .F., lBot ) // O Botão de Fechar será liberado? Se informado um Code Block será será oculto. bAction := iif(ValType(bAction )#"B", "", bAction ) // Code Block a ser executado. Exemplos: {|| Funcao() } ou {|| File("ent.txt") } // A ação deve sempre retornar (.T.) no fim da execução PRIVATE n := 0 PRIVATE lBtn := .F. PRIVATE lAction := ValType(bAction)="B" PRIVATE lRet := iif(lAction, .F., .T.) DEFINE DIALOG oDlg SIZE 400,300 COLOR CLR_BLUE,CLR_HGRAY FONT oFontGet TITLE cTitle STYLE DS_MODALFRAME PIXEL @ 001,001 GROUP TO 109,199 FONT oFontSay TRANSPARENT PIXEL @ 110,001 GROUP TO 138,199 FONT oFontSay TRANSPARENT PIXEL @ 120,008 METER oProg1 VAR nInicio TOTAL nSeconds NOPERCENTAGE SIZE 145,011 PIXEL @ 120,159 BUTTON oBtn PROMPT "&Fechar" SIZE 35,12.5 ACTION lBtn:=.T. WHEN lBot PIXEL CANCEL @ 010,008 SAY oSay PROMPT cCaption SIZE 189,092 COLOR CLR_RED,CLR_HGRAY PIXEL oBtn:cToolTip:="Atenção: Se você fechar essa tela eu não vou conseguir executar a tarefa e algo pode sair errado." ACTIVATE DIALOG oDlg CENTER ON INIT oDlg:bStart:={|| Increase(oDlg, oProg1, nSeconds, bAction) } Return( lRet ) Static Function Increase(oDlg, oProg1, nSeconds, bAction) oDlg:Refresh() oProg1:Set(0) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds))+" segundos." SysRefresh() For n=0 To nSeconds oProg1:Set( n ) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds - n))+" segundos." if lAction // Se houver um code block a ser executado: if Eval( bAction ) // - Verifica se a tarefa foi executada. lRet := .T. Exit elseif lBtn .OR. n=nSeconds // - Recomeça a contagem caso não tenha executado a tarefa ainda.. if lBtn .AND. !MsgYesNo("Eu ainda não consegui terminar a tarefa que fui programado para executar, devo continuar até a conclusão?","(OASyS) Estou tentando executar uma tarefa importante.") Exit endif lBtn := .F. n := 0 oProg1:Set( n ) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds))+" segundos." endif endif if lBtn Exit endif WaitSeconds( 1 ) SysRefresh() Next oDlg:End() Return nil
  14. Você verificou se o arquivo já estava na pasta? Se ele já tiver lá, então o sistema não esperará. - Apague o arquivo, execute a função e só depois crie ele. cFile := "C:\TESTE\TESTE.TXT"
  15. Essa função ajuda o usuário a ver que o sistema está trabalhando, esperando o arquivo ser disponibilizado. Execute assim: cFile := "arquivo a ser encontrado" MsgWait1( "Aguarde o retorno do arquvo"+cFile, "Aguarde o retorno", 30, .F., {||File( cFile )} ) ******************************************************************************************* Function MsgWait1( cCaption, cTitle, nSeconds, lBot, bAction ) // MsgWait com "botão" de sair e "função" -> Exemplo: MsgWait1("cCaption", "cTitle", 5, .T., {||File("xxx.txt")} ) // o code block deve retornar (.T.) ******************************************************************************************* LOCAL oDlg, oProg1, oSay, oBtn, bOk, nInicio:=0 cCaption := iif(ValType(cCaption)#"C", "Por favor, aguarde...", cCaption) // Mensagem para a janela cTitle := iif(ValType(cTitle )#"C", "(OASyS) Mensagem com espera programada.", cTitle ) // Título para a janela nSeconds := iif(ValType(nSeconds)#"N", 5, nSeconds) // Quantos segundos a janela ficará aberta lBot := iif(ValType(lBot )#"L", .F., lBot ) // O Botão de Fechar será liberado? Se informado um Code Block será será oculto. bAction := iif(ValType(bAction )#"B", "", bAction ) // Code Block a ser executado. Exemplos: {|| Funcao() } ou {|| File("ent.txt") } // A ação deve sempre retornar (.T.) no fim da execução PRIVATE n := 0 PRIVATE lBtn := .F. PRIVATE lAction := ValType(bAction)="B" PRIVATE lRet := iif(lAction, .F., .T.) DEFINE DIALOG oDlg SIZE 400,300 COLOR CLR_BLUE,CLR_HGRAY FONT oFontGet TITLE cTitle STYLE DS_MODALFRAME PIXEL @ 001,001 GROUP TO 109,199 FONT oFontSay TRANSPARENT PIXEL @ 110,001 GROUP TO 138,199 FONT oFontSay TRANSPARENT PIXEL @ 120,008 METER oProg1 VAR nInicio TOTAL nSeconds NOPERCENTAGE SIZE 145,011 PIXEL @ 120,159 BUTTON oBtn PROMPT "&Fechar" SIZE 35,12.5 ACTION (lBtn:=.T., n:=nSeconds) WHEN lBot PIXEL CANCEL @ 010,008 SAY oSay PROMPT cCaption SIZE 189,092 COLOR CLR_RED,CLR_HGRAY PIXEL oBtn:cToolTip:="Atenção: Se você fechar essa tela eu não vou conseguir executar a tarefa e algo pode sair errado." ACTIVATE DIALOG oDlg CENTER ON INIT oDlg:bStart:={|| Increase(oDlg, oProg1, nSeconds, bAction) } Return( lRet ) Static Function Increase(oDlg, oProg1, nSeconds, bAction) oDlg:Refresh() For n=0 To nSeconds oProg1:Set( n ) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds - n))+" segundos." if lAction // Se houver um code block a ser executado: if Eval( bAction ) // - Verifica se a tarefa foi executada. lRet := .T. Exit elseif n=nSeconds // - Recomeça a contagem caso não tenha executado a tarefa ainda.. if lBtn .AND. !MsgYesNo("Eu ainda não consegui terminar a tarefa que fui programado para executar, devo continuar até a conclusão?","(OASyS) Estou tentando executar uma tarefa importante.") Exit endif lBtn := .F. n := 0 oProg1:Set( n ) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds))+" segundos." SysRefresh() endif endif WaitSeconds( 1 ) Next oDlg:End() Return nil
  16. Fiz uma função bem interessante para substituir o MsgWait que também dava a impressão de que o sistema estava travado. Será que dá para fazer algo parecido com o MsgRun? Eu ainda não consegui. Vejam: ******************************************************************************************* Function MsgWait1( cCaption, cTitle, nSeconds, lBot, bAction ) // MsgWait com "botão" de sair e "função" -> Exemplo: MsgWait1("cCaption", "cTitle", 5, .T., {||File("xxx.txt")} ) // o code block deve retornar (.T.) ******************************************************************************************* LOCAL oDlg, oProg1, oSay, oBtn, bOk, nInicio:=0 cCaption := iif(ValType(cCaption)#"C", "Por favor, aguarde...", cCaption) // Mensagem para a janela cTitle := iif(ValType(cTitle )#"C", "(OASyS) Mensagem com espera programada.", cTitle ) // Título para a janela nSeconds := iif(ValType(nSeconds)#"N", 5, nSeconds) // Quantos segundos a janela ficará aberta lBot := iif(ValType(lBot )#"L", .F., lBot ) // O Botão de Fechar será liberado? Se informado um Code Block será será oculto. bAction := iif(ValType(bAction )#"B", "", bAction ) // Code Block a ser executado. Exemplos: {|| Funcao() } ou {|| File("ent.txt") } // A ação deve sempre retornar (.T.) no fim da execução PRIVATE n := 0 PRIVATE lBtn := .F. PRIVATE lAction := ValType(bAction)="B" PRIVATE lRet := iif(lAction, .F., .T.) DEFINE DIALOG oDlg SIZE 400,300 COLOR CLR_BLUE,CLR_HGRAY FONT oFontGet TITLE cTitle STYLE DS_MODALFRAME PIXEL @ 001,001 GROUP TO 109,199 FONT oFontSay TRANSPARENT PIXEL @ 110,001 GROUP TO 138,199 FONT oFontSay TRANSPARENT PIXEL @ 120,008 METER oProg1 VAR nInicio TOTAL nSeconds NOPERCENTAGE SIZE 145,011 PIXEL @ 120,159 BUTTON oBtn PROMPT "&Fechar" SIZE 35,12.5 ACTION (lBtn:=.T., n:=nSeconds) WHEN lBot PIXEL CANCEL @ 010,008 SAY oSay PROMPT cCaption SIZE 189,092 COLOR CLR_RED,CLR_HGRAY PIXEL oBtn:cToolTip:="Atenção: Se você fechar essa tela eu não vou conseguir executar a tarefa e algo pode sair errado." ACTIVATE DIALOG oDlg CENTER ON INIT oDlg:bStart:={|| Increase(oDlg, oProg1, nSeconds, bAction) } Return( lRet ) Static Function Increase(oDlg, oProg1, nSeconds, bAction) oDlg:Refresh() For n=0 To nSeconds oProg1:Set( n ) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds - n))+" segundos." if lAction // Se houver um code block a ser executado: if Eval( bAction ) // - Verifica se a tarefa foi executada. lRet := .T. Exit elseif n=nSeconds // - Recomeça a contagem caso não tenha executado a tarefa ainda.. if lBtn .AND. !MsgYesNo("Eu ainda não consegui terminar a tarefa que fui programado para executar, devo continuar até a conclusão?","(OASyS) Estou tentando executar uma tarefa importante.") Exit endif lBtn := .F. n := 0 oProg1:Set( n ) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds))+" segundos." SysRefresh() endif endif WaitSeconds( 1 ) Next oDlg:End() Return nil
  17. João, Ficou muito legal a tela gradiente. Mas a sua função também congela a aplicação quando o usuário clica duas vezes sobre a mensagem ou sobre a Windows. Resolveria se essa função desse um sysrefresh() de tempos em tempos para mostrar que o sistema está vivo.
  18. Obrigado pela sugestão, mas não resolveu.Nem Nem antes do MsgRun, nem antes do lOkZip := SysRefresh() MsgRun("Atenção: O Sistema não travou! Essa rotina demorará por causa do tamanho do seu banco de dados. Aguarde até a conclusão.",,{ | oDlg | ; lOkZip := hb_ZipFile( cFolderTargetZip ,; // ZipFile (nome do zip) acFiles ,; // File to Compress, pode ser array HBL_ZIPLEVEL ,; // Nivel de compressão bOnZipFile ,; // Codeblock a executar enquanto comprime XBL_ZIPOVERWRITE ,; // Overwrite "12345" ,; // Password XBL_ZIPWITHPATH ,; // Armazena caminho (PATH) NIL ) }) // Codeblock para file progress
  19. Pessoal, Quando a tarefa demora muito para executar dentro do MSGRUN() se tem título, aparece no cabeçalho da "Aplicação não respondendo" se não tem e o usuário clica sobre a mensagem do MSGRUN ele congela a aplicação. Se o usuário esperar o code block do msgrun ir até o final volta tudo ao normal, mas antes disso, dá mesmo a impressão de que o sistema está travado. Existe algum outro MSGRUN que evite essa situação ou que mostre uma barra de execução ou algo que mostre ao cliente que o sistema não está travado?
  20. Obrigado Jackson Vou copiar o seu modelo e estudar como abrir a imagem no site com html ou php. Um abraço.
  21. Obrigado pelas orientações. Pelo que entendi, usando StrToHex() / HexToStr() é possível ler o conteúdo do campo diretamente para a memória, sem a necessidade de recriar a imagem no disco. Parece perfeito! Vou utilizar aqui. A instrução FW_ValtoSQL() faz o mesmo que esses comandos? Apenas uma dúvida, qual é o tipo do campo no banco que você criou? MediumBlob também ou é outro tipo?
  22. Pessoal, Eu passei a manhã toda estudando os tópicos do fórum relacionado a gravar imagem no MySql mas não consegui chegar num acordo. Eu tenho as imagens dos produtos em arquivos no disco e quero gravá-las dentro de um campo no banco de dados e depois recuperá-las novamente mas não estou conseguindo. 1) Qual é o tipo de campo que eu crio? LONGBLOB? 2) Como gravar os arquivos das imagens para o campo do banco? MemoRead( cImagem )? 3) Como recuperar a imagem do campo e mostrar numa tela do Fivewin? 4) Como recuperar a imagem do banco dentro de uma página web (html ou php) ? Está complicado! Risos
  23. oribeiro

    telegram

    É possível enviar SMS utilizando essa API da vivo? http://www.desenvolvedores.vivo.com.br/files/br-official-documents/SMS_REST_API_developers_Guide_bra.pdf
  24. oribeiro

    telegram

    Consegui enviar mensagem para o Chat_Id que eu criei. Estou tendo dificuldade para descobrir o Chat_Id dos meus contatos. Qual é o segredo?
×
×
  • Create New...