Jump to content
Fivewin Brasil

ram_bh

Membros
  • Posts

    285
  • Joined

  • Last visited

  • Days Won

    5

Posts posted by ram_bh

  1. Márcio,

    /*-----------------------------------------------------------*/

    // Copiar e Recuperar arquivos

    /*-----------------------------------------------------------*/

    #include "FiveWin.ch"

    #include "Directry.ch"

    Function Copiar()

    Local cFile, aFile := {}, aFileBkp := {}

    DBCloseAll()

    If ! MsgNoYes( "Os arquivos serão compactados e em seguida será realizada a cópia de segurança." + CRLF+CRLF+;

    "Se outra cópia de segurança já tiver sido realizada neste mesmo dia, os arquivos serão substituídos. Confirma?", "Copiar arquivos")

    If ! Abrir_DBF(cUniSer + cDirBas + "\TB_SETOR.DBF","SETOR",.t.,"DBFCDX")

    DBCloseAll()

    Return(.f.)

    EndIf

    If ! Abrir_DBF(cUniSer + cDirBas + "\TB_MATER.DBF","MATER",.t.,"DBFCDX")

    DBCloseAll()

    Return(.f.)

    EndIf

    If ! Abrir_DBF(cUniSer + cDirBas + "\TB_FORNE.DBF","FORNE",.t.,"DBFCDX")

    DBCloseAll()

    Return(.f.)

    EndIf

    Return(Nil)

    EndIf

    // dados

    aFile := Directory(cUniSer + cDirBas + '\*.DBF')

    AEval(aFile,{|a|AAdd(aFileBkp,cUniSer + cDirBas + '\'+a[F_NAME])})

    // imagens

    aFile := Directory(cUniSer + cDirImg + '\*.BMP')

    AEval(aFile,{|a|AAdd(aFileBkp,cUniSer + cDirImg + '\'+a[F_NAME])})

    aFile := Directory(cUniSer + cDirImg + '\*.ICO')

    AEval(aFile,{|a|AAdd(aFileBkp,cUniSer + cDirImg + '\'+a[F_NAME])})

    // executavel

    aFile := Directory(cUniSer + cDirApl + '\*.EXE')

    AEval(aFile,{|a|AAdd(aFileBkp,cUniSer + cDirApl + '\'+a[F_NAME])})

    aFile := Directory(cUniSer + cDirApl + '\*.DLL')

    AEval(aFile,{|a|AAdd(aFileBkp,cUniSer + cDirApl + '\'+a[F_NAME])})

    // ini

    aFile := Directory(GetWinDir()+'\MATERIAL.INI')

    AEval(aFile,{|a|AAdd(aFileBkp,GetWinDir()+a[F_NAME])})

    cFile := cGetFile('Bkp_'+DTOS(Date())+'.Zip',"Escolha uma pasta para gravar a cópia de segurança",,cUniSer+cDirBkp+'\',.t.,.t.,,)

    If Empty(AllTrim(cFile))

    If ! Abrir_DBF(cUniSer + cDirBas + "\TB_SETOR.DBF","SETOR",.t.,"DBFCDX")

    DBCloseAll()

    Return(.f.)

    EndIf

    If ! Abrir_DBF(cUniSer + cDirBas + "\TB_MATER.DBF","MATER",.t.,"DBFCDX")

    DBCloseAll()

    Return(.f.)

    EndIf

    If ! Abrir_DBF(cUniSer + cDirBas + "\TB_FORNE.DBF","FORNE",.t.,"DBFCDX")

    DBCloseAll()

    Return(.f.)

    EndIf

    Return(Nil)

    EndIf

    Compactar(cFile,aFileBkp)

    If ! Abrir_DBF(cUniSer + cDirBas + "\TB_SETOR.DBF","SETOR",.t.,"DBFCDX")

    DBCloseAll()

    Return(.f.)

    EndIf

    If ! Abrir_DBF(cUniSer + cDirBas + "\TB_MATER.DBF","MATER",.t.,"DBFCDX")

    DBCloseAll()

    Return(.f.)

    EndIf

    If ! Abrir_DBF(cUniSer + cDirBas + "\TB_FORNE.DBF","FORNE",.t.,"DBFCDX")

    DBCloseAll()

    Return(.f.)

    EndIf

    Return(Nil)

    /*-----------------------------------------------------------*/

    Function Compactar(cFile,aFile)

    Local oDlg, oMeter, oText, cMsg, nLen, lVal, nActual := 0

    nLen := Len(aFile)

    DEFINE DIALOG oDlg FROM 01,01 TO 10,60 TITLE "Compactando arquivos..."

    @ 0.5,02 SAY oText VAR cMsg SIZE 180,020 OF oDlg

    @ 2.0,02 METER oMeter VAR nActual TOTAL 100 OF oDlg SIZE 200,020

    oDlg:bStart := {||lVal:=Hb_ZIPFILE(cFile, aFile, 9,{|cFile,nPos|oText:SetText('Compactando '+cFile),;

    nActual:=nPos/nLen*100,oMeter:Set(nActual)},.t.,Nil,.t. ),;

    IF(lVal,MsgInfo('Compactação completada com sucesso!'+CRLF+CRLF+;

    'Arquivo compactado '+cFile,'Compactação de Arquivos'),;

    MsgStop('Cópia de Segurança não pode ser realizada!','Erro')),;

    oDlg:END()}

    ACTIVATE DIALOG oDlg CENTERED

    Return(lVal)

    /*-----------------------------------------------------------*/

    Function Recuperar()

    Local cFile, aFile := {}, nFile := 0, aFDBF := {}, aFBMP := {}, aFICO := {}, aFDLL := {}

    If AllTrim(cUsuario) # "SUPORTE"

    MsgInfo( "Esta funcionalidade só deve ser executada pelo Suporte, porque os arquivos atuais serão substituídos pelos arquivos recuperados da cópia de segurança." + CRLF+CRLF +;

    "Certifique-se da real necessidade desta operação e procure o Suporte sempre em caso de dúvidas.","Aviso")

    Return(Nil)

    EndIf

    cFile := cGetFile('Bkp_*.Zip',"Escolha o arquivo da cópia de segurança a ser recuperado",,cUniSer+cDirBkp+'\',.f.,.t.,,)

    If Empty(AllTrim(cFile))

    Return(Nil)

    EndIf

    If ! MsgNoYes( "Serão recuperados somente os arquivos de Dados, de Imagens e DLL." + CRLF+CRLF +;

    "Os arquivos atuais serão substituídos pelos arquivos recuperados da cópia de segurança:" + CRLF+CRLF +;

    "[ " + cFile + " ]" + CRLF+CRLF +;

    "Certifique-se da real necessidade desta operação antes de prosseguir." + CRLF+CRLF +;

    "Confirma?","Atenção" )

    MsgInfo("Recuperação de arquivos cancelada!","Aviso")

    Return(Nil)

    EndIf

    aFile := Hb_GetFilesInZip(cFile)

    For nFile = 1 To Len(aFile)

    If Right(aFile[nFile],3) = "DBF"

    AAdd( aFDBF, aFile[nFile] )

    ElseIf Right(aFile[nFile],3) = "BMP"

    AAdd( aFBMP, aFile[nFile] )

    ElseIf Right(aFile[nFile],3) = "ICO"

    AAdd( aFICO, aFile[nFile] )

    ElseIf Right(aFile[nFile],3) = "DLL"

    AAdd( aFDLL, aFile[nFile] )

    EndIf

    Next

    Descompactar(cFile,aFDBF,"Dados")

    Descompactar(cFile,aFBMP,"Imagens BMP")

    Descompactar(cFile,aFICO,"Imagens ICO")

    Descompactar(cFile,aFDLL,"DLL")

    MsgRun("Organizando arquivos de Dados recuperados...","Aguarde",{||Tabelas(cUniSer,cDirBas,.t.)})

    Return(Nil)

    /*-----------------------------------------------------------*/

    Function Descompactar(cFile,aFile,cTipo)

    Local oDlg, nFile := 0, oText, cMsg, oMeter, nActual := 0

    nFile := Len(aFile)

    DEFINE DIALOG oDlg FROM 01,01 TO 10,60 TITLE "Recuperando arquivos de "+cTipo+" da cópia de segurança..."

    @ 0.5,02 SAY oText VAR cMsg SIZE 180, 20 OF oDlg

    @ 2.0,02 METER oMeter VAR nActual TOTAL 100 OF oDlg SIZE 200, 20

    oDlg:bStart := {||lVal:=Hb_UnZipFile(cFile,{|cFile,nPos|oText:SetText('Descompactando...'+CRLF+cFile),;

    nActual:=nPos/nFile*100,oMeter:Set(nActual)},.t.,,cUniSer+'\',aFile ),;

    IF(lVal,MsgInfo('Recuperação dos arquivos de '+cTipo+' completada com sucesso'+CRLF+CRLF,'Recuperação'),;

    MsgStop('Arquivos de '+cTipo+' não podem ser recuperados',"Atenção")),;

    oDlg:END()}

    ACTIVATE DIALOG oDlg CENTERED

    Return(Nil)

    /*-----------------------------------------------------------*/

    // fim

  2. Márcio,

    Eu fiz uma rotina que zipa as pastas (e arquivos) usadas pela aplicação (dados, imagens, etc...) e grava em um destino a escolha do usuário.

    Mas, por motivo de segurança, não permiti que o usuário recupere todas as pastas zipadas...

    Não sei como anexar o código aqui... Alguém pode ajudar!?

    Se quiser, posso enviar por e-mail para você.

    Rodrigo Melo

    Belo Horizonte / MG

  3. Bom dia!

    Alguém usa Firebird como SGBD? Pergunto por ser o Firebird um sistema menos exigente de recursos do que MySQL, MariaDB, OracleExpress e outros...

    Penso em migrar um sistema de administração de condomínios que ainda utilizada DBF. As tabelas já estão "gordinhas"...

    Qual a opinião de vocês?

    Obrigado!

    Rodrigo Melo

    Belo Horizonte / MG

  4. Tente usar a função KeySec():

    KeySec()

    Starts a timer to write a key code into the keyboard buffer.

    Syntax

    Keysec( <nKey> , ;
    <nTime> , ;
    [<nCounter>], ;
    [<lMode>] ) --> lSuccess

    Arguments <nKey> This is the numeric key code to write into the keyboard buffer. #define constants listed in the Inkey.ch file are used for <nKey>. <nTime> This is a numeric value specifying the time after which the character is written into the keyboard buffer. Positive values indicate the time in seconds, while negative values are interpreted as multiples of 1/18.2 seconds. <nCounter> This parameter specifies the number of times <nKey> should be placed into the keyboard buffer before the timer ends. The default value is 1. <lMode> This parameter defaults to .F. (false). When .T. (true) is passed, the timer is reset when a key is pressed. Return

    The function returns .T. (true) when the timer is successfully activated, otherwise .F. (false).

    Note: when the function is called without a parameter, the timer is deactivated.

  5. Pessoal, bom dia!

    Não funcionou da maneira como gostaria, mas... não desisti de encontrar uma solução. O que pretendo é, ao receber novo registro na lista do xbrowse a aplicação emite um alerta para o usuário e ativa a aplicação, se ela estiver fora de foco.

    Explicando melhor, o usuário está lendo as mensagens deste fórum e a aplicação está com um Timer verificando se existem novas mensagens na caixa de entrada do usuário. Ao receber uma nova mensagem, a aplicação é exibida em primeiro plano para que a mensagem seja apresentada ao usuário.

    Alguma sugestão? Obrigado!

    Rodrigo Melo

  6. Kapiaba, obrigado!

    Mas preciso dar foco na aplicação após a execução do Timer.

    Explicando melhor: depois de um período definido no Timer é executada uma função, se atendida uma determinada condição preciso colocar a aplicação em primeiro plano de execução, ou seja, se o usuário estiver em outro aplicativo preciso alternar para a aplicação.

    É possível!?

    Obrigado!

    Rodrigo Melo

    Belo Horizonte / MG

  7. O encontro foi muito bom mesmo.

    No meu caso, particularmente, que procurava uma solução para atualizar os "bons e velhos" aplicativos desenvolvidos em Clipper.

    Conheci o FW por amigos, mas não tinha ideia de quanto é utilizado.

    Como não atuo como empresa precisava de uma solução para converter os aplicativos desenvolvidos para amigos a mais de 15 anos. Não pretendo atuar como empresa, mas com certeza serei mais um colaborador do FW.

    E ainda, tive o prazer de conhecer pessoalmente algumas pessoas que me ajudaram no fórum a elucidar dúvidas. Sem mencionar na oportunidade de iniciar novas amizades.

    Aos organizadores e palestrantes, meus parabéns e agradecimentos.

    No mais, até o próximo encontro e um grande abraço a todos.

    PS: Com certeza o fórum não será mais o mesmo após o VII Congresso...

    Rodrigo Melo

    Belo Horizonte - MG

    FWH 9.12 / xHarbour 1.1.2 / BCC 5.5.1

    Editado por - ram_bh on 08/11/2010 15:43:32

  8. Marcos,

    Recomendo a você ao desembarcar no saguão do aeroporto contratar o taxi através das empresas credenciadas. O balcão é de fácil visualização. Tenho esses números, caso prefira fazer reserva.

    Taxi especial - COOPERTRAMO (31)3689-2040.

    Taxi comum - Cooperfins (31)3689-2113

    Taxi comum - Minas Táxi (31)3689-2349.

    Rodrigo Melo

    Belo Horizonte - MG

    FWH 9.12 / xHarbour 1.1.2 / BCC 5.5.1

  9. Para completar mais um pouco:

    Uma diferença importante entre os certificados A1 e A3 é a segurança.

    No tipo A3, o certificado é armazenado em um dispositivo (token ou smart-card) com segurança implementada para acesso ao certificado. O que permite a validade por 3 anos. Os programas não tem acesso diretamente ao certificado. O dispositivo de armazenamento implementa segurança e funciona como um driver entre a solicitação do programa e o certificado.

    No tipo A1, o certificado é um arquivo que pode ser copiado e armazenado em qualquer meio digital (disquete, pen-drive, etc). Por não ser arquivado em um meio com segurança de acesso implementada, a validade é só de um ano.

    Se existir um controle rígido de acesso ao local de armazenamento do certifficado tipo A1, sem problemas para o uso. Caso contrário, recomendo o A3.

    Espero ter ajudado.

    Rodrigo Melo

    Belo Horizonte - MG

    FWH 9.12 / xHarbour 1.1.2 / BCC 5.5.1

  10. Olás!

    É possível enviar e-mail através do comando Mail e relacionar os destinatários como CCO?

    DEFINE MAIL oMail SUBJECT "Cabeçalho da Mensagem" ;

    TEXT "Mensagem do e-mail" TO cDestino,cMail ;

    FROM USER RECEIPT

    ACTIVATE MAIL oMail

    No exemplo acima os destinatários são apresentados em PARA.

    Obrigado!

    Rodrigo Melo

    Belo Horizonte - MG

    FWH 9.12 / xHarbour 1.1.2 / BCC 5.5.1

  11. Olás!

    É possível enviar e-mail através do comando Mail e relacionar os destinatários como CCO?

    DEFINE MAIL oMail SUBJECT "Cabeçalho da Mensagem" ;

    TEXT "Mensagem do e-mail" TO cDestino,cMail ;

    FROM USER RECEIPT

    ACTIVATE MAIL oMail

    No exemplo acima os destinatários são apresentados em PARA.

    Obrigado!

    Rodrigo Melo

    Belo Horizonte - MG

    FWH 9.12 / xHarbour 1.1.2 / BCC 5.5.1

×
×
  • Create New...