Guardar imagen en mysql

Quiero guardar una imagen en un campo blob de mysql y no puedo, utilizo vfp, muy similar al visual basic que tu conoces, el problema es que no se si el load_file solo funciona en el servidor, lo que pasa es que yo tengo terminales remotas conectadas a mi mysql por odbc, entonces leo el archivo por fread() linea por linea, lo junto y lo envío por paso sql, pero me da un error de sintaxis, ya reemplace los códigos raros por sus respectivos códigos de escape y aun así no puede interpretar los datos binarios, ¿tienes una idea mejor?

1 respuesta

Respuesta
1
En realidad el único interrogante es si necesitás guardar las imágenes capturadas dentro de la db o en alguna carpeta externa (guardando la ruta en la db), en donde la seguridad la maneja el SO.
Si la primera opción es la elegida necesitás un campo binario (BLOB) para almacenar las imágenes, y podes guardarlas y recuperarlas usando los métodos GetChunk y AppendChunk de un objeto Field de ADO.
Enviando datos al campo BLOB
Empecemos cargando una imagen en la base de datos. Además de nuestro objeto de conexión, necesitaremos un objeto RECORDSET y un objeto STREAM. Declaremos estos dos objetos.
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim mystream As ADODB.Stream
Set mystream = New ADODB.Stream
mystream.Type = adTypeBinary
Un objeto ADO Stream puede manejar texto y datos binarios (y puede ser utilizado para recuperar textos largos almacenados en los campos BLOB). Tenemos que especificar que tipo de dato vamos a utilizar usando el valor adTypeBinary en el parámetro Type.
Lo primero que se requiere hacer es agregar un registro en blanco en el recordset
rs.Open "SELECT * FROM files WHERE 1=0", conn, adOpenStatic, adLockOptimistic
rs.AddNew
Ahora tenemos un recordset vacío (gracias a la cláusula WHERE) para trabajar con el, al cual le vamos a agregar un nuevo registro. Vamos a cargar el archivo usando el objeto STREAM.
mystream.Open
mystream.LoadFromFile "c:myimage.gif"
Una vez cargado el archivo procedemos a complementar los datos del recordset y actualizarlo
rs!file_name = "myimage.gif"
rs!file_size = mystream.size
rs!file = mystream.read
rs.Update
Mystream. Close
Rs. Close
Conn. Close
Es importante aclarar que los datos se almacenaran solamente en el proceso de actualización. El objeto STREAM no adiciona datos ni efectúa transferencia de información al servidor.
Recuperando datos
Bien, ahora que tenemos la imagen en nuestra tabla, estamos listos para recuperarla. Como lo hemos hecho anteriormente, inicializamos la conexión y el recordset
Dim conn As New ADODB.Connection
conn.ConnectionString = GloConnectionString
conn.CursorLocation = adUseClient
conn.Open
Dim rs As New ADODB.Recordset
Dim mystream As New ADODB.Stream
mystream.Type = adTypeBinary
rs.Open "Select * from files WHERE files.file_id = 1", conn
Hemos abierto la conexión y el recordset, y se ha declarado el objeto STREAM. Para traer nuestro archivo abrimos el objeto STREAM, escribimos a el desde el recordset y entonces lo guardamos como archivo
mystream. Open
mystream.Write
rs! File
mystream. SaveToFile "c:
ewimage.gif", adSaveCreateOverWrite
Mystream. Close
Rs. Close
Conn. Close
Hemos cargado los datos binarios del recordset usando la sintaxis mystream. Write rs! File, donde rs! ¿File es el campo del recordset que contiene los datos binarios que queremos? ¿Escribir? En el objeto STREAM. El método SAVETOFILE toma dos argumentos: el nombre de archivo y ubicación donde queremos se ubique el mismo (localización del objetivo), y una variable que determina el tipo de acción del objeto STREAM cuando el archivo existe. Con la opción adSaveCreateOverWrite, los archivos existentes siempre serán reemplazados. Cuando se especifica la opción adSaveCreatenoexists los archivos no serán borrados si existen.
Actualizando datos
Se puede actualizar el contenido del campo de la misma forma como se agrego el dato, con la única diferencia de especificar cual es el registro que se desea actualizar, utilizando la cláusula WHERE.
rs.Open "Select * from files WHERE files.file_id = 1", conn, adOpenKeyset, adLockOptimistic
mystream.Open
mystream.LoadFromFile "c:updateimage.gif"
rs!file = mystream.Read
rs.Update
Mystream. Close
Rs. Close
¡ Y eso es todo !

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas