如何存取在 SQL 查詢的 VB 3.0 中的多個資料庫

文章翻譯 文章翻譯
文章編號: 113701 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

從一個以上的資料來源,同時在單一查詢存取資料時, 您可能要使用最快且最一般性方法--將資料表不同資料來源附加到單一的 Microsoft Access 資料庫。在該點的所有資料表,附加或本機,就像 Microsoft Access 資料庫的本機,可以建構跨越兩個不同資料庫的查詢。
貼附資料表有功能強大的效能和系統管理的優點--,特別是如果您重複執行的查詢。不過,有時您可能要花較慢的路由需要使用包含兩個或多個資料庫的臨機操作查詢時,本文中所述。本文將告訴您如何建構這些較慢的跨資料庫查詢。

其他相關資訊

有兩種方法可以讓您指定目前開啟的外部資料庫。

方法 1

Microsoft Access SQL 提供可讓您連接至外部資料庫 (目前資料庫以外的資料庫) 的 IN 子句。這個方法不會不過,限制您只能有一個外部資料庫一次。

IN 子句有資料庫名稱和連接字串的兩個部份。資料庫名稱是檔案或包含資料庫檔案的目錄的完整路徑,並連接字串包含資料庫類型和視需要其他參數。

若要指定外部資料庫,將附加一個分號 (;) 連接到組件,並與單一或雙引號括住它。下列範例會使用 IN 子句指定資料表 (客戶) 在 dBASE IV 資料庫 (銷售額):
SELECT Customers.CustomerID
FROM Customers
IN "C:\DBASE\DATA\SALES" "dBASE IV;"
WHERE Customers.CustomerID Like "A*"
				
在 Visual Basic 您可以建立一個動態集從上述的範例使用下列的 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
				

方法二

併入 Visual Basic 版本 3.0,Microsoft Access 引擎可以剖析 SQL 查詢,以包含用來開啟資料庫物件的連接字串。自子句的 SQL 陳述式會接受允許在資料表名稱前的方括號中的連接字串的位置的一個完整的資料表] 名稱。連接字串是以句號分隔從資料表名稱。這個方法可讓您同時連線到多個外部資料庫。

您可以使用此語法來存取任何資料表中任一個單一的選取陳述式內的兩個資料庫:
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
				
這個範例聯結兩個資料表,從兩個不同資料庫、 一個 ODBC 資料來源,另一個 dBASE III 資料表 C:\DBASE3 目錄中。

在一般用方括弧括住在這裡的連接字串是與 TableDef 時附加的 [連線] 屬性或 OpenDatabase 陳述式的第四個參數相同的。它會在其中一個根據資料庫 (ODBC、 ISAM 或 Microsoft Access) 的三個表單。

對於 ODBC 資料庫:
   [odbc;dsn=datasource;database=thedatabasename;Username=<username>;
PWD=<strong password>]
				
For ISAM 資料庫:
   [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]
				
對於 Microsoft Access 資料庫:
   [;database=C:\VB\BIBLIO.MDB]
				
附註 對於 Microsoft Access 資料庫前置字元的分號是很重要。 這是完全相同的字串需要填 TableDef 物件的 [連線屬性之前,先將資料表附加到 Microsoft Access 格式資料庫中。前置字元的分號是不必要的資料庫格式規格的預留位置,並允許"資料庫 ="子句遵循。

多個資料庫查詢的程式碼範例

本範例建立聯結從兩個資料來源一個 SQL Server,另一個 Microsoft Access 資料庫中的兩個資料表的動態集中。TestTab 資料表是在 SQL Server,T1 資料表是 Microsoft Access 資料庫。

附註您必須變更 <username>和 < 強式密碼 > 為正確的值在執行這個程式碼之前。請確定使用者名稱具有適當的權限,才能執行這項作業在資料庫上。
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
				

取得關於特殊筆記保護 Microsoft Access 資料庫

若保全的 Microsoft Access 資料庫 Visual Basic 應用程式必須執行 [SetDataAccessOption,而且 SetDefaultWorkspace 指令執行的任何資料之前,先存取相關的程式碼。這是必要的成功登入,因為 Microsoft Access 並不會使用"使用者名稱 ="和"PWD ="的連接字串區段。例如:
   ' 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>"
				
保全的 Microsoft Access 資料庫的查詢時這完成會成功。不過,請注意因為此程序沒有內建的限制為這個臨機操作的技術 ; 只有一個保護 Microsoft Access 資料庫中可以存取與臨機操作查詢。這是因為一旦 Microsoft Access 引擎初始化一個工作階段與一個特定的使用者名稱和密碼組合中那些值會保留直到工作階段 (Visual Basic 的可執行程式或環境 VB.EXE 的工作階段) 結束。

不過,如果兩個以上安全的 Microsoft Access 資料庫需要存取查詢,最好的方法是將實際的資料表從安全的資料庫移到一個保全的資料庫。若要執行此動作,您需要變更系統管理員帳戶密碼""暫時在傳輸作業期間。然後您可以使用 Visual Basic 程式碼如資料存取範例 Visdata 中的複製資料表。

?考

如 Microsoft Access 安全性的其他有關,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
105990資訊: Visual Basic 3.0 處理的方式由 Microsoft Access 所設定的安全性

屬性

文章編號: 113701 - 上次校閱: 2006年9月1日 - 版次: 3.1
這篇文章中的資訊適用於:
  • Microsoft Visual Basic 3.0 Professional Edition
關鍵字:?
kbmt kbhowto kbsqlprog KB113701 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:113701
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。

提供意見

 

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