Compartilhar via


Usar o Microsoft Access como um servidor DDE

Aplica-se ao: Access 2013, Office 2013

O Microsoft Access dá suporte à DDE (troca dinâmica de dados) como um aplicativo de destino (cliente) ou um aplicativo de origem (servidor). Por exemplo, um aplicativo como Microsoft Word, funcionando como um cliente, pode solicitar dados através da DDE de um banco de dados do Microsoft Access que esteja funcionando como servidor.

Dica

[!DICA] Caso você precise manipular objetos do Microsoft Access a partir de outro aplicativo, convém considerar o uso da Automação.

Uma conversação DDE entre um cliente e servidor é estabelecida em um tópico específico. Um tópico pode ser um arquivo de dados em um formato com suporte do aplicativo servidor ou o tópico System, que fornece informações sobre o próprio aplicativo servidor. Depois de uma conversação ter começado sobre um determinado tópico, apenas um item de dados associado a esse tópico pode ser transferido.

Por exemplo, suponha que você esteja executando o Microsoft Word e queira inserir dados de um banco de dados específico do Microsoft Access em um documento. Comece uma conversação DDE com o Microsoft Access abrindo um canal DDE com a função DDEInitiate e especificando o nome do arquivo de banco de dados como o tópico. Em seguida, será transferir os dados daquele banco de dados para o Microsoft Word por meio desse canal.

Como um servidor DDE, o Microsoft Access dá suporte a estes tópicos:

  • O tópico System

  • O nome de um banco de dados (tópico database)

  • O nome de uma tabela (tópico tablename)

  • O nome de uma consulta (tópico queryname)

  • Uma cadeia SQL do Microsoft Access (tópico sqlstring)

Depois de estabelecer uma conversação DDE, pode utilizar a instrução DDEExecute para enviar um comando do cliente para a aplicação de servidor. Quando usado como um servidor DDE, o Microsoft Access reconhece qualquer um destes como comandos válidos:

  • O nome de uma macro no banco de dados atual.

  • Qualquer ação executável no Visual Basic através de um dos métodos do objeto DoCmd.

  • As ações AbrirBancoDeDados e FecharBancoDeDados, usadas somente para operações DDE. (Um exemplo de como usar essas ações encontra-se adiante neste tópico).

Observação

[!OBSERVAçãO] Quando você especifica uma ação de macro como uma instrução DDEExecute, a ação e quaisquer argumentos seguem a sintaxe do objeto DoCmd e precisam vir entre colchetes ([ ]). No entanto, aplicativos que dão suporte à DDE não reconhecem constantes intrínsecas em operações DDE. Além disso, argumentos de cadeias de caracteres precisam vir entre aspas (" ") se a cadeia contiver uma vírgula. Senão, as aspas são desnecessárias.

O aplicativo cliente pode usar a função DDERequest para solicitar dados de texto do aplicativo servidor através de um canal DDE aberto. Outra alternativa é o cliente usar a instrução DDEPoke para enviar dados ao aplicativo servidor. Após a conclusão da transferência de dados, o cliente pode utilizar a instrução DDETerminate para fechar o canal DDE ou a instrução DDETerminateAll para fechar todos os canais abertos.

Observação

[!OBSERVAçãO] Quando o aplicativo cliente termina de receber dados através de um canal DDE, deve fechar aquele canal para poupar recursos de memória.

O exemplo a seguir demonstra como criar um procedimento do Microsoft Word com Visual Basic que usa o Microsoft Access como um servidor DDE. (Para este exemplo funcionar, o Microsoft Access deve estar sendo executado).

    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

As seções a seguir fornecem informações sobre os tópicos DDE válidos com suporte do Microsoft Access.

O tópico System

O tópico System é um tópico padrão para todos os aplicativos baseados no Microsoft Windows. Ele fornece informações sobre os outros tópicos com suporte do aplicativo. Para aceder a estas informações, o código tem primeiro de chamar a função DDEInitiate com o argumento de tópico e, em seguida, executar a instrução DDERequest com uma das seguintes indicações para o argumento item .

Item

Retorna

SysItems

Uma lista de itens com suporte do tópico Sistema no Microsoft Access.

Formats

Uma lista dos formatos que o Microsoft Access consegue copiar para a área de transferência.

Status

"Ocupado" ou "Pronto".

Tópicos

Uma lista de todos os bancos de dados abertos.

O exemplo a seguir demonstra o uso das funções DDEInitiate e DDERequest com o tópico 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]"

O tópico da base de dados

O tópico database é o nome do arquivo de um banco de dados existente. Você pode digitar apenas o nome básico (Northwind) ou seu caminho e extensão .mdb (C:\Access\Exemplos\Northwind.mdb). Após iniciar uma conversação DDE com o banco de dados, você pode solicitar uma lista dos objetos naquele banco de dados.

Observação

Não é possível usar a DDE para consultar o arquivo de informações do grupo de trabalho do Microsoft Access.

O tópico database oferece suporte aos seguintes itens.

Item

Retorna

TableList

Uma lista de tabelas

Lista de Consultas

Uma lista de consultas

Lista de Formulários

Uma lista de formulários

ReportList

Uma lista de relatórios

Lista de Macros

Uma lista de macros

ModuleList

Uma lista de módulos

ViewList

Uma lista de modos.

StoredProcedureList

Uma lista de procedimentos armazenados.

DatabaseDiagramList

Uma lista de diagramas de bancos de dados.

O exemplo a seguir mostra como abrir o formulário Employees no exemplo de banco de dados Northwind a partir de um procedimento do 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]"

O tópico TABELA

Esses tópicos usam a seguinte sintaxe:

databasename ; Tabletablename

databasename ; QueRYqueryname

databasename ; SQL [ sqlstring ]

Sair

Descrição

databasename

O nome do banco de dados em que está a tabela ou consulta ou a que se aplica o SQL, seguido de ponto-e-vírgula (;). O nome do banco de dados pode ser apenas o nome básico (Northwind) ou seu caminho e extensão .mdb completos (C:\Access\Exemplos\Northwind.mdb).

nome da tabela

O nome de uma tabela existente.

nome da consulta

O nome de uma consulta existente.

sqlstring

Uma instrução SQL válida com até 256 caracteres e terminando com ponto-e-vírgula. Para trocar mais de 256 caracteres, omita esse argumento e, em seu lugar, use sucessivas instruções DDEPoke para formar uma instrução SQL. Por exemplo, o seguinte código Visual Basic utiliza a instrução DDEPoke para formar uma instrução SQL e, em seguida, solicitar os resultados de uma consulta.

A tabela a seguir lista os itens válidos para os tópicos TABELA tablename, CONSULTA queryname e SQL sqlstring.

Item

Retorna

Todos

Todos os dados na tabela, incluindo nomes de campos.

Data

Todas as linhas de dados, sem nomes de campos.

FieldNames

Uma lista de linha única de nomes de campos.

Nomes de Campo; T

Uma lista de duas linhas de nomes de campos (primeira linha) e seus tipos de dados (segunda linha).

Estes são os valores devolvidos:

Valor

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

NextRow

Os dados na próxima linha da tabela ou consulta. Quando você abre um canal, NextRow retorna os dados da primeira linha. Se a linha atual for o último registro e você executar NextRow, a solicitação falhará.

PrevRow

Os dados na linha anterior da tabela ou consulta. Se PrevRow for a primeira solicitação em um novo canal, os dados na última linha da tabela ou consulta serão retornados. Se o primeiro registro for a linha atual, a solicitação a PrevRow falhará.

FirstRow

Os dados na primeira linha da tabela ou consulta.

LastRow

Os dados na última linha da tabela ou consulta.

FieldCount

O número de campos na tabela ou consulta.

SQLText

Uma instrução SQL representando a tabela ou consulta. Para tabelas, este item devolve uma instrução SQL no formulário "SELECT '*' FROM table;".

SQLText; n

Uma instrução SQL, em partes de n caracteres, representando a tabela ou consulta, onde n é um inteiro de até 256 caracteres. Por exemplo, suponha que uma consulta é representada pela seguinte instrução SQL: o item "SQLText; 7" devolve os seguintes segmentos delimitados por separadores: o item "SQLText; 7" devolve os seguintes segmentos delimitados por tabulações:

O exemplo a seguir mostra como usar DDE em um procedimento do Visual Basic para solicitar dados de uma tabela no exemplo de banco de dados Northwind e inserir os dados em um arquivo 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