Copiar con CopyFile y crear una BD con SQL

Cerrado
baldomero123 Mensajes enviados 9 Fecha de inscripción viernes, 25 de noviembre de 2011 Estatus Miembro Última intervención jueves, 26 de enero de 2012 - 26 ene 2012 a las 13:22
 baldomero - 27 ene 2012 a las 00:14
Hola,
Buenos días. A ver si sois tan amables de ayudarme en estos dos temas. Trabajo en VB 2010 en un ordenador personal.
A) Tengo una aplicación con la BD Access en C: y para seguridad quiero ponerle en Utilidades la posibilidad de copiarla a un disco duro externo K mediante CopyFile, con el código que sigue. He puesto en la parte superior del código
Option Explicit On
Imports System.Collections
Imports System.IO
Imports Scripting
El código es:

Dim origen, destino As String
txtOrigen.Text = "C:\Users\Mis documentos\bd4.mdb"
origen = txtOrigen.Text
txtDestino.Text = "K:\Informática\bd6.mdb"
destino = txtDestino.Text
Try
osf.CopyFile(origen, destino, True)
Catch oe As Exception
MsgBox(oe.Message, MsgBoxStyle.Critical)
End Try
Me da el error: Exception HRESULT 0X800A0046 CTL_E-PERMISSIONDENIED.
He buscado en la red y veo que este error se debe a que presuntamente intento escribir en donde no tengo permiso para ello. Pero soy Administrador y he revisado tanto archivos como carpetas de origen como de destino y las he puesto a "máxima libertad" para escribir en ellos y me sigue dando el error. ¿Qué puedo hacer?
B) Me gustaría también ir descargando la base de datos de registros de años anteriores que ya interesa sólo mantener en archivos "históricos", para ello debería mediante un SELECT crear una BD para registros "históricos" que los contuviera y después eliminarlos de la BD inicial. ¿Se puede esto hacer? Con otros IDE sí lo he hecho. Muchas gracias.


Consulta también:

2 respuestas

baldomero123 Mensajes enviados 9 Fecha de inscripción viernes, 25 de noviembre de 2011 Estatus Miembro Última intervención jueves, 26 de enero de 2012
26 ene 2012 a las 19:08
Ya he encontrado la solución a lo primero. El problema es que da error de "permiso denegado" si pongo en la orden de copia la opción de Bool True / False; si no la incluyo funciona perfectamente; para presentar esta opción he incluído una ventana que pregunta Sí / No. No obstante he añadido algunas otras modificaciones. Para quien sea tan ignorante como yo copio el código entero, que funciona.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
'Copia de la base de datos de C: a K:
Dim osf As Object
osf = CreateObject("Scripting.FileSystemObject")
Dim archivodeorigen, archivodedestino As String

Label1.Visible = True
Label2.Visible = True
txtOrigen.Visible = True

txtDestino.Visible = True
txtOrigen.Text = "C:\Users\Mis documentos\bd4.mdb"
archivodeorigen = txtOrigen.Text
txtDestino.Text = "K:\Informática\bd6.mdb"
archivodedestino = txtDestino.Text
If MsgBox("Se sobreescribirá el archivo de destino anterior. ¿Desea continuar?", 20, "Copia de la BD") = vbYes Then
Try
FileCopy(archivodeorigen, archivodedestino)
MsgBox(" Copia realizada ")
Catch oe As Exception
MsgBox(oe.Message, MsgBoxStyle.Critical)
End Try
End If
End Sub
0
Solucionada también la segunda cuestión.
0