Primero que nada te voy ha enseñar las diferentes formas de mandar datos:
1. Objetos ADO.
Cuando inicie el visual Basic 6.0, te sale automaticamente una ventana que dice "Nuevo", busca proyecto de datos, y le das un nombre cualquiera, ok. Una vez realizando eso, te visualiza una forma llamada "frmDataEnv" y una carpeta llamada "Diseñadores".
Nos situamos en la forma, y le damos doble click,
Cadena de conexión
Bien, ahora que hemos configurado MySQL y Visual Basic, podemos escribir la aplicación. Primero, verifiquemos la cadena de conexión, la cual determina como se conectará Visual Basic con el servidor, especifica el controlador ODBC (MyODBC), la dirección IP del servidor, nombre de usuario, contraseña y el nombre de la base de datos. También se adicionan opciones especgficas de conexión. La siguiente es la cadena de conexión que utilizo en mi aplicación (todo en una misma línea).
DRIVER={MySQL ODBC 3.51 Driver}; SERVER=123.456.789.100; DATABASE=mysqldatabase;
UID=sampleuser; PWD=12345; OPTION=16427
para tu caso
DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=tubasededatos;
UID=root; PWD='';
Los valores UID y PWD se toman desde una ventana de ingreso y validación de usuarios, y se procesan para completar la cadena de conexión que se almacena dentro de un módulo como variable global. Las opciones que se incluyen son las siguientes:
Opción Descripción
1 - El cliente no puede obtener el tamaño real del campo.
2 - MySQL devuelve el valor de los registros encontrados.
8 - Se permiten valores grandes. Nosotros queremos el servidor para mandar los valores BLOB a nuestro cliente de VB (paquetes grandes).
32 - Soporta el cursor dinámico.
16384 - Convierte campos LONGINT a INT.
Las opciones 1, 2 y 32 son tomadas del ejemplo de ADO que se encuentra en el website de Mysql, específicamente en esta sección.
Objeto de conexión
Ahora que tenemos la cadena de conexión, nos podemos conectar a la base de datos. A continuación se puede apreciar como se ejecuta la misma:
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.ConnectionString = GloConnectionString
conn.CursorLocation = adUseClient
conn.Open
En la primera linea hemos creado en memoria la conexión ADODB y en la segunda se le asigna la instancia. La sintaxis alternativa sería:
Dim conn As New ADODB.Connection
Pero esta opción reduce la velocidad de acceso y no es recomendable. En la cuarta línea hemos asignado la localización del cursor del lado del cliente, lo que ayuda a prevenir errores y problemas que pueden aparecer mientras programa ADO con MySQL (para más detalles de las opciones CURSORLOCATION, CURSORTYPE y LOCKTYPE consultar este artículo). En la última línea hemos abierto la conexión, la cual cerraremos posteriormente mediante la instrucción conn.Close.
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 vacgo (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
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:\newimage.gif", adSaveCreateOverWrite
mystream.close
rs.Close
conn.Close
He