Pergunta

Estou redesenhando um aplicativo para um CMS ASP.NET do qual realmente não gosto.Fiz algumas melhorias no desempenho apenas para descobrir que esse CMS não apenas usa MS SQL, mas alguns usuários "simplesmente" usam o banco de dados MS Access.

O problema é que tenho algumas tabelas nas quais faço a junção interna, que com a versão MS Access estão em dois arquivos diferentes.Não tenho permissão para simplesmente mover as tabelas para outro arquivo mdb.

Agora estou tentando descobrir uma boa maneira de "junção interna" em vários arquivos db de acesso.

Seria realmente uma pena se eu buscasse todos os dados e fizesse isso programaticamente!

Obrigado

Foi útil?

Solução

Se você tiver acesso ao MDBS e conseguir alterá -los, considere usar tabelas vinculadas. O Access fornece a capacidade de vincular dados externos (em outros MDBs, em arquivos do Excel, mesmo no SQL Server ou Oracle) e, em seguida, você pode executar suas junções nos links.

Eu incentivaria fortemente o teste de desempenho de tal opção. Se for viável migrar os usuários dos bancos de dados de acesso para outro sistema (mesmo SQL Express), isso também seria preferível-pela última vez eu verifiquei, não há mais motoristas a jato de 64 bits para ODBC, por isso, se o aplicativo for hospedado em Um ambiente de 64 bits, esses usuários serão arremessados.

Outras dicas

Você não precisa de tabelas vinculadas.Existem duas abordagens para usar dados de diferentes MDBs que podem ser usados ​​sem uma tabela vinculada.A primeira é usar "IN 'c:\MyDBs\Access.mdb'" na cláusula FROM do seu SQL.Uma de suas consultas salvas seria como:

SELECT MyTable.*
FROM MyTable IN 'c:\MyDBs\Access.mdb'

e a outra consulta salva seria:

SELECT OtherTable.*
FROM OtherTable IN 'c:\MyDBs\Other.mdb'

Você poderia então salvar essas consultas e usá-las para unir as duas tabelas.

Alternativamente, você pode gerenciar tudo em uma única instrução SQL especificando o caminho para o MDB de origem para cada tabela na cláusula FROM assim:

SELECT MyTable.ID, OtherTable.OtherField
FROM [c:\MyDBs\Access.mdb].MyTable 
  INNER JOIN [c:\MyDBs\Other.mdb].OtherTable ON MyTable.ID = OtherTable.ID

Porém, tenha uma coisa em mente:

O otimizador de consulta Jet não será necessariamente capaz de usar os índices dessas tabelas para a junção (se irá usá-los para critérios em campos individuais é outra questão), então isso pode ser extremamente lento (em meus testes, não é, mas não estou usando grandes conjuntos de dados para testar).Mas esse problema de desempenho também se aplica a tabelas vinculadas.

Dentro de um DB de acesso, você pode criar "tabelas vinculadas" que apontam para o outro banco de dados. Você deve (eu acho) ser capaz de consultar as mesas como se ambas existissem no mesmo banco de dados.

Isso significa que você precisa alterar um dos DBs para criar a tabela virtual, mas pelo menos você não está realmente movendo os dados, apenas fazendo um ponteiro para isso

No acesso, você pode adicionar tabelas remotas através do "Linked Table Manager". Você pode adicionar os links a um arquivo de acesso ou outro, ou pode criar um novo arquivo de acesso que faz referência às tabelas nos dois arquivos. Depois disso, as consultas internas de jovens não são diferentes de fazê-las em um único banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top