Partilhar via


Ligar aplicações Access para SQL Server e Azure SQL (AccessToSQL)

Se quiser usar as suas aplicações Access existentes com SQL Server, pode ligar as suas tabelas Access originais às tabelas SQL Server ou Azure SQL migradas. A ligação modifica a sua base de dados Access para que as suas consultas, formulários, relatórios e páginas de acesso a dados utilizem os dados do SQL Server ou Azure SQL Database em vez dos dados da sua base de dados Access.

Observação

As suas tabelas do Access permanecem no Access, mas não são atualizadas juntamente com as atualizações no SQL Server ou no Azure SQL. Depois de ligares as tabelas e verificares a funcionalidade, talvez queiras eliminar as tuas tabelas Access.

Quando ligas uma tabela Access a uma tabela SQL Server ou Azure SQL, o motor de base de dados Jet armazena informação de ligação e metadados da tabela, mas os dados são armazenados no SQL Server ou Azure SQL. Esta ligação permite que as suas aplicações Access operem contra as tabelas de Acesso mesmo que as tabelas e dados reais estejam no SQL Server ou Azure SQL.

Observação

Se usar autenticação SQL Server, a sua palavra-passe é armazenada em texto claro nas tabelas de acesso ligadas. Use autenticação Windows em vez disso.

  1. No Access Metadata Explorer, selecione as tabelas que quer ligar.

  2. Clique com o botão direito em Tabelas e depois selecione Link.

O SQL Server Migration Assistant (SSMA) para Access faz backup da tabela Access original e cria uma tabela ligada.

Depois de ligares as tabelas, as tabelas no SSMA aparecem com um pequeno ícone de ligação. No Access, as tabelas aparecem com um ícone "ligado", que é um globo com uma seta a apontar para ele.

Quando abres uma tabela no Access, os dados são recuperados usando um cursor de keyset. Como resultado, para tabelas grandes, os dados não são recuperados todos de uma vez. No entanto, à medida que navega pela tabela, o Access recupera mais dados conforme necessário.

Importante

Para ligar tabelas Access a uma base de dados Azure, precisa do SQL Server Native Client (SNAC) versão 10.5 ou posterior. Obtenha a versão mais recente do SNAC no Microsoft SQL Server 2008 R2 Feature Pack. O SNAC foi removido no SQL Server 2022 (16.x).

Quando desvincula uma tabela Access de uma tabela SQL Server ou Azure SQL, o SSMA restaura a tabela Access original e os seus dados.

  1. No Access Metadata Explorer, selecione as tabelas que quer desvincular.

  2. Clique com o botão direito em Tabelas e depois selecione Remover ligação.

Se ligares as tabelas de acesso a uma instância do SQL Server e mais tarde quiseres mudar as ligações para outra instância, tens de voltar a ligar as tabelas.

  1. No Access Metadata Explorer, selecione as tabelas que quer desvincular.

  2. Clique com o botão direito do rato em Tabelas e depois selecione Desvincular.

  3. Selecione o botão Reconectar ao SQL Server .

  4. Liga-te à instância do SQL Server ou Azure SQL à qual queres ligar as tabelas de acesso.

  5. No Access Metadata Explorer, selecione as tabelas que quer ligar.

  6. Clique com o botão direito em Tabelas e depois selecione Link.

Atualizar tabelas ligadas

Se alterar as definições de tabelas SQL Server ou Azure SQL, pode desvincular e depois voltar a ligar as tabelas no SSMA utilizando os procedimentos mostrados anteriormente neste artigo. Também pode atualizar as tabelas usando o Access.

  1. Abra a base de dados do Access.

  2. Na lista de Objetos , selecione Tabelas.

  3. Clique com o botão direito numa tabela ligada e depois selecione Gestor de Tabelas Ligadas.

  4. Seleciona a caixa de seleção ao lado de cada tabela ligada que queres atualizar e depois seleciona OK.

Possíveis problemas pós-migração

As secções seguintes listam problemas que podem ocorrer em aplicações Access existentes após migrar bases de dados do Access para SQL Server ou Azure SQL e depois ligar as tabelas. As secções também descrevem as causas e as soluções para estas questões.

Desempenho lento com tabelas associadas

Causa: Algumas consultas podem ser lentas após o aumento de tamanho pelas seguintes razões:

  • A aplicação depende de funções que não existem no SQL Server ou Azure SQL. O Jet descarrega tabelas localmente para executar uma SELECT consulta.

  • O Jet envia consultas que atualizam ou eliminam muitas linhas como uma consulta parametrizada para cada linha.

Resolução: Converter as consultas de execução lenta em consultas de passagem direta, procedimentos armazenados ou vistas. A conversão para consultas pass-through tem os seguintes problemas:

  • Não podes modificar consultas de passagem. Deve modificar o resultado da consulta ou adicionar novos registos de uma forma alternativa. Por exemplo, pode ter botões explícitos de Modificar ou Adicionar no seu formulário que estejam associados à consulta.

  • As consultas pass-through não suportam entrada do utilizador, mas algumas consultas requerem input do utilizador. Pode usar o Visual Basic for Applications (VBA) para pedir parâmetros ou obter input do utilizador através de um formulário. Em ambos os casos, o código VBA submete a consulta com a entrada do utilizador ao servidor.

As colunas de autoincremento não são atualizadas até que o registo seja atualizado

Causa: Depois de chamar o RecordSet.AddNew no Jet, a coluna de autoincremento está disponível antes de o registo ser atualizado. Esta condição não é verdadeira no SQL Server ou Azure SQL. O novo valor da coluna de identidade só está disponível após guardar o novo registo.

Resolução: Execute o seguinte código Visual Basic para Aplicações (VBA) antes de aceder ao campo identidade:

Recordset.Update
Recordset.Move 0,
Recordset.LastModified

Novos discos não estão disponíveis

Causa: Quando adicionas um registo a uma tabela SQL Server ou Azure SQL usando VBA, se o campo de índice único da tabela tiver um valor predefinido e não atribuires valor a esse campo, o novo registo só aparece quando reabrires a tabela no SQL Server ou Azure SQL. Se tentar obter um valor do novo registo, recebe a seguinte mensagem de erro:

Run-time error '3167' Record is deleted.

Resolução: Quando abrir a tabela SQL Server ou Azure SQL usando código VBA, inclua a dbSeeChanges opção, como no seguinte exemplo:

Set rs = db.OpenRecordset("TestTable", dbOpenDynaset, dbSeeChanges)

Após a migração, algumas consultas não permitem ao utilizador adicionar um novo registo

Causa: Se uma consulta não incluir todas as colunas que estão incluídas num índice único, não pode adicionar novos valores usando a consulta.

Resolução: Certifique-se de que todas as colunas incluídas em pelo menos um índice único fazem parte da consulta.

Não podes modificar um esquema de tabela ligada usando o Access

Causa: Depois de migrar dados e ligar tabelas, não pode modificar o esquema de uma tabela no Access.

Resolução: Modificar o esquema da tabela usando o SQL Server Management Studio e depois atualizar o link no Access.

Causa: Depois de os dados serem migrados, os hiperlinks nas colunas perdem a sua funcionalidade e tornam-se simples colunas nvarchar(max ).

Resolução: Nenhuma.

O Access não suporta alguns tipos de dados SQL Server

Causa: Se atualizar as suas tabelas SQL Server ou Azure SQL para incluir tipos de dados que o Access não suporta, não pode abrir a tabela no Access.

Resolução: Defina uma consulta de acesso que devolve apenas linhas com tipos de dados suportados.