Cómo guardar y leer el contenido de los campos binarios de una tabla
Por Enrique Martínez Montejo
Última revisión: 09/01/2005
 

Siempre y cuando nuestra tabla contenga un campo que se encuentre capacitado para almacenar archivos binarios largos, como bien pudiera ser un campo del tipo Image (SQL Server) u Objeto OLE (Microsoft Access), mediante el objeto Stream de la biblioteca de ADO podemos fácilmente grabar el contenido de una imagen, o cualquier otro archivo o documento que creamos oportuno. Posteriormente, también podremos utilizar el objeto Stream para recuperar la información contenida en el campo, información ésta que estará disponible en forma de archivo de nuestro disco duro.

Escribir en un campo binario

El procedimiento WriteLongBinary, nos permite escribir en un campo la información de un archivo binario. Para ello, deberá de pasar al procedimiento un objeto ADODB.Recordset previamente abierto, así como la ruta completa del archivo y el nombre del campo de la tabla donde se guardará la información. Por último, el procedimiento también prevé la posibilidad de añadir un nuevo registro a la tabla, acción que se llevará a cabo siempre que no existan otros campos cuyo contenido deba de cumplimentarse necesariamente:

Private Sub WriteLongBinary(ByVal rst As ADODB.Recordset, _
                            ByVal fileName As String, _
                            ByVal fieldName As String, _
                            Optional ByVal addNew As Boolean)

    Dim str As ADODB.Stream

    If (Not rst Is Nothing) And (fileName <> "") And (fieldName <> "") Then
        ' Si el objeto Recordset está cerrado, salimos
        If (rst.State = adStateClosed) Then Exit Sub
    Else
        ' Si no existe el objeto Recordset, o no se
        ' ha especificado la ruta del archivo, salimos

        Exit Sub
    End If

    On Error GoTo ErrWriteLongBinary

    ' Creamos un nuevo objeto Stream
    '

    Set str = New ADODB.Stream

    ' Configuramos y abrimos el objeto Stream binario
    With str
        .Type = adTypeBinary
        .Open
        .LoadFromFile fileName

        ' Insertamos el objeto binario en la tabla
        '

        With rst
            ' Si procede, añadimos un nuevo registro
            '

            If (addNew) Then .AddNew
            .Fields(fieldName).Value = str.Read
            .Update
        End With

        ' Cerramos el objeto Stream
        .Close
    End With

ErrWriteLongBinary:

    If (Err.Number <> 0) Then MsgBox Err.Description

    ' Liberamos los recursos
    '

    Set str = Nothing

End Sub

Leer el contenido de un campo binario

El procedimiento ReadLongBinary, básicamente tiene la misma estructura que el procedimiento descrito anteriormente, salvo que el parámetro fileName, ahora deberá de especificar la ruta completa donde deseamos crear el archivo, cuya información está contenida en el campo binario de la tabla. Indicar por último, que la información del campo que se recuperará, se corresponderá con el valor del campo binario cuyo registro se encuentre actualmente activo en el objeto ADODB.Recordset pasado al procedimiento.

Private Sub ReadLongBinary(ByVal rst As ADODB.Recordset, _
                           ByVal fileName As String, _
                           ByVal fieldName As String)

    Dim str As ADODB.Stream

    If (Not rst Is Nothing) And (fileName <> "") And (fieldName <> "") Then
        ' Si el objeto Recordset está cerrado, salimos
        If (rst.State = adStateClosed) Then Exit Sub
    Else
        ' Si no existe el objeto Recordset, o no se
        ' ha especificado la ruta del archivo, salimos

        Exit Sub
    End If

    On Error GoTo ErrReadLongBinary

    ' Creamos un nuevo objeto Stream
    '

    Set str = New ADODB.Stream

    ' Configuramos y abrimos el objeto Stream binario
    With str
        .Type = adTypeBinary
        ' Abrimos el objeto Stream
        .Open
        ' Leemos su contenido
        .Write rst.Fields(fieldName).Value

        ' Guardamos el archivo en la ruta especificada
        .SaveToFile fileName, adSaveCreateOverWrite

        ' Cerramos el objeto Stream
        .Close
    End With

ErrReadLongBinary:

    If (Err.Number <> 0) Then MsgBox Err.Description

    ' Liberamos los recursos
    '

    Set str = Nothing

End Sub

 

Otros enlaces de interés:

Guardar imágenes en una tabla

Copiar una imagen con ADO

Indice de Ejemplos de ADO


Enrique Martínez Montejo - 2005

NOTA: La información contenida en este artículo, así como el código fuente incluido en el mismo, se proporciona COMO ESTÁ, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en el presente artículo.

NOTE: The information contained in this article and source code included therein, is provided AS IS without warranty of any kind, and confers no rights. You assume any risk to implement, use or run it explained, recommended or suggested in this article.