** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Tus Funciones Favoritas & Aportaciones & Artí­culos
  Mensajes nuevos Mensajes nuevos RSS - Transportar ficheros dentro de una MDB
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoTransportar ficheros dentro de una MDB

 Responder Responder
Autor
Mensaje
buho Ver desplegable
Administrador
Administrador
Avatar
Abuelo FELIZ

Unido: 10/Abril/2004
Localización: Valladolid
Estado: Sin conexión
Puntos: 11317
Enlace directo a este mensaje Tema: Transportar ficheros dentro de una MDB
    Enviado: 10/Agosto/2013 a las 08:17
Aquí van una serie de procedimientos para poder transportar ficheros (De cualquier tipo) dentro de una BD de Access para posteriomente ser volcados en disco duro.  Un procedimiento carga el fichero en la tabla (En un campo OLE) y el otro le vuelca a disco duro. Se muestran dos formas diferentes de hacerlo.

Va código:



Function CargaFicheroDAO_OLE( _
         ByVal StrFichero As String, _
         ByVal StrTabla As String, _
         ByVal StrCampo As String)
'**********************************************
'Esta primera funcion (DAO) lo que hace es cargar
'en el campo OLE de una tabla, cualquier fichero
'del disco duro. De esta forma podemos transportar cualquier
'fichero dentro de la MDB
'Recibe como parametros, Ruta+Nombrefichero a cargar
'Nombre de la tabla y campo donde queremos guardar el fichero.
'**********************************************
    Dim B() As Byte, _
        Rst As DAO.Recordset, _
        StrLongitud As Long, _
        Manejador As Long
    StrLongitud = FileLen(StrFichero)
    ReDim B(StrLongitud - 1)
    Open StrFichero For Binary Access Read As _
         #Manejador
    Get #Manejador, , B
    Close Manejador
    Set Rst = CurrentDb.OpenRecordset(StrTabla)
    With Rst
        .AddNew
        .Fields(StrCampo).AppendChunk B
        .Update
    End With
    Rst.Close
    Set Rst = Nothing
End Function

Function EscribeFicheroADisco_DAO( _
         ByVal NombreTabla As String, _
         ByVal NombreCampoTabla As String, _
         ByVal NOMBREfichero As String)
'**********************************************
'Esta segunda funcion (DAO) hace el proceso inverso. Descarga
'del campo OLE de una tabla, cualquier fichero y le guarda
'en el del disco duro.
'Recibe como parametros, Ruta+Nombrefichero a regenerar en disco duro
'Nombre de la tabla y campo donde está guardado el fichero.
'**********************************************
    Dim B() As Byte, _
        Rst As DAO.Recordset, _
        LongitudTotal As Long, _
        Manejador As Long
    Set Rst = CurrentDb.OpenRecordset(NombreTabla)
    With Rst
        LongitudTotal = .Fields(NombreCampoTabla).FieldSize
        ReDim B(LongitudTotal - 1)
        B = .Fields(NombreCampoTabla)
    End With
    Rst.Close
    Open NOMBREfichero For Binary Access Write As #Manejador
    Put #Manejador, , B
    Close #Manejador
End Function
 
De Bacterio (Ricardo):
 
 
'Y las dos siguientes funciones, hacen lo mismo que las dos
'primeras, pero con ADO+STREAM
'Las siguientes funciones necesitan
'Microsoft Activex Data Objects 2.X Library.
'Ojo X>=5 ya que el Objeto Stream se metió en ADO en versiones
'posteriores.
Function CargaFicheroADO_OLE(ByVal StrFichero As String, _
                             ByVal StrTabla As String, _
                             ByVal StrCampo As String)
'**********************************************
'Esta tercera funcion (ADO+STREAM) lo que hace es cargar
'en el campo OLE de una tabla, cualquier fichero
'del disco duro. De esta forma podemos transportar cualquier
'fichero dentro de la MDB
'Recibe como parametros, Ruta+Nombrefichero a cargar
'Nombre de la tabla y campo donde queremos guardar el fichero.
'Necesita Microsoft Activex Data Objects 2.X Library.
'Ojo X>=5 ya que el Objeto Stream se metió en ADO en versiones
'posteriores.
'**********************************************

    Dim ObjetoStream As Stream, _
        RstADO As ADODB.Recordset

    Set RstADO = New ADODB.Recordset
    With RstADO
        .ActiveConnection = CurrentProject.Connection
        .Source = StrTabla
        .CursorType = adOpenKeyset
        .LockType = adLockOptimistic
        .Open
    End With
    Set ObjetoStream = New Stream
    With ObjetoStream
        .Type = adTypeBinary
        .Open
        .LoadFromFile StrFichero
        RstADO.AddNew
        RstADO.Fields(StrCampo).Value = .Read
        RstADO.Update
        .Close
    End With
    Set ObjetoStream = Nothing
    RstADO.Close
    Set RstADO = Nothing
End Function
Function EscribeFicheroADisco_ADO(ByVal StrFichero As String, _
                                  ByVal StrTabla As String, _
                                  ByVal StrCampo As String)
'**********************************************
'Esta cuarta funcion (ADO+STREAM) hace el proceso inverso. Descarga
'del campo OLE de una tabla, cualquier fichero y le guarda
'en el del disco duro.
'Recibe como parametros, Ruta+Nombrefichero a regenerar en disco duro
'Nombre de la tabla y campo donde está guardado el fichero.
'Necesita Microsoft Activex Data Objects 2.X Library.
'Ojo X>=5 ya que el Objeto Stream se metió en ADO en versiones
'posteriores.
'**********************************************
    Dim RstADO As ADODB.Recordset, _
        ObjetoStream As Stream
    Set RstADO = New ADODB.Recordset
    With RstADO
        .ActiveConnection = CurrentProject.Connection
        .Source = StrTabla
        .CursorType = adOpenKeyset
        .LockType = adLockOptimistic
        .Open
    End With
    Set ObjetoStream = New Stream
    With ObjetoStream
        .Type = adTypeBinary
        .Open
        .Write RstADO.Fields(StrCampo).Value
        .SaveToFile StrFichero, adSaveCreateOverWrite
        .Close
    End With
    Set ObjetoStream = Nothing
    RstADO.Close
    Set RstADO = Nothing
End Function
 


Editado por buho - 10/Agosto/2013 a las 08:24
Expulsado de la cárcel por robar los barrotes
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable