Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

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

Access: Acceso a una base de datos Microsoft Access desde Microsoft Word
Bases de Datos


Os explicamos en este manual cómo obtener e insertar datos de una tabla de una base de datos Microsoft Access en un documento de Microsoft Word. Explicamos paso a paso cómo agregar una nueva macro y el código Visual Basic for Applications (VBA) necesario para acceder a una base de datos Access (válido para cualquier otro motor de base de datos) y también mostramos cómo crear una tabla en Word mediante código VBA. En realidad simulamos una combinación de correspondencia personalizada.



 

Algunas definiciones iniciales (Access, Word)

Definición Microsoft Access

Microsoft Access es un programa Sistema Gestor de Base de Datos Relacional (SGBDR del inglés Relational DataBase Management System o RDBMS) creado por Microsoft para uso personal de pequeñas organizaciones. Es un componente de la suite Microsoft Office.

Es un software de gran difusión entre pequeñas empresas (PYMES) cuyas bases de datos no requieren de excesiva potencia, ya que se integra perfectamente con el resto de aplicaciones de Microsoft y permite crear pequeñas aplicaciones con unos pocos conocimientos del Programa. Microsoft Access permite crear formularios para insertar y modificar datos fácilmente. También tiene un entorno gráfico para ver las relaciones entre las diferentes tablas de la base de datos.

Tiene un sistema de seguridad de cifrado bastante primitivo y puede ser la respuesta a proyectos de programación de pequeños y medianos tamaños.

Para bases de datos de gran volumen (de datos o de usuarios) es recomendable usar otros SGBDR como MySQL, Microsoft SQL Server, Oracle Database, IBM DB2, Firebird, PostgreSQL, etc. Pues Microsoft Access no está diseñada para soportar un gran volumen de datos o un gran número de usuarios conectados concurrentemente. Tampoco está diseñada para funcionar a través de Internet.

Entre sus mayores inconvenientes figuran que no es multiplataforma, sólo está disponible para sistemas operativos de Microsoft. Su uso es inadecuado para grandes proyectos de software que requieren tiempos de respuesta críticos.

Microsoft Access es "similar" a otros motores de base de datos SGBDR de escritorio como SQLite, Paradox (de Borland), DBASE, FoxPro, etc.

A continuación os mostramos las extensiones típicas de los archivos que componen una base de datos Access:

  • .mdb: base de datos de Access (versión 2003 y anteriores).
  • .mde: base de datos de Access protegida ("compilada") (versión 2003 y anteriores).
  • .mdz: extensión de plantillas de Access.
  • .accdb: base de datos de Access (versión 2007).
  • .accde: base de datos de Access protegida ("compilada") (versión 2007).
  • .ldb, .laccdb: son usados para determinar qué registros están bloqueados y por quien, en una base de datos compartida. Es un archivo temporal, se destruye automáticamente cuando no hay usuarios conectados a la base de datos Access.
  • .accdc: es un archivo comprimido que contiene un archivo de Access (.accdb o .accde) y un certificado digital.
  • .mam: macro de Access.
  • .maq: consulta de Access.
  • .mar: informe de Access.
  • .mat: tabla de Access.
  • .maf: formulario de Access.
  • .adp: proyecto de Access.
  • .adn: plantilla de proyecto de Access.

 

Definición Microsoft Word

Microsoft Word es un procesador de textos. Desarrollado por la empresa Microsoft. Actualmente viene integrado en la suite ofimática Microsoft Office.

Microsoft Word utiliza un formato nativo cerrado habitualmente llamado DOC (extensión de archivo .doc). Por la amplísima difusión del Microsoft Word, este formato se ha convertido en estándar de facto con el que pueden transferirse textos con formato o sin formato, o hasta imágenes, siendo preferido por muchos usuarios antes que otras opciones como el texto plano para el texto sin formato, o JPG para gráficos; sin embargo, este formato posee la desventaja de tener un mayor tamaño comparado con algunos otros. Por otro lado, la Organización Internacional para la Estandarización ha elegido el formato OpenDocument como estándar para el intercambio de texto con formato, lo cual ha supuesto una desventaja para el formato .doc. Ahora, en el Word 2007, se maneja un nuevo formato, docx. Es más avanzado y comprime aún más el documento.

 

Escenario de trabajo, fichero Word

Supongamos el caso en el que queremos insertar en un documento de Word una lista de todos los clientes de nuestro programa de Facturación (con base de datos Microsoft Access). Estamos realizando un informe en Word en el que hemos de incluir una tabla con todos los clientes y su correspondiente DNI. Lógicamente, si no disponemos de este método, tendremos que insertarlos manualmente.

Por ejemplo, supongamos que disponemos de este documento de Word:

AjpdSoft Escenario de trabajo, fichero Word

Y en la parte final queremos incluir dicha lista de clientes.

Para realizar este proceso automático necesitaremos dos cosas:

  1. La base de datos Access (aunque el procedimiento que explicamos aquí es válido para cualquier otro motor de base de datos).
  2. El módulo con el macro que realizará la conexión a la base de datos Access, obtendrá los clientes (en nuestro ejemplo) y creará una tabla en Word con dos columnas, en una insertará el nombre de cada cliente y en la otra el DNI correspondiente.

 

Creación de la base de datos Microsoft Access 97 (mdb)

Abriremos Access o bien accederemos a la carpeta donde queramos crear la base de datos access y pulsaremos con el botón derecho del ratón, seleccionando "Nuevo" - "Base de datos de Microsoft Access":

AjpdSoft Creación de la base de datos Microsoft Access (mdb)

Introduciremos el nombre del fichero mdb de la base de datos, por ejemplo "bdajpdsoft", pulsaremos en "Crear":

AjpdSoft Creación de la base de datos Microsoft Access (mdb)

En la ventana de Base de datos, en la pestaña "Tablas", pulsaremos "Nuevo":

AjpdSoft Creación de la base de datos Microsoft Access (mdb)

En la ventana de Nueva tabla seleccionaremos "Vista Diseño":

AjpdSoft Creación de la base de datos Microsoft Access (mdb)

Añadiremos los campos que queramos para la tabla, por ejemplo:

  • codigo: de tipo Autonumérico.
  • nombre: de tipo Texto con 100 caracteres.
  • dni: de tipo Texto con 25 caractes.

AjpdSoft Creación de la base de datos Microsoft Access (mdb)

Estableceremos una clave principal (primary key o clave primaria) para la tabla, pulsando con el botón derecho del ratón sobre el campo "codigo" y seleccionando "Clave principal":

AjpdSoft Creación de la base de datos Microsoft Access (mdb)

Cerraremos la ventana anterior, nos pedirá si queremos guardar los cambios, pulsaremos "Sí":

AjpdSoft Creación de la base de datos Microsoft Access (mdb)

Introduciremos el nombre de la tabla, por ejemplo "clientes":

AjpdSoft Creación de la base de datos Microsoft Access (mdb)

Ya tendremos creada la tabla, ahora podremos añadirle datos pulsando en "Abrir":

AjpdSoft Creación de la base de datos Microsoft Access (mdb)

En la lista podremos añadir, eliminar y modificar registros:

AjpdSoft Creación de la base de datos Microsoft Access (mdb)

 

 

Creación del módulo VBA en Word 97 con el código para acceso a Access

Desde el documento de Word que queramos utilizar como "plantilla" pulsaremos en el menú "Herramientas" - "Macro" - "Macros...":

AjpdSoft Creación del módulo VBA en Word con el código para acceso a Access

Introduciremos en "Nombre de la macro" el nombre que tendrá la macro para diferenciarla de otras, por ejemplo "obtencionDatosMDB", pulsaremos "Crear":

AjpdSoft Creación del módulo VBA en Word con el código para acceso a Access

Pegaremos el código fuente de abajo en la ventana de la macro:

AjpdSoft Creación del módulo VBA en Word con el código para acceso a Access

El código fuente VBA del macro para realizar al conexión con microsoft Access, obtener los datos de los clientes y crear la tabla en Word con la lista de clientes:

Dim db As Database
Dim rsDatos As Recordset


Sub obtencionDatosMDB()
  Dim sql As String
  Dim resultadoMsg
      
  On Error GoTo cError
  
  resultadoMsg = MsgBox("Se va a realizar la conexión con la " & _
      "base de datos para obtener los datos a partir " & _
      "del punto actual del documento Word ¿desea " & _
      "continuar?", vbQuestion + vbOKCancel, "Acceso a mdb desde Word")
  
  If resultadoMsg = vbOK Then
    'Accedemos a Access (mdb) desde Word
    Set db = opendatabase("C:bdajpdsoft.mdb")
    sql = "SELECT nombre, dni FROM clientes"
    sql = sql & " WHERE nombre is not null"
    sql = sql & " ORDER by nombre"
    Set rsDatos = db.OpenRecordset(sql, dbOpenSnapshot)
    
    'Insertar una línea en blanco en el documento
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.TypeParagraph
    Selection.TypeParagraph
  
    'Tipo de letra para el título
    Selection.Font.Size = 12
    Selection.Font.Bold = True
    Selection.TypeText Text:="CLIENTES"
    Selection.TypeParagraph
 
    Selection.Font.Size = 11
    
    'Insertamos una tabla con dos columnas
    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=2
    Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=300, RulerStyle:=wdAdjustNone
    Selection.Tables(1).Columns(2).SetWidth ColumnWidth:=100, RulerStyle:=wdAdjustNone
    Selection.Tables(1).Rows.Alignment = wdAlignRowCenter
    
    'Texto de la cabecera de la tabla
    sValor = "Nombre"
    Selection.TypeText Text:=sValor
    Selection.MoveRight Unit:=wdCell
  
    sValor = "DNI/CIF"
    Selection.TypeText Text:=sValor
    Selection.MoveRight Unit:=wdCell
    
    'Sombreamos la primera fila (encabezado)
    Selection.Tables(1).Rows(1).Select
    Selection.Cells.Shading.Texture = wdTexture20Percent
    Selection.Font.Size = 10
    Selection.Font.Bold = True
    Selection.EndKey Unit:=wdLine
    Selection.MoveRight Unit:=wdCell
    
    'Recorremos la tabla de clientes
    Do While (Not rsDatos.EOF)
      Selection.Font.Size = 9
      Selection.Font.Bold = False
 
      'Insertamos el nombre del cliente en la tabla
      sValor = "" & rsDatos("nombre")
      Selection.TypeText Text:=sValor
      
      'Movemos a la siguiente columna
      Selection.MoveRight Unit:=wdCell
      
      Selection.Font.Size = 9
      Selection.Font.Bold = False
          
      'Insertamos el DNI del cliente en la segunda columna
      sValor = "" & rsDatos("dni")
      Selection.TypeText Text:=sValor
      Selection.MoveRight Unit:=wdCell
 
      rsDatos.MoveNext
    Loop
    rsDatos.Close
  End If
  
cSalir:
  Exit Sub

cError:
  MsgBox Err.Description, vbExclamation + vbOKOnly
  GoTo cSalir
End Sub

Añadiremos la referencia a Microsoft DAO 3.6 Object Library desde el menú "Herramientas" - "Referencias..." del editor de Visual Basic de Word:

AjpdSoft Creación del módulo VBA en Word con el código para acceso a Access

Marcaremos "Microsoft DAO 3.6 Object Library" y pulsaremos "Aceptar":

AjpdSoft Creación del módulo VBA en Word con el código para acceso a Access

 

Ejecución de la macro en Word para acceso a base de datos Access

Una vez creada la macro en Word que accede a una base de datos Microsoft Access, obtiene los clientes de una tabla y añade una tabla de Word con los datos obtenidos de la mdb, podremos ejecutarla en el documento de Word.

Para ejecutar la macro nos posicionaremos (con el cursor) en la parte del documento donde queramos insertar la tabla con los datos de Access y pulsaremos en el menú "Herramientas" - "Macro" - "Macros...":

AjpdSoft Ejecución de la macro en Word para acceso a base de datos Access

Seleccionaremos la macro creada, en nuestro caso "obtencionDatosMDB" y pulsaremos "Ejecutar":

AjpdSoft Ejecución de la macro en Word para acceso a base de datos Access

Puesto que en el código VBA hemos añadido un aviso, nos lo mostrará antes de ejecutar la macro:

AjpdSoft Ejecución de la macro en Word para acceso a base de datos Access

Y la macro accederá a la base de datos Access (mdb) indicada en el código VBA, obtendrá los clientes y su DNI de la tabla "clientes" y creará una tabla en Word con los datos obtenidos:

AjpdSoft Ejecución de la macro en Word para acceso a base de datos Access

Como se puede observar es una alternativa a utilizar la combinación de correspondencia de Word que, a veces, puede ser un poco laboriosa. La ventaja de utilizar este método es que podremos personalizar cualquier cosa, desde las columnas a mostrar hasta los filtros a realizar en la consulta que obtiene los datos de Access (mediante la cláusula where en el SQL).

 

Artículos relacionados

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del proyecto AjpdSoft.


Anuncios


Enviado el Miércoles, 10 marzo a las 14:14:44 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A