BACKUP DE BANCO DE DADOS

DAVYS 04/01/2005 11:32:10
#58465
Ola pessoal tenho um pragraminha que tem um baco de dados MDB 7.0 feito pelo proprio VisData do vb, o banco de dados fica na seguinte pasta c:\cola\banco\banco.mdb existe uma pasta c:\cola\banco\backup gostaria de fazer uma rotina de copiar o arquivo para Banco.mdb para a pasta backup com uma barra dee status para saber o progresso da cópia e quando foi concluido o backup. vlw galera
USUARIO.EXCLUIDOS 04/01/2005 11:50:32
#58468
Resposta escolhida
Davys utilize o SHCopyfile, ele mostra a janela de cópia do windows explorer (das pastas voando uma na outra)

Em um módulo coloque o seguinte:

Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Long
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As String
End Type
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

Public Sub SHCopyFile(ByVal from_file As String, ByVal to_file As String)
Dim sh_op As SHFILEOPSTRUCT

With sh_op
.hWnd = 0
.wFunc = FO_COPY
.pFrom = from_file & vbNullChar & vbNullChar
.pTo = to_file & vbNullChar & vbNullChar
.fFlags = FOF_ALLOWUNDO
End With

SHFileOperation sh_op
End Sub


no botao ou qq outro lugar coloque o seguinte:

SHCopyFile "c:\cola\banco\banco.mdb", "c:\cola\banco\bancoBackup.mdb"
DAVYS 04/01/2005 11:59:09
#58472
esta dando erro tenho q selecionar alguma referencia?


erro


Cannot define a Public user-defined type whitin a private object module
USUARIO.EXCLUIDOS 04/01/2005 11:59:12
#58473
Oops!! no módulo faltou duas linhas segue o correto:

Em um módulo coloque o seguinte:

Private Const FO_COPY = &H2
Private Const FOF_ALLOWUNDO = &H40
Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Long
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As String
End Type
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

Public Sub SHCopyFile(ByVal from_file As String, ByVal to_file As String)
Dim sh_op As SHFILEOPSTRUCT

With sh_op
.hWnd = 0
.wFunc = FO_COPY
.pFrom = from_file & vbNullChar & vbNullChar
.pTo = to_file & vbNullChar & vbNullChar
.fFlags = FOF_ALLOWUNDO
End With

SHFileOperation sh_op
End Sub


no botao ou qq outro lugar coloque o seguinte:


SHCopyFile "c:\cola\banco\banco.mdb", "c:\cola\banco\bancoBackup.mdb"
msgbox "Backup concluído"


DAVYS 05/01/2005 09:44:26
#58703
continua a dar erro

esse parte do codigo fica grifada Type SHFILEOPSTRUCT


e aparece o erro

Compile error:

Cannot Define a Public User-dedfined type within a private object madule.
USUARIO.EXCLUIDOS 06/01/2005 10:20:43
#58952
Davys, coloque em um módulo q é melhor.
DAVYS 06/01/2005 11:54:44
#58973
pow pessoal vlw mesmo consegui fazendo com o modulo, mas so mais umma duvida, ficaria complicado eu salvar o arquivo até a 5 geração, tipow banco1.mdb banco2.mdb até o 5 quando chegar no 5 começa a apagar a primeira geração e algum jeito de armazenar a data q foi feito o backup?
DAVYS 07/01/2005 09:43:46
#59156
a tem outrta coisa quando eu mando ele copiar o arquivo como o arquivo ja existe ele aparece a tela do windows perguntando se ele deseja substituir o arquivo existente tem como eu forçar ele copiar sem perguntar isso
USUARIO.EXCLUIDOS 07/01/2005 10:23:31
#59169
Davys é o seguinte qto a colocar data no arquivo coloque assim:

SHCopyFile "c:\cola\banco\banco.mdb", "c:\cola\banco\bancoBackup" & day(date) & month(date) & year(date) & ".mdb"

o arquivo vai ser copiado asim: bancoBackup07012005.mdb

Qto a apagar arquivos anteriores entra aki q tem um exemplo legal de como fazer isso.
http://www.vbmania.com.br/vbmdetail.php?varID=1746

Qto a substituir: verifique se o aruivo já existe e se ele existir apague ele, e depois faça o backup.

Para verificar se o arquivo existe coloque a seguinte função num Módulo

Function FileExists(ByVal filename As String) As Integer
Dim Temp$

FileExists = True

On Error Resume Next

Temp$ = FileDateTime(filename)
Dim MB_OK
Select Case Err
Case 53, 76, 68
FileExists = False
Err = 0
Case Else
If Err <> 0 Then
MsgBox "Numero erro : " & Err & Chr$(10) & Chr$(13) & " " & Error, MB_OK, "Error"
End
End If
End Select
End Function


depois coloque o seguinte no form ou botão (sei lá qq lugar):

  If FileExists("c:\sml55.gif") = False Then
MsgBox "O arquivo não existe"
Else
MsgBox "O arquivo foi encontrado"
End If
DAVYS 20/01/2005 10:02:19
#61928
Cara Funcionou essa pra saber se o arquivo existe mais nao estou entendendo aquele link q vc me passou, de como deletar o Arquivo
USUARIO.EXCLUIDOS 20/01/2005 10:35:29
#61937
Davys,

O link de deletar o arquivo é para q vc possa apagar backups anteriore que vc tenha feito. Assim vc libera espaço.
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas