ram_bh
-
Posts
285 -
Joined
-
Last visited
-
Days Won
5
Posts posted by ram_bh
-
-
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
-
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
-
Jackson, obrigado por responder.
Vou pesquisar o SQLite. O sistema tem poucos usuários, mas as tabelas tem muitos registros... E começo a ficar preocupado com a possibilidade de suporte para recuperar arquivos DBF danificados...
Um abraço!
Rodrigo Melo
Belo Horizonte / MG
-
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
-
Tente usar a função KeySec():
KeySec()Starts a timer to write a key code into the keyboard buffer.
SyntaxKeysec( <nKey> , ;
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
<nTime> , ;
[<nCounter>], ;
[<lMode>] ) --> lSuccessThe 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.
-
Olás!
Alguma função que permita exibir uma mensagem com imagem?
Tipo uma MsgInfo() com mensagem (texto) e imagem (BMP).
Obrigado!
Rodrigo Melo
Belo Horizonte / MG
-
Boa tarde!
Resolvido assim:
hWnd := FindWindow ( 0, oWnd:cTitle () )
ShowWindow ( hWnd, 9 )
Obrigado e um abraço a todos!
Rodrigo Melo
-
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
-
Resolvido com:
ShowWindow( oWnd, 1 )Obrigado!Rodrigo Melo -
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
-
-
Obrigado, RCA Sistemas!
-
Kapiaba, muito obrigado!
-
-
Leonardo, obrigado!
citação:
id=quote>id=quote>Para FiveWin mesmo não tem.
Tem um projeto no Google Code que é apenas um teste pelo que se pode ver.
http://code.google.com/p/fivedroid/
Leonardo Machado
Alvorada-RS
Hwgui + x[H]arbour
leonardodemachado@hotmail.com
Rodrigo Melo
Belo Horizonte - MG
FWH 9.12 / xHarbour 1.1.2 / BCC 5.5.1
-
Bom dia!
Faz tempo que não acesso o fórum e quero saber se é possÃvel desenvolver em FW para Android?
Obrigado e um abraço!
Rodrigo Melo
Belo Horizonte
-
Bom dia!
Faz tempo que não acesso o fórum e quero saber se é possÃvel desenvolver em FW para Android?
Obrigado e um abraço!
Rodrigo Melo
Belo Horizonte
-
Para as empresas de Belo Horizonte, postei um anúncio na seção Classificados.
Obrigado e um abraço!
Rodrigo Melo
Belo Horizonte - MG
FWH 9.12 / xHarbour 1.1.2 / BCC 5.5.1
-
Para as empresas de Belo Horizonte, postei um anúncio na seção Classificados.
Obrigado e um abraço!
Rodrigo Melo
Belo Horizonte - MG
FWH 9.12 / xHarbour 1.1.2 / BCC 5.5.1
-
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
-
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
-
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
-
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
-
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
Alguém tem LIB.EXE para 64 bits?
in Programação
Posted
Olás!
Estou precisando do programa LIB.EXE para 64 bits, alguém tem ou pode informar como obter?
Estou trabalhando com W7 em 64 bits e a versão do LIB.EXE que tem não funciona aqui...
Obrigado!
Rodrigo Melo
Belo Horizonte / MG