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.
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
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:
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.