Compartir a través de


Usar Microsoft Access como servidor DDE

Se aplica a: Access 2013, Office 2013

Microsoft Access admite el intercambio dinámico de datos (DDE) como aplicación de destino (cliente) o aplicación de origen (servidor). Por ejemplo, una aplicación como Microsoft Word, que actúa como cliente, puede solicitar datos a través de DDE de una base de datos de Microsoft Access que actúa como servidor.

Sugerencia

[!SUGERENCIA] Si necesita manipular objetos de Microsoft Access desde otra aplicación, considere la posibilidad de usar Automatización.

Una conversación DDE entre un cliente y un servidor se establece sobre un tema determinado. Un tema puede ser un archivo de datos en el formato admitido por la aplicación servidor o puede ser el tema System, que proporciona información sobre la propia aplicación servidor. Una vez iniciada una conversación en un tema determinado, solo se puede transferir un elemento de datos asociado a ese tema.

Por ejemplo, suponga que está ejecutando Microsoft Word y desea insertar en un documento datos de una determinada base de datos de Microsoft Access. Para iniciar una conversación DDE con Microsoft Access, abra un canal DDE mediante la función DDEInitiate y especifique el nombre del archivo de la base de datos como tema. A continuación, podrá transferir los datos de esa base de datos a Microsoft Word a través de dicho canal.

Como servidor DDE, Microsoft Access admite los siguiente temas:

  • El tema System (Sistema)

  • El nombre de una base de datos (tema database (base de datos))

  • El nombre de una tabla (tema tablename (nombretabla))

  • El nombre de una consulta (tema queryname (nombreconsulta))

  • Una cadena SQL de Microsoft Access (tema sqlstring (cadenasql))

Después de establecer una conversación DDE, puede usar la instrucción DDEExecute para enviar un comando desde el cliente a la aplicación de servidor. Cuando se utiliza como servidor DDE, Microsoft Access reconoce los siguientes elementos como un comando válido:

  • El nombre de una macro en la actual base de datos.

  • Cualquier acción que se pueda realizar en Visual Basic mediante uno de los métodos del objeto DoCmd.

  • Las acciones AbrirBaseDeDatos (OpenDatabase) y CerrarBaseDeDatos (CloseDatabase), que se utilizan sólo para las operaciones DDE. (Para ver cómo se utilizan estas funciones, vea el ejemplo que aparece a continuación en este tema.)

Nota:

Al especificar una acción de macro como instrucción DDEExecute, la acción y los argumentos siguen la sintaxis del objeto DoCmd y deben ir entre corchetes ([ ]). Sin embargo, las aplicaciones que admiten DDE no reconocen las constantes intrínsecas en las operaciones DDE. Asimismo, los argumentos de cadena deben ir entre comillas (" ") si la cadena contiene una coma. En caso contrario, no son necesarias las comillas.

La aplicación cliente puede utilizar la función DDERequest para solicitar datos de texto de la aplicación servidor a través de un canal DDE abierto. O bien, el cliente puede utilizar la instrucción DDEPoke para enviar datos a la aplicación servidor. Una vez completada la transferencia de datos, el cliente puede usar la instrucción DDETerminate para cerrar el canal DDE o la instrucción DDETerminateAll para cerrar todos los canales abiertos.

Nota:

[!NOTA] Cuando la aplicación cliente termine de recibir datos a través de un canal DDE, deberá cerrar dicho canal para conservar los recursos de la memoria.

El siguiente ejemplo muestra cómo se crea un procedimiento de Microsoft Word mediante Visual Basic que utiliza Microsoft Access como servidor DDE. (Para que funcione este ejemplo, Microsoft Access debe estar ejecutándose.)

    Sub AccessDDE() 
        Dim intChan1 As Integer, intChan2 As Integer 
        Dim strQueryData As String 
     
        ' Use System topic to open Northwind sample database. 
        ' Database must be open before using other DDE topics. 
        intChan1 = DDEInitiate("MSAccess", "System") 
        ' You may need to change this path to point to actual location 
        ' of Northwind sample database. 
        DDEExecute intChan1, "[OpenDatabase C:\Access\Samples\Northwind.mdb]" 
     
        ' Get all data from Ten Most Expensive Products query. 
        intChan2 = DDEInitiate("MSAccess", "Northwind.mdb;" _ 
            & "QUERY Ten Most Expensive Products") 
        strQueryData = DDERequest(intChan2, "All") 
        DDETerminate intChan2 
     
        ' Close database. 
        DDEExecute intChan1, "[CloseDatabase]" 
        DDETerminate intChan1 
     
        ' Print retrieved data to Debug Window. 
        Debug.Print strQueryData 
    End Sub

La siguiente sección facilita información sobre los temas DDE válidos que admite Microsoft Access.

El tema System (Sistema)

El tema System es un tema estándar para todas las aplicaciones basadas en Microsoft Windows. Facilita información sobre los demás temas que admite la aplicación. Para obtener acceso a esta información, el código debe llamar primero a la función DDEInitiate con el argumento topic y, a continuación, ejecutar la instrucción DDERequest con uno de los siguientes proporcionados para el argumento item .

Elemento

Valores devueltos

SysItems

Una lista de elementos que admite el tema System en Microsoft Access.

Formatos

Una lista de formatos que Microsoft Access puede copiar al Portapapeles.

Estado

"Ocupado" o "Preparado".

Temas

Una lista de todas las bases de datos abiertas.

El siguiente ejemplo muestra cómo se utilizan las funciones DDEIniciar (DDEInitiate) y DDEPedido (DDERequest) con el tema System:

    ' In Visual Basic, initiate DDE conversation with Microsoft Access. 
    Dim intChan1 As Integer, strResults As String 
    intChan1 = DDEInitiate("MSAccess", "System") 
    ' Request list of topics supported by System topic. 
    strResults = DDERequest(intChan1, "SysItems") 
    ' Run OpenDatabase action to open Northwind.mdb. 
    ' You may need to change this path to point to actual location 
    ' of Northwind sample database. 
    DDEExecute intChan1, "[OpenDatabase C:\Access\Samples\Northwind.mdb]"

Tema de la base de datos

El tema database es el nombre de archivo de una base de datos existente. Puede escribir simplemente el nombre de la base de datos (Northwind), o su ruta de acceso y la extensión .mdb (C:\Access\Samples\Northwind.mdb). Tras iniciar una conversación DDE con la base de datos, puede solicitar una lista de los objetos incluidos en dicha base de datos.

Nota:

No se puede utilizar DDE para consultar el archivo de información de grupo de trabajo de Microsoft Access.

El tema database admite los siguientes elementos.

Elemento

Valores devueltos

TableList

Una lista de tablas

QueryList

Una lista de consultas

FormList

Una lista de formularios

ReportList

Una lista de informes

MacroList

Lista de macros

ModuleList

Una lista de módulos

ViewList

Una lista de vistas

StoredProcedureList

Una lista de procedimientos almacenados

DatabaseDiagramList

Una lista de diagramas de base de datos

El siguiente ejemplo muestra cómo se puede abrir el formulario Empleados en la base de datos de ejemplo Northwind desde un procedimiento de Visual Basic:

    ' In Visual Basic, initiate DDE conversation with 
    ' Northwind sample database. 
    ' Make sure database is open. 
    intChan2 = DDEInitiate("MSAccess", "Northwind") 
    ' Request list of forms in Northwind sample database. 
    strResponse = DDERequest(intChan2, "FormList") 
    ' Run OpenForm action and arguments to open Employees form. 
    DDEExecute intChan2, "[OpenForm Employees,0,,,1,0]"

Tema table

Estos temas utilizan la siguiente sintaxis:

databasename ; TABLEtablename

databasename ; QUERYqueryname

databasename ; SQL [ sqlstring ]

Parte

Descripción

databasename

El nombre de la base de datos donde se encuentra la tabla o consulta o a la que se aplica la instrucción SQL, seguido de un punto y coma (;). El nombre de la base de datos puede ser simplemente el nombre (Northwind) o su ruta de acceso completa y la extensión .mdb (C:\Access\Samples\Northwind.mdb).

tablename

El nombre de una tabla existente.

queryname

El nombre de una consulta existente.

sqlstring

Una instrucción SQL válida de hasta 256 caracteres que termina con un punto y coma. Para intercambiar más de 256 caracteres, omita este argumento y utilice instrucciones DDEPoke sucesivas para generar una instrucción SQL. Por ejemplo, el siguiente código de Visual Basic utiliza la instrucción DDEPoke para generar una instrucción SQL y, a continuación, solicita los resultados de la consulta.

La siguiente tabla muestra los elementos válidos para los temas TABLA nombretabla, CONSULTA nombreconsulta y SQL cadenasql.

Elemento

Valores devueltos

todas

Todos los datos de la tabla, incluidos los nombres de campo.

Datos

Todas las filas de datos, sin los nombres de campo.

FieldNames

Una lista de una sola fila con los nombres de campo.

FieldNames; T

Una lista de dos filas con los nombres de campo (primera fila) y los tipos de datos (segunda fila).

Estos son los valores devueltos:

Valor

  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

NextRow

Los datos en la siguiente fila de la tabla o consulta. Al abrir un canal, NextRow devuelve los datos de la primera fila. Si la fila actual es el último registro y ejecuta NextRow, se produce un error en la solicitud.

PrevRow

Los datos en la fila anterior de la tabla o consulta. Si PrevRow es la primera solicitud en un nuevo canal, se devolverán los datos en la última fila de la tabla o consulta. Si el primer registro es la fila actual, se produce un error en la solicitud de PrevRow.

FirstRow

Los datos en la primera fila de la tabla o consulta.

LastRow

Los datos en la última fila de la tabla o consulta.

FieldCount

El número de campos de la tabla o consulta.

SQLText

Una instrucción SQL que representa la tabla o consulta. En el caso de las tablas, este elemento devuelve una instrucción SQL con el formato "SELECT '*' FROM table;".

SQLText; n

Una instrucción SQL en fragmentos de n caracteres, que representa la tabla o la consulta y donde n es un entero hasta 256. Por ejemplo, supongamos que una consulta se representa mediante la siguiente instrucción SQL: el elemento "SQLText; 7" devuelve los siguientes fragmentos delimitados por tabulaciones: el elemento "SQLText; 7" devuelve los siguientes fragmentos delimitados por tabulaciones:

El siguiente ejemplo muestra cómo se puede utilizar DDE en un procedimiento de Visual Basic para solicitar datos de una tabla en la base de datos de ejemplo Northwind e insertar dichos datos en un archivo de texto:

    Sub NorthwindDDE 
        Dim intChan1 As Integer, intChan2 As Integer, intChan3 As Integer 
        Dim strResp1 As Variant, strResp2 As Variant, strResp3 As Variant 
     
        ' In a Visual Basic module, get data from Categories table, 
        ' Catalog query, and Orders table in Northwind.mdb. 
        ' Make sure database is open first. 
        intChan1 = DDEInitiate("MSAccess", "Northwind;TABLE Shippers") 
        intChan2 = DDEInitiate("MSAccess", "Northwind;QUERY Catalog") 
        intChan3 = DDEInitiate("MSAccess", "Northwind;SQL SELECT * " _ 
            & "FROM Orders " _ 
            & "WHERE OrderID > 10050;") 
     
        strResp1 = DDERequest(intChan1, "All") 
        strResp2 = DDERequest(intChan2, "FieldNames;T") 
        strResp3 = DDERequest(intChan3, "FieldNames;T") 
        DDETerminate intChan1 
        DDETerminate intChan2 
        DDETerminate intChan3 
     
        ' Insert data into text file. 
        Open "C:\DATA.TXT" For Append As #1 
        Print #1, strResp1 
        Print #1, strResp2 
        Print #1, strResp3 
        Close #1 
    End Sub