Consultas do Access com um carácter universal não exportam dados para um documento XML

Este artigo aplica-se apenas a bases de dados do Microsoft Access (.mdb).


Moderado: requer conhecimentos básicos sobre macros, programação e interoperabilidade.

Sintomas

Quando exporta uma consulta do Access para um documento XML e a consulta contém um carácter universal do Microsoft Jet nos critérios como, por exemplo, um asterisco (*), os dados não são exportados para o documento XML. Consequentemente, o documento XML resultante não contém quaisquer dados.

A consulta funcionará correctamente se a executar com o Access.

Causa

Este comportamento ocorre quando exporta para XML. O XML utiliza ADO (ActiveX Data Objects) para consultar os dados da base de dados. Quando utiliza um carácter universal específico do Jet numa consulta do Access, a consulta não devolve registos. Este problema ocorre porque o ADO apenas reconhece caracteres universais ANSI (American National Standards Institute) 92.

Como contornar

Para contornar este problema, utilize um dos seguintes métodos:

  • Método 1

    Pode rescrever a consulta para substituir o carácter universal específico do Jet pelo carácter universal ANSI 92. Por exemplo, a consulta original pode ter um aspecto semelhante ao seguinte, com o carácter universal *:

    SELECT Clientes.CódigoDoCliente
    FROM Clientes
    WHERE (((Clientes.CódigoDoCliente) Like "A*"));

    Pode rescrever a consulta da seguinte forma:

    SELECT Clientes.CódigoDoCliente
    FROM Clientes
    WHERE (((Clientes.CódigoDoCliente) Like "A%"));

    Nota: se a base de dados do Access não estiver configurada para compatibilidade com ANSI 92, quando executar a consulta rescrita a partir do Access não serão devolvidos dados. Contudo, o documento XML exportado, baseado na consulta rescrita, devolve os resultados previstos.

  • Método 2

    Pode rescrever a consulta por forma a que os critérios da mesma não contenham caracteres universais. Por exemplo, a consulta original pode ter um aspecto semelhante ao seguinte, com o carácter universal *:

    SELECT Clientes.CódigoDoCliente
    FROM Clientes
    WHERE (((Clientes.CódigoDoCliente) Like "A*"));

    Pode rescrever a consulta da seguinte forma:

    SELECT Clientes.CódigoDoCliente
    FROM Clientes
    WHERE Left(CódigoDoCliente,1) = "A";
  • Método 3

    Quando exporta dados para um documento XML, pode especificar a aplicação de um filtro existente ao objecto. Em vez de especificar um carácter universal nos critérios da consulta, pode criar um filtro com a cadeia de filtragem equivalente ao critério pretendido (como "A*") e, em seguida, aplicar este filtro durante o processo de exportação para XML.

    Para tal, siga estes passos:

    1. Abra a base de dados de exemplo Adamastor.

    2. No menu Inserir, clique em Consulta.

    3. Na caixa de diálogo Nova consulta, seleccione Vista de estrutura e clique em OK.

    4. No menu Ver, clique em Vista de SQL.

    5. Na janela Consulta, cole a seguinte consulta:

      SELECT Clientes.CódigoDoCliente
      FROM Clientes;

      Nota: como pode constatar, o critério de consulta foi retirado. Consequentemente, a consulta não contém quaisquer caracteres universais.

    6. No menu Ficheiro, clique em Guardar.

    7. Na caixa Nome da consulta da caixa de diálogo Guardar como, escreva Consulta1.

    8. No menu Ver, clique em Vista de folha de dados.

    9. No menu Registos, aponte para Filtro e clique em Filtro/ordenação avançados....

    10. Na lista Campo, seleccione CódigoDoCliente.

    11. Na caixa Critério, abaixo de CódigoDoCliente, cole o seguinte código:

      Like "A*"
    12. No menu Filtro, clique em Aplicar filtro/ordenação....

    13. No menu Ficheiro, clique em Guardar.

    14. No menu Ficheiro, clique em Fechar.

    15. No janela Base de Dados, clique em Consultas.

    16. Clique com o botão direito do rato em Consulta1 e clique em Exportar.

    17. Na caixa de diálogo Exportar Consulta 'Consulta1' em..., seleccione XML na lista Guardar c/ o tipo e clique em Exportar.

    18. Na caixa de diálogo Exportar XML, clique em Mais opções.

    19. Na caixa de diálogo Exportar XML, seleccione o separador Dados. Em Registos a exportar, clique para seleccionar a caixa de verificação Aplicar filtro existente e clique em OK.

Ponto Da Situação

A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados no início deste artigo.

Mais Informação

Passos para reproduzir o problema

  1. Abra a base de dados de exemplo Adamastor.

  2. No menu Inserir, clique em Consulta.

  3. Na caixa de diálogo Nova consulta, seleccione Vista de estrutura e clique em OK.

  4. No menu Ver, clique em Vista de SQL.

  5. Na janela Consulta, cole a seguinte consulta:

    SELECT Clientes.CódigoDoCliente
    FROM Clientes
    WHERE (((Clientes.CódigoDoCliente) Like "A*"));
  6. Clique em Guardar no menu Ficheiro.

  7. Na caixa Nome da consulta da caixa de diálogo Guardar como, escreva Consulta1.

  8. No menu Ficheiro, clique em Fechar.

  9. Clique com o botão direito do rato em Consulta1 e clique em Exportar.

  10. Na caixa de diálogo Exportar Consulta 'Consulta1' em..., seleccione XML na lista Guardar c/ o tipo e clique em Exportar.

  11. Na caixa de diálogo Exportar XML, clique em OK para guardar os ficheiros relacionados com XML na localização predefinida.

  12. No Microsoft Internet Explorer, abra o ficheiro XML exportado.

    Pode constatar que o ficheiro XML exportado, com base na consulta especificada, não contém quaisquer registos.

Referências

Para obter mais informações sobre a sintaxe ANSI 92, escreva acerca do modo de consulta ansi sql no Assistente do Office e clique em Procurar.

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

×