Como aceder a várias bases de dados de uma consulta SQL no VB 3.0

Traduções de Artigos Traduções de Artigos
Artigo: 113701 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Ao aceder a dados de mais do que uma origem de dados em simultâneo numa única consulta, vai provavelmente querer utilizar o método mais rápido e mais geral--anexar as tabelas de diferentes origens de dados a uma base de dados único do Microsoft Access. Nessa altura, as consultas que abrangem duas bases de dados diferentes podem ser criadas como se todas as tabelas, anexadas ou locais, foram locais para a base de dados do Microsoft Access.
Anexar tabelas tem poderoso de desempenho e vantagens administrativas--especialmente se estiver a executar consultas repetidamente. No entanto, por vezes, poderá demorar a rota mais lenta descrita neste artigo quando necessitar de utilizar consultas ad hoc que contêm duas ou mais bases de dados. Este artigo explica como criar estas consultas entre bases de dados mais lentas.

Mais Informação

Existem dois métodos que pode utilizar para especificar uma base de dados fora aquele que está actualmente aberto.

Método um

Microsoft Access SQL fornece uma cláusula in que lhe permite ligar a uma base de dados externa (uma base de dados diferente da base de dados actual). Este método não, no entanto, limitar apenas uma base de dados externos de cada vez.

A cláusula IN tem duas partes, nome de base de dados e cadeia de ligação. O nome de base de dados é um caminho totalmente qualificado para o ficheiro ou directório que contém o ficheiro de base de dados e a cadeia de ligação contém o tipo de base de dados e outros parâmetros conforme necessário.

Para especificar uma base de dados externo, acrescente um ponto e vírgula (;) para a ligação parcial e coloque-o entre plicas ou aspas. O exemplo seguinte utiliza a cláusula in para especificar uma tabela (clientes) numa base 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, pode criar um dynaset do exemplo acima, utilizando o seguinte código de 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 motor do Microsoft Access incorporado no Visual Basic versão 3.0 pode analisar consultas SQL para incluir a cadeia de ligação utilizada para abrir um objecto de base de dados. A cláusula FROM da instrução SQL aceita um nome de tabela válido, que permite a Colocação de cadeia de ligação entre parêntesis rectos antes do nome da tabela. A cadeia de ligação é separada do nome de tabela por um período. Este método permite-lhe ligar a várias bases de dados externos ao mesmo tempo.

Pode aceder a qualquer tabela das duas bases de dados dentro de uma instrução de selecção única, utilizando 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 duas bases de dados diferentes, um uma origem de dados ODBC e o outro um dBASE III tabela no directório C:\DBASE3.

Em geral, a cadeia de ligação utilizada aqui entre parêntesis rectos é idêntica a propriedade ligar de um TableDef quando anexar ou o quarto parâmetro da instrução OpenDatabase. Será das três formas dependendo da base de dados (ODBC, ISAM ou Microsoft Office Access).

Para bases de dados ODBC:
   [odbc;dsn=datasource;database=thedatabasename;Username=<username>;
PWD=<strong password>]
				
bases 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]
				
bases de dados para o Microsoft Access:
   [;database=C:\VB\BIBLIO.MDB]
				
NOTA: o ponto e vírgula à esquerda para bases de dados do Microsoft Access é importante. Esta é exactamente a mesma cadeia necessária para preencher a propriedade ligar de um objecto TableDef antes de anexar a tabela a uma base de dados de formato do Microsoft Access. O ponto e vírgula à esquerda é um marcador de posição para a especificação de formato da base de dados desnecessários e permite que o "base de dados =" cláusula a seguir.

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

Este exemplo cria um dynaset associar duas tabelas de origens de dados de dois, um um SQL Server e a outra base de dados do Microsoft Access. A tabela TestTab é no SQL Server e a tabela T1 é a base de dados do Microsoft Access.

Nota <username>Tem de alterar <utilizador> e < palavra-passe segura > para os valores correctos antes de executar este código. Certifique-se que o nome de utilizador tem as permissões adequadas para efectuar esta operação na base 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
				

Nota especial sobre protegido por bases de dados do Microsoft Access

Se a base de dados do Microsoft Access estiver protegida, a aplicação do Visual Basic tem de executar o SetDataAccessOption e acessem a comandos SetDefaultWorkspace antes de executar quaisquer dados Código relacionado. Isto é necessário para um início de sessão com êxito porque o Microsoft Access não utiliza o "nome de utilizador ="e"PWD =" secções da cadeia de ligaçã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 tal acontece, as consultas para a base de dados protegida do Microsoft Access terá êxito. No entanto, tenha em atenção que, devido a este processo, existe um limite incorporado para esta técnica ad hoc; só protegido base de dados do Microsoft Access pode ser acedido por uma consulta ad hoc. Isto acontece porque depois do motor do Microsoft Access é inicializado numa sessão, com combinação de nome e palavra-passe de uma determinado utilizador, esses valores são retidos até a sessão (programa executável do Visual Basic ou sessão de ambiente, VB.EXE) termina.

No entanto, se necessitar de ser acedido por uma consulta de bases de dados do Microsoft Access seguras mais do que dois, é a melhor abordagem mover as tabelas reais da bases de dados seguras para uma base de dados protegida. Para efectuar este procedimento, terá de alterar a palavra-passe a conta de administrador para "" temporariamente durante as operações de transferência. Em seguida, pode utilizar código Visual Basic, tal como no exemplo de acesso a dados Visdata, para copiar as tabelas.

Referências

Para obter informações adicionais sobre segurança do Microsoft Access, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
105990INFO: Como Visual Basic 3.0 identificadores de segurança definida pelo Microsoft Access

Propriedades

Artigo: 113701 - Última revisão: 1 de setembro de 2006 - Revisão: 3.1
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á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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 113701
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com