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
|
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