Cómo insertar ficheros de cualquier tipo en un campo de una tabla de MySQL, utilizando Delphi como lenguaje de programación. Os explicamos como añadir un fichero y cómo sacarlo/guardarlo una vez insertado en un campo de una tabla MySQL.
- Preparar base de datos MySQL con tabla y campo longblob.
- Insertar ficheros en campo de tabla MySQL con Delphi 6.
- Ejecutando y probando el Gestor Documental.
- Descargar el código fuente del ejemplo de Gestor Documental.
Preparar base de datos MySQL con tabla y campo longblob
Mostraremos, con un ejemplo, cómo hacer un mini gestor documental, una aplicación donde almacenar ficheros, con su descripción correspondiente, para poder tenerlos alojados en un lugar común, en una base de datos MySQL.
En primer lugar crearemos la tabla en MySQL, para ello podremos utilizar cualquier aplicación que permita acceder a MySQL y ejecutar consultas SQL de creación de tablas. En nuestro caso utilizaremos «AjpdSoft Administración Bases de Datos», disponible gratuitamente en esta web, este es el enlace de la descarga (es necesario ser usuario registrado):
Con esta aplicación o con cualquier otra que admita acceso a MySQL crearemos la tabla donde alojaremos los ficheros, la sentencia SQL para crear la tabla sería la siguiente:
1 2 3 4 5 6 7 8 9 |
CREATE TABLE documentos ( codigo int(10) unsigned NOT NULL auto_increment, ficherodescripcion varchar(255) default NULL, ficherorutafisica varchar(255) default NULL, ficherocontenido longblob, fechaalta datetime default NULL, observacion text default NULL, PRIMARY KEY (codigo) ) |
El campo donde se alojará el fichero será «ficherocontenido» de tipo longblob (admite hasta ficheros de 4 GB, aunque no recomendamos superar 100 MB si la base de datos va a ser accesible desde Internet) . A continuación os mostramos captura de pantalla de la aplicación en el proceso de creación de la tabla:
Insertar ficheros en campo de tabla MySQL con Delphi 6
Tras crear la tabla abriremos Delphi para realizar la aplicación que gestione la tabla creada anteriormente. Desde Delphi, pulsaremos «File» – «New application». En nuestro caso, para el acceso a MySQL utilizaremos un componente gratuito para Delphi y MySQL llamado ZeosDBO, disponible en http://sourceforge.net/projects/zeoslib, en el siguiente enlace (de esta web) os explicamos cómo instalarlo paso a paso:
En nuestra aplicación de Delphi añadiremos los siguientes componentes al formulario principal:
- ZConnection: componente para la conexión con el servidor de base de datos MySQL.
- ZTable: componente para manipulación de tablas MySQL.
- DataSource: componente que enlaza el ZTable con los cuadros de edición de los campos de la tabla MySQL.
- DBNavitagor: componente visual con los botones típicos para manipular registros (editar, validar, eliminar, insertar, refrescar, siguiente, anterior, primero, último).
Os indicamos las propiedades que hay que cambiar en los diferentes componentes:
- En la propiedad «DataSet» del componente «DataSource» pondremos el nombre del componente «ZTable», de esta forma quedarán enlazados.
- En la propiedad «DataSource» del componente DBNavigator pondremos el nombre del componente «DataSource», de esta forma quedará enlazado el DBNavigator con el ZTable pues , éste a su vez, está enlazado con el DataSource.
- En la propiedad «Connection» del componente «ZTable» pondremos el nombre del componente «ZConnection».
Para ver todas las propiedades y los componentes restantes (formulario, botones, savedialog, opendialog, etc), os recomendamos que descarguéis el código fuente de la aplicación, pulsando aquí.
El formulario de Delphi quedará de la siguiente forma:
Para realizar la conexión con la base de datos MySQL utilizaremos el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 |
procedure TformMenuPrincipal.FormCreate(Sender: TObject); begin dbConexion.Disconnect; dbConexion.HostName := leCadINI('BD','Servidor','localhost'); dbConexion.Port := strtoint(leCadINI('BD','Puerto','3306')); dbConexion.Catalog := leCadINI('BD','Catálogo','gestordocumental'); dbConexion.Database := leCadINI('BD','Catálogo','gestordocumental'); dbConexion.User := leCadINI('BD','Usuario','root'); dbConexion.Password := leCadINI('BD','Contraseña',''); dbConexion.Connect; tTabla.Active := true; end; |
Donde utilizamos la función «leeCadINI» para leer valore fichero ini, con el siguiente código:
1 2 3 4 5 6 7 8 9 10 |
//Lee una cadena de texto de un INI function leCadINI (clave, cadena : string; defecto : string) : string; begin with tinifile.create (changefileext(paramstr(0),'.INI')) do try result := readString (clave, cadena, defecto); finally free; end; end; |
1 |
El procedimiento que utilizaremos para insertar un fichero al registro actual será:
1 2 3 4 5 6 7 8 9 10 |
procedure TformMenuPrincipal.bInsertarFicheroClick(Sender: TObject); begin if not (tTabla.State in [dsedit, dsinsert]) then tTabla.Edit; if dlAbrir.Execute then begin tTablaficherocontenido.LoadFromFile(dlAbrir.FileName); tTablaficherorutafisica.AsString := dlAbrir.FileName; end; end; |
El procedimiento que utilizaremos para eliminar un fichero ya insertado será:
1 2 3 4 5 6 7 |
procedure TformMenuPrincipal.bEliminarFicheroClick(Sender: TObject); begin if not (tTabla.State in [dsedit, dsinsert]) then tTabla.Edit; tTablaficherocontenido.Clear; tTablaficherorutafisica.AsString := ''; end; |
1 2 3 4 5 6 7 8 9 10 11 |
procedure TformMenuPrincipal.bDescargarFicheroClick(Sender: TObject); begin if tTablaficherocontenido.AsString <> '' then begin dlGuardar.FileName := ExtractFileName(tTablaficherorutafisica.AsString); if dlGuardar.Execute then tTablaficherocontenido.SaveToFile(dlGuardar.FileName); end else MessageDlg('Este registro no tiene fichero asignado.', mtInformation, [mbok], 0); end; |
Ejecutando y probando el Gestor Documental
Antes de ejecutar la aplicación, nos aseguraremos de introducir los datos de conexión al servidor MySQL en el fichero gestorDocumental.ini:
Para abrir la aplicación, haremos doble click en el fichero gestorDocumental.exe. La aplicación en ejecución quedará de la siguiente forma:
Si pulsamos el botón «Añadir fichero» nos mostrará una ventana como esta:
Una vez insertado el fichero, guardaremos el registro pulsando en el botón «Validar». A partir de ahora podremos recuperarlo en cualquier momento situándonos en el registro correspondiente y pulsando en el botón «Descargar fichero». También podremos eliminarlo pulsando en «Eliminar fichero».
Nota: MySQL regula el tamaño máximo del fichero insertado por medio del parámetro: max_allowed_packet, no permitirá ficheros de mayor tamaño que el especificado en este parámetro. Se guarda en el fichero my.ini, en la carpeta de instalación del Servidor de MySQL, normalmente en:
C:/Archivos de programa/MySQL/MySQL Server 4.1
Un ejemplo de contenido del fichero my.ini con el parámetro max_allowed_packet a 100MB:
Descargar el código fuente del ejemplo de Gestor Documental
Podéis descargar el código fuente completo del ejemplo, así como el script SQL para crear una tabla en el siguiente enlace: