DetailPage-MSS-KB

Base de Dados de Conhecimento

ID do artigo: 113701 - Última revisão: sexta-feira, 1 de setembro de 2006 - Revisão: 3.1

 

Nesta página

Sumário

Ao acessar dados de mais de uma fonte de dados simultaneamente em uma única consulta, você provavelmente vai querer usar o método mais rápido e mais geral--anexar as tabelas das fontes de dados diferentes a um único banco de dados Microsoft Access. Nesse ponto, consultas que se estendem por dois bancos de dados diferentes podem ser construídas como se todas as tabelas, locais, ou anexadas foram locais para o banco de dados do Microsoft Access.
Anexar tabelas tem desempenho poderoso e vantagens administrativas--principalmente se você está executando consultas repetidamente. No entanto, às vezes, é aconselhável levar a rota mais lenta descrita neste artigo quando você precisar usar consultas ad hoc que abrange dois ou mais bancos de dados. Este artigo explica como criar essas consultas de banco de dados mais lentas.

Mais Informações

Há dois métodos que você pode usar para especificar um banco de dados fora daquele aberto no momento.

Método um

SQL do Microsoft Access fornece uma cláusula IN que permite que você conectar-se a um banco de dados (um banco de dados diferente do atual banco de dados) externo. Esse método faz, no entanto, limitar você a apenas um banco de dados externo por vez.

A cláusula IN possui duas partes, nome do banco de dados e conectar seqüência de caracteres. O nome do banco de dados é um caminho totalmente qualificado para o arquivo ou pasta que contém o arquivo de banco de dados e a seqüência de conexão contém o tipo de banco de dados e outros parâmetros conforme necessário.

Para especificar um banco de dados externo, acrescente um ponto-e-vírgula (;) para a conexão parte e coloque-o entre aspas simples ou duplas. O exemplo a seguir utiliza a cláusula IN para especificar uma tabela (clientes) em um banco de dados dBASE IV (vendas):
SELECT Customers.CustomerID
FROM Customers
IN "C:\DBASE\DATA\SALES" "dBASE IV;"
WHERE Customers.CustomerID Like "A*"
				
no Visual Basic, você pode criar um dynaset do exemplo acima, usando o seguinte código do Visual Basic:
Dim db As Database
Dim ds As Dynaset
Dim sql As String

' Open a database:
Set db = OpenDatabase("C:\VB\BIBLIO.MDB")

' Build the select statement, referencing the external dBASE IV file:
sql = "SELECT Customers.CustomerID, FROM Customers"
sql = sql & " IN 'C:\DBASE\DATA\SALES' 'dBASE IV;'"
sql = sql & " WHERE Customers.CustomerID Like 'A*'"

' Create the recordset:
Set ds = db.CreateDynaset(sql)

' Loop through and display the records:
While Not ds.EOF
   For i = 0 To ds.Fields.Count - 1
      Print ds(i); "  ";
   Next i
   Print
   ds.MoveNext
Wend
				

Método dois

O mecanismo incorporado ao Visual Basic versão 3.0 do Microsoft Access pode analisar consultas SQL para incluir a seqüência de conexão usada para abrir um objeto de banco de dados. A cláusula FROM da instrução SQL aceita um nome de tabela totalmente qualificado, que permite a colocação da seqüência de conexão entre colchetes antes o nome da tabela. A seqüência de conexão é separada do nome da tabela por um período. Esse método permite que você se conectar a vários bancos de dados externos ao mesmo tempo.

Você pode acessar qualquer tabela em um dos dois bancos de dados dentro de uma única instrução select usando esta sintaxe:
SELECT tbl1.fld1,tbl2.fld1
FROM [odbc;dsn=datasource;database=pubs;Username= <username>;PWD=<strong password>].tbl1,
[dbase iii;database=C:\DBASE3].tbl2
WHERE tbl1.fld1 = tbl2.fld1
				
Este exemplo associa duas tabelas de dois bancos de dados diferentes, uma tabela uma fonte de dados ODBC e o outro um dBASE III no diretório C:\DBASE3.

Em geral, a seqüência de conexão usada aqui entre colchetes é idêntica ao quarto parâmetro da instrução OpenDatabase ou a propriedade Connect de uma TableDef ao anexar. Será em um dos três formulários dependendo do banco de dados (ODBC, ISAM ou Microsoft Access).

Para bancos de dados ODBC:
   [odbc;dsn=datasource;database=thedatabasename;Username=<username>;
PWD=<strong password>]
				
bancos de dados ISAM para:
   [paradox 3.X;database=C:\DATABASE\PARADOX3]
   [foxpro 2.5;database=C:\DATABASE\FOX25]
   [dbase iv;database=C:\DATABASE\DBASEIV]
   [btrieve;database=C:\DATABASE\BTRIEVE\FILE.DDF]
				
bancos de dados para o Microsoft Access:
   [;database=C:\VB\BIBLIO.MDB]
				
Observação o ponto-e-vírgula à esquerda para bancos de dados do Microsoft Access é importante. Isso é exatamente a mesma seqüência necessária para preencher a propriedade Connect de um objeto TableDef antes de anexar a tabela a um banco de dados do formato Microsoft Access. O ponto-e-vírgula à esquerda é um espaço reservado para a especificação de formato de banco de dados desnecessários e permite que o "banco de dados =" cláusula execute.

Exemplo de código de uma consulta de banco de dados múltiplos

Este exemplo cria um dynaset associação de duas tabelas de duas fontes de dados, um um SQL Server e o outro é um banco de dados Microsoft Access. A tabela TestTab é no SQL Server e a tabela T1 é no banco de dados Microsoft Access.

Observação <username>Você deve alterar <nomedousuário> e < senha de alta segurança > para os valores corretos antes de executar esse código. Certifique-se que o nome de usuário tenha as permissões apropriadas para executar esta operação no banco de dados.
Dim db As database
Dim ds As dynaset
Dim sql As String, Uid$, Pwd$

Set db = OpenDatabase("C:\VB\BIBLIO.MDB")
' This obtains a valid database object. It does not have to be a Microsoft
' Access database; the following works equally as well:
' Set db = OpenDatabase("C:\FOXPRO25\", 0, 0, "foxpro 2.5")

' The values here are hard-coded, but you could prompt the user for their
' user id and password.
Uid$ = <username>
Pwd$ = <strong password>

' Build the select statement, concatenating the user's id and password:
sql = "SELECT T1.F2, TestTab.F2, TestTab.F3"
sql = sql & " FROM [;database=C:\ACCESS\DB1.MDB].T1 , "
sql = sql & " [odbc;dsn=texas;database=playpen;Username=" & Uid$
sql = sql & ";PWD=" & Pwd$ & "].TestTab"
sql = sql & " WHERE T1.F1 = TestTab.F1"

' Execute the select query:
Set ds = db.CreateDynaset(sql)

' Loop through and display the records:
While Not ds.EOF
   For i = 0 To ds.Fields.Count - 1
      Print ds(i); "  ";
   Next i
   Print
   ds.MoveNext
Wend
				

Quanto de Observação especial protegidos bancos de dados Microsoft Access

Se o banco de dados Microsoft Access estiver protegido, o aplicativo Visual Basic deve executar o SetDataAccessOption e comandos SetDefaultWorkspace antes de executar quaisquer dados acessar código relacionado. Isso é necessário para um logon bem-sucedido porque o Microsoft Access não usa o "Username ="e"PWD =" seções da seqüência de conexão. Por exemplo:
   ' Establish the location of the SYSTEM.MDA files if in another
   ' directory other than the \WINDOWS directory:
   SetDataAccessOption 1, "C:\MYDIR\MYAPP.INI"
   ' Log on to a valid account:
   SetDefaultWorkspace "admin", "<password>"
				
quando isso for feito, consultas para o banco de dados protegido do Microsoft Access terá êxito. No entanto, observe que devido esse processo, há uma limitação interna para essa técnica ad hoc; protegidos de apenas um banco de dados do Microsoft Access podem ser acessado com uma consulta ad hoc. Isso ocorre porque depois que o mecanismo do Microsoft Access é inicializado em uma sessão, com uma combinação de nome e senha de usuário específico, esses valores são mantidos até que a sessão (programa executável do Visual Basic ou sessão do ambiente, VB.EXE) termina.

No entanto, se os bancos de mais de dois protegidos dados do Microsoft Access precisará ser acessado para uma consulta, a melhor abordagem é mover as tabelas reais de bancos de dados protegidos em um banco de dados protegido. Para fazer isso, você precisará alterar a senha para a conta de administrador para "" temporariamente durante as operações de transferência. Em seguida, você pode usar código do Visual Basic, como no exemplo de acesso a dados Visdata, para copiar as tabelas.

Referências

Para obter informações adicionais sobre a segurança, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
105990  (http://support.microsoft.com/kb/105990/ ) INFO: Como Visual Basic 3.0 identificadores de segurança definida pelo Microsoft Access

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 3.0 Professional Edition
Palavras-chave: 
kbmt kbhowto kbsqlprog KB113701 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 113701  (http://support.microsoft.com/kb/113701/en-us/ )
Retired KB ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.
Compartilhar
Opções de suporte adicionais
Fóruns de Suporte do Microsoft Community
Contate-nos diretamente
Localize um parceiro certificado da Microsoft
Microsoft Store