Public Function SubirImagen(ByVal tableName As String, ByVal fieldName As String, ByVal imagePath As String, ByVal conditionField As String, ByVal conditionValue As String) As Boolean
'Método para subir una imagen al servidor de PostgreSQL
'Parámetros:
' tablename ----- > Nombre de la tabla en PostgreSQL en la sentencia SQL
' fieldName ----- > Nombre del campo bytea en PostgreSQL
' imagePath ----- > Ruta y nombre del archivo de la imagen a subir
' conditionField > Nombre del campo del id, por ejemplo, idempleado
' conditionValue > Valor del ID, por ejemplo si el idempleado=3 seria 3
'Ejemplo de llamada:
'
' NOTA:
'La función utiliza parámetros SQL para realizar la inserción y actualización directamente en la base de datos PostgreSQL.
'La función DiscoAOle() lee el contenido binario del archivo y luego actualiza cada registro en el conjunto de resultados ADO con el contenido binario.
'En consecuencia esta función es más rápida o eficiente
On Error GoTo ErrorHandler
' Variable booleana para rastrear errores
Dim success As Boolean
success = True
' Crear un objeto ADODB.Stream
Dim objStream As Object
Set objStream = CreateObject("ADODB.Stream")
' Especificar el tipo del Stream (adTypeBinary para datos binarios)
objStream.Type = 1 ' adTypeBinary
' Abrir el Stream
objStream.Open
' Leer la imagen desde un archivo
objStream.LoadFromFile imagePath
' Crear un objeto de comando ADO
Dim objCommand As Object
Set objCommand = CreateObject("ADODB.Command")
' Especificar el SQL para la actualización de datos
Dim strSQL As String
strSQL = "UPDATE " & tableName & " SET " & fieldName & " = ? WHERE " & conditionField & " = ?"
' Configurar el comando
objCommand.ActiveConnection = conn
objCommand.CommandText = strSQL
' Agregar el primer parámetro de imagen al comando
Dim objParameter1 As Object
Set objParameter1 = objCommand.CreateParameter(fieldName, 205, 1, -1, objStream.Read)
objCommand.Parameters.Append objParameter1
' Agregar el segundo parámetro de condición al comando
Dim objParameter2 As Object
Set objParameter2 = objCommand.CreateParameter(conditionField, adVarChar, adParamInput, Len(conditionValue), conditionValue)
objCommand.Parameters.Append objParameter2
' Ejecutar el comando (realizar la actualización)
objCommand.Execute
' Cerrar y liberar recursos
objStream.Close
Set objStream = Nothing
Set objCommand = Nothing
' Devolver el resultado
SubirImagen = success
Exit Function
ErrorHandler:
Debug.Print "Error al actualizar imagen: " & Err.Description
' Si se produce un error, establecer el resultado en False
success = False
SubirImagen = success
End Function
Public Function DescargarImagen(ByVal tableName As String, ByVal fieldName As String, ByVal conditionField As String, ByVal conditionValue As String, ByVal outputPath As String) As Boolean
On Error GoTo ErrorHandler
' Variable booleana para rastrear errores
Dim success As Boolean
success = True
' Crear un objeto de comando ADO
Dim objCommand As Object
Set objCommand = CreateObject("ADODB.Command")
' Especificar el SQL para la selección de datos
Dim strSQL As String
strSQL = "SELECT " & fieldName & " FROM " & tableName & " WHERE " & conditionField & " = ?"
' Configurar el comando
objCommand.ActiveConnection = conn
objCommand.CommandText = strSQL
' Agregar el parámetro de condición al comando
Dim objParameter As Object
Set objParameter = objCommand.CreateParameter(conditionField, adVarChar, adParamInput, Len(conditionValue), conditionValue)
objCommand.Parameters.Append objParameter
' Abrir un Recordset con la imagen
Set rs = objCommand.Execute
' Verificar si se encontraron resultados
If Not rs.EOF Then
' Crear un objeto ADODB.Stream para la imagen
Dim objStream As Object
Set objStream = CreateObject("ADODB.Stream")
' Especificar el tipo del Stream (adTypeBinary para datos binarios)
objStream.Type = 1 ' adTypeBinary
' Abrir el Stream
objStream.Open
' Copiar el contenido del campo bytea al Stream
objStream.Write rs.Fields(fieldName).Value
' Guardar la imagen en disco
objStream.SaveToFile outputPath, 2 ' adSaveCreateOverWrite
' Cerrar el Stream
objStream.Close
Else
Debug.Print "No se encontró la imagen para la condición especificada."
success = False
End If
' Cerrar y liberar recursos
rs.Close
Set rs = Nothing
Set objCommand = Nothing
' Devolver el resultado
DescargarImagen = success
Exit Function
ErrorHandler:
Debug.Print "Error al descargar imagen: " & Err.Description
' Si se produce un error, establecer el resultado en False
success = False
DescargarImagen = success
End Function