Access - Problema con Open binary access

 
Vista:

Problema con Open binary access

Publicado por Edwin Thomas (4 intervenciones) el 04/01/2006 00:15:09
Tengo una aplic. en access en la que en una tabla cargo los datos binarios de X archivo y los extraigo para guardarlos en otra ubicación. El problema es que al querer abrir el archivo el programa asociado (imagen, mdb, etc.) no lo abre pero el tamaño del archivo es el mismo. Cuando se trata de un archivo.txt lo abre el block de notas pero le agrega al texto del archivo algunos caracteres especiales. Como si corropiera los archivos que procesa.

Las dos funciones que ocupo son las siguintes:

Function Empaqueta()
Dim Rst As DAO.Recordset
On Error GoTo Etiqueta_Error
Set Rst = CurrentDb.OpenRecordset("TblFicherosAdjuntos")
While Rst.EOF = False
Dim CanalLibre As Long
Dim B() As Byte, StrLongitud&
CanalLibre = FreeFile
StrLongitud = FileLen(Rst("rutaficheroadjunto"))
ReDim B(StrLongitud - 1)
Open Rst("rutaficheroadjunto") For Binary Access Read As #CanalLibre
Get #CanalLibre, , B
Rst.Edit
Rst.Fields("CampoOleContenedor").AppendChunk B
Rst.Update
Close #CanalLibre
Rst.MoveNext
Wend
Rst.Close
Set Rst = Nothing

exit_EscribeDLLaTabla:
Set Rst = Nothing
Close
Exit Function
Etiqueta_Error:
Resume exit_EscribeDLLaTabla
End Function

Public Function EscribeInstaladorADisco(ByVal NombreTabla As String, ByVal NombreCampoTabla As String, ByVal NombreFichero As String) As Boolean
Dim B() As Byte, Rst As DAO.Recordset
Dim LongitudTotal&


On Error GoTo err_ControlError
Set Rst = CurrentDb.OpenRecordset(NombreTabla)
With Rst
If .RecordCount = 0 Then
GoTo err_ControlError
End If
LongitudTotal = .Fields(NombreCampoTabla).FieldSize
ReDim B(LongitudTotal)
'B = .Fields(NombreCampoTabla)
'la linea anterior la comentarie por que me da error: "Imposible asignar a una matriz"
'no se si ese será el problema. estas funciones se las copie a Emilio (Buho)
End With
Rst.Close
Open NombreFichero For Binary Access Write As #1
Put #1, , B
Close #1
EscribeInstaladorADisco = True
exit_ControlError:
Set Rst = Nothing
Close
Exit Function
err_ControlError:
EscribeInstaladorADisco = False
Resume exit_ControlError
End Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problemas al procesar archivos binarios

Publicado por Alejandro (4142 intervenciones) el 15/06/2023 22:02:49
El código que has compartido parece tener algunos problemas al manejar los archivos binarios. Aquí hay algunas sugerencias para solucionar los problemas que mencionaste:

1. En la función "Empaqueta":
- Asegúrate de que el campo "CampoOleContenedor" en la tabla "TblFicherosAdjuntos" sea de tipo OLE Object para almacenar correctamente los datos binarios.
- En lugar de utilizar la instrucción `Open` y `Get` para leer el archivo binario, puedes utilizar la función `FileToByteArray` para convertir el archivo en una matriz de bytes. Aquí tienes un ejemplo de cómo hacerlo:

1
2
Dim B() As Byte
B = FileToByteArray(Rst("rutaficheroadjunto"))

2. En la función "EscribeInstaladorADisco":
- Asegúrate de que el campo "NombreCampoTabla" en la tabla "NombreTabla" sea de tipo OLE Object para almacenar correctamente los datos binarios.
- En lugar de utilizar la instrucción `Put` para escribir la matriz de bytes en un archivo, puedes utilizar la función `ByteArrayToFile` para guardar la matriz de bytes como un archivo. Aquí tienes un ejemplo de cómo hacerlo:

1
ByteArrayToFile B, NombreFichero

A continuación, se presentan las implementaciones de las funciones `FileToByteArray` y `ByteArrayToFile` que puedes utilizar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Function FileToByteArray(ByVal FilePath As String) As Byte()
    Dim FileNum As Integer
    FileNum = FreeFile
    Open FilePath For Binary Access Read As FileNum
    Dim FileData() As Byte
    ReDim FileData(LOF(FileNum) - 1)
    Get FileNum, , FileData
    Close FileNum
    FileToByteArray = FileData
End Function
 
Public Sub ByteArrayToFile(ByVal ByteArray() As Byte, ByVal FilePath As String)
    Dim FileNum As Integer
    FileNum = FreeFile
    Open FilePath For Binary Access Write As FileNum
    Put FileNum, , ByteArray
    Close FileNum
End Sub

Con estas modificaciones, espero que puedas procesar correctamente los archivos binarios y que se abran correctamente en sus aplicaciones asociadas.

Ten en cuenta que es posible que también necesites revisar otros aspectos de tu código y asegurarte de que las tablas y campos estén configurados correctamente.

¡Espero que esto te ayude a solucionar tus problemas con los archivos binarios en Access!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar