Utilizamos cookies propias y de terceros. Al navegar entendemos que aceptas el uso de cookies. +Info.
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Usuario
· Wiki


Delphi: Cómo se hizo AjpdSoft Extracción de documentos de BD
Bases de Datos


Os explicamos paso a paso cómo se desarrolló el proyecto AjpdSoft Extracción de documentos de BD consistente en una aplicación informática que extráe de cualquier tabla de cualquier base de datos todos los documentos que tenga (admite filtros por SQL).



Cómo se hizo AjpdSoft Extracción de documentos de BD

Cómo se hizo AjpdSoft Extracción de documentos de BD

El problema que se nos planteó fue que tenemos varias bases de datos en diferentes motores (Oracle, MySQL, etc) que contienen tablas con campos de tipo LONG RAW (Oracle), BLOB (Oracle), LONGBLOB (MySQL), etc. Estos campos almacenan documentos ofimáticos en general: Word, Excel, OpenOffice, PDF, jpeg, bmp, etc. Los clientes nos plantearon la posibilidad de poder extraer todos los documentos de forma semiautomática o automática de las tablas y con el filtro que ellos quisieran.

Así pues, iniciamos el proyecto "Extracción de documentos de BD", tras analizar la diversidad de motores de base de datos que utilizan nuestros clientes, con tablas diferentes, tipos de datos diferentes, etc. Decidimos realizar una aplicación que sirviera para todos, para ello utilizamos ODBC como forma de conexión, pues es la más estándar. Así conseguimos que, con solo instalar el driver ODBC correspondiente en el cliente, nuestra aplicación sirva para cualquier motor de base de datos.

Como ejemplo utilizaremos MySQL, con lo cual necesitaremos un servidor de MySQL instalado en un equipo. En este servidor crearemos un nuevo esquema llamado "gestordocumental", podremos utilizar MySQL Administrator para realizar esta tarea. Dentro de este esquema crearemos una tabla llamada "documentos", con la siguiente consulta SQL:

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,
  PRIMARY KEY  (`codigo`)
)

Para crearla podremos utilizar MySQL Administrator o cualquier otra aplicación que sea capaz de conectarse con MySQL y ejecutar consultas SQL de creación de tablas, por ejemplo AjpdSoft Administración Bases de Datos.

Antes de utilizar la aplicación que extraerá los documentos deberemos tener instalado y configurado un driver ODBC (origen de datos). Para ello lo descargaremos de la web correspondiente al motor que utilicemos, lo instalaremos y desde "Inicio" - "Panel de control" -" Herramientas administrativas" - "Orígenes de datos (ODBC)" agregaremos el correspondiente al motor de base de datos, con las opciones necesarias. En nuestro ejemplo hemos utilizado el Conector/ODBC 3.51.12 de MySQL, con las siguientes opciones:

A continuación desarrollaremos en Delphi el proyecto que accederá a este servidor o a cualquier otro y ejecutará una consulta SQL editable por el usuario. Le indicaremos a la aplicación cual es el campo que contiene el documento y cual es el que contiene el nombre del documento (para extracciones masivas):

AjpdSoft Extracción de documentos de BD

En la pestaña anterior indicaremos el nombre del campo que contiene el documento, la ruta / carpeta donde se extraerán los documentos, el nombre del campo que contendrá el nombre del documento, indicaremos si queremos reemplazar documentos existentes en el destino por los documentos nuevos. Si tenemos documentos con nombre del tipo:

DOC_FACT_001 Listado facturas.doc
DOC_FACT_002 Listado facturas.doc
...
DOC_CONT_001 Listado subcuentas.doc
DOC_CONT_002 Listado asientos contables.doc
...
DOC_PROV_001 Listado proveedores.doc
...

podremos indicar a la aplicación que los extraiga en carpetas diferentes, marcaremos "Separar documentos automáticamente en carpetas diferentes", indicaremos la posición inicial del texto discriminativo, en el ejemplo anterior la 5 (después de "DOC_") y el número de caracteres que se cogerán a partir de esa posición, en el ejemplo 4 (hata el "_número"). De esta forma, tal y como hemos nombrado los documentos creará, automáticamente, la siguiente estructura de carpetas:

C:/Documentos/FACT

C:/Documentos/CONT

C:/Documentos/PROV

Además de esta posibilidad, la aplicación AjpdSoft Extracción de documentos de BD, admite la posibilidad de realizar varias copias o una sola de un mismo fichero a otras carpetas, indicadas por el usuario. Como criterio de discriminación / identificación / agrupación se utilizará el anteriormente indicado (posición inicial, número caracteres del nombre del documento). Para configurar esta opción y añadir las carpetas de asignación utilizaremos la pestaña "Asignación de carpetas":

AjpdSoft Extracción de documentos de BD

En nuestro ejemplo hemos decidido copiar los documentos que lleven PROV, CONT, FACT a sus respectivas carpetas en un servidor de almacenamiento (NAS) llamado "servidor", en la carpeta raíz "documentos". También podríamos haber copiado estos documentos a otras carpetas, desmarcando el check "Sin duplicados" y añadiendo, por ejemplo:

PROV - F:/copia_seguridad/documentos/proveedores

Por supuesto, deberemos configurar las opciones de conexión con la base de datos, en la pestaña "Conexión BD": usuario, contraseña, ODBC (nombre del origen de datos), nombre de la base de datos y valor del parámetro BLOB SIZE (se explica su uso en este enlace). Podremos realizar una prueba de conexión pulsando en el botón "Probar":

AjpdSoft Extracción de documentos de BD

Por último, para realizar la prueba deberemos introducir una consulta SQL que nos muestre los registros de la tabla creada anteriormente, en la pestaña "Resultado consulta", por ejemplo:

select ficherocontenido, ficherorutafisica, fechaalta
from documentos

AjpdSoft Extracción de documentos de BD

Nos mostrará el resultado de la consulta SQL en la parte inferior. Si hay campos de tipo LOB, LONGBLOB, etc, el grid los mostrará con el valor "[Blob]" (si no tiene documento) y "[BLOB]" si tiene documento. Tras configurar estas opciones podremos iniciar el proceso de extracción de los documentos pulsando en "Ext. Todos" (extraerá todos los documentos de la consulta SQL) o "Ext. actual" (sólo extraerá el documento actual, en donde se encuentre el triángulo de selección de registro).

Tras la ejecución, nos habrá creado una estructura de carpetas como esta:

Con sus documentos dentro:

y en la pestaña podremos ver el resultado de la extracción de cada fichero:

AjpdSoft Extracción de documentos de BD

Si hemos indicado alguna carpeta de asignación también nos habrá creado la estructura correspondiente y habrá copiado los ficheros extraidos en esas carpetas:

Resumiendo, lo que necesitamos para desarrollar una aplicación que extraiga documentos de campos de tipo LONG RAW, BLOB, LONGBLOB, etc. es:

  1. Un servidor de MySQL/Oracle para realizar las pruebas.
  2. Una base de datos o utilizar una existente.
  3. Una tabla con dos campos: uno almacenará el documento en sí y el otro almacenará el nombre del documento (para su posterior extracción masiva/múltiple).
  4. Un origen de datos ODBC.
  5. La aplicación AjpdSoft Extracción de documentos de BD.

Para desarrollar este proyecto hemos utilizado:

  • MySQL Server 4.1.
  • MySQL Administrator 1.1.9.
  • MySQL ODBC 3.51.
  • Windows XP SP2.
  • AjpdSoft Extracción de documentos de BD 1.6.4.125.

Esta aplicación y el código fuente está disponible de forma totalmente gratuita (freeware) en nuestra web. Para descargarla deberá ser usuario registrado, si aún no lo es pulse aquí para registrarse:

AjpdSoft Extracción de documentos de BD

Créditos:

  • Idea original: AjpdSoft.
  • Desarrollo básico: AjpdSoft.
  • Dearrollo e idea original de las ventanas de asignación y agrupación de documentos por carpetas: Amparo L. de M.S.
  • Idea original de la programación de una tarea que se ejcute automáticamente sin intervención del usuario: Amparo L. de M.S. (en desarrollo).

Este proyecto no hubiera sido posible de no ser por la inestimable ayuda y colaboración de Amparo L. de M.S., a la cual se lo agradezco profundamente.



Nota: Revisado por AjpdSoft el 19-06-2007.
Anuncios


Enviado el Sábado, 05 mayo a las 03:49:22 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A