none
想問一下:如何在vb6中查詢二個access資料庫的資料表? RRS feed

  • 問題

  • 假設現在二個資料庫, a.mdb 及 b.mdb
    二個資料庫的資料格式一樣及表名稱一樣,可以理解為b.mdb是a.mdb的後續未完結資料..
    以下為定義連結a.mdb數據庫時的編碼:

    Private Sub Form_Load()
    Dim SqlStr As String
        SqlStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                  App.Path & "\mdb\a.mdb;Persist Security Info=False"
        DBCnn.Open SqlStr  
    End Sub

    請教如何定義(編寫)SqlStr 以實現能同時連接到a.mdb及b.mdb中資料?
    萬分感謝..因為這個問題困擾了我數天,一直找不到答案,先謝過各位的幫忙~
    2008年4月6日 下午 04:32

解答

  • OleDb 可用 In 子句做外部資料庫查詢。

     

    有安裝 Access 2002/2003 的,在電腦找這個說明檔:JETSQL40.CHM

     

    我用 Access 2007 ,所以從舊版的備份參考:

    Code Snippet

     

    IN 子句

    Microsoft Jet 資料庫引擎可以連接到的外部資料庫中定義資料表,例如 dBASE 或 Paradox 資料庫或外部 Microsoft Jet 資料庫。

    語法

    指定目的地資料表:

    [SELECT | INSERT] INTO destination IN
        {path | ["path" "type"] | ["" [type; DATABASE = path]]}

    指定資料來源資料表:

    FROM tableexpression IN
        {path | ["path" "type"] | ["" [type; DATABASE = path]]}

    一個 SELECT 陳述式包含一個 IN 子句,可分為以下幾個部份:

    部份 敘述
    destination 將資料插入其中的外部資料表之名稱。
    tableexpression 從其中擷取資料的一個或多個資料表之名稱。 此引數可為單一資料表名稱、一個已儲存的查詢,或由 INNER JOINLEFT JOINRIGHT JOIN 合成的結果。
    Path 包含了 table 的目錄或檔案的整個路徑。
    type 用以建立 table 的資料庫類型之名稱,如果資料庫不為 Microsoft Jet 資料庫 (例如 dBASE III、dBASE IV、Paradox 3.x、或Paradox 4.x)。

    註解

    您可以使用 IN 子句一次連接一個外部資料庫

    在某些狀況之中,path 引數可參照至包含資料庫檔案的目錄。 例如,當使用 dBASE、FoxPro 或 Paradox 資料庫資料表,path 引數將指定包含 .dbf 或 .db 檔案的目錄。 由 destination tableexpression 引數可得到資料表檔案的名稱。

    指定非 Microsoft Jet 資料庫,名稱後面需附加分號 (;),並且將它包含在單引號 (' ') 或 (" ") 雙引號之中。 例如 'dBASE IV;' 或 "dBASE IV;",以上兩種寫法皆可接受。

    您亦可以使用 DATABASE 保留字指定外部資料庫。 例如,以下範例為指定相同的資料表:

    ... FROM Table IN "" [dBASE IV; DATABASE=C:\DBASE\DATA\SALES;];

    ... FROM Table IN "C:\DBASE\DATA\SALES" "dBASE IV;"


    備註

    為了改善執行效能及易於使用,請使用連結資料表而非 IN。

    在一個運算式之中,您亦可以使用 IN 保留字為比較運算子。 若需更多資訊,請參閱 In運算子。

     

     

    另外這邊有匯入匯出的 In 子句範例:

    In 子句的使用範例 http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!1290.entry

    2008年4月8日 上午 05:39
    版主

所有回覆

  • 要連線兩個 Access 資料庫,必須要用兩個 OleDbConnection,寫二個 connection string 才行,不像 SQL Server 可以直接以 Transact-SQL 來連接兩個資料庫。
    2008年4月7日 上午 12:06
    版主
  • 如果寫二個 connection string
    那就是說不能用一個變數
    SqlStr確定嗎?是不是這樣,
    寫二個 connection string會出現一個問題,例如我要查詢圖書資料,找出a.mdb及b.mdb的相同出版社以顯示在同一ListView,那麼用二個connection string能夠實行嗎?亦或還有沒有其他方法?  感謝你的答覆

    2008年4月7日 上午 04:13
  • 除了使用兩個 connection string,然後個別開啟連線外,沒有其他方法。

    2008年4月7日 上午 04:31
    版主
  • OleDb 可用 In 子句做外部資料庫查詢。

     

    有安裝 Access 2002/2003 的,在電腦找這個說明檔:JETSQL40.CHM

     

    我用 Access 2007 ,所以從舊版的備份參考:

    Code Snippet

     

    IN 子句

    Microsoft Jet 資料庫引擎可以連接到的外部資料庫中定義資料表,例如 dBASE 或 Paradox 資料庫或外部 Microsoft Jet 資料庫。

    語法

    指定目的地資料表:

    [SELECT | INSERT] INTO destination IN
        {path | ["path" "type"] | ["" [type; DATABASE = path]]}

    指定資料來源資料表:

    FROM tableexpression IN
        {path | ["path" "type"] | ["" [type; DATABASE = path]]}

    一個 SELECT 陳述式包含一個 IN 子句,可分為以下幾個部份:

    部份 敘述
    destination 將資料插入其中的外部資料表之名稱。
    tableexpression 從其中擷取資料的一個或多個資料表之名稱。 此引數可為單一資料表名稱、一個已儲存的查詢,或由 INNER JOINLEFT JOINRIGHT JOIN 合成的結果。
    Path 包含了 table 的目錄或檔案的整個路徑。
    type 用以建立 table 的資料庫類型之名稱,如果資料庫不為 Microsoft Jet 資料庫 (例如 dBASE III、dBASE IV、Paradox 3.x、或Paradox 4.x)。

    註解

    您可以使用 IN 子句一次連接一個外部資料庫

    在某些狀況之中,path 引數可參照至包含資料庫檔案的目錄。 例如,當使用 dBASE、FoxPro 或 Paradox 資料庫資料表,path 引數將指定包含 .dbf 或 .db 檔案的目錄。 由 destination tableexpression 引數可得到資料表檔案的名稱。

    指定非 Microsoft Jet 資料庫,名稱後面需附加分號 (;),並且將它包含在單引號 (' ') 或 (" ") 雙引號之中。 例如 'dBASE IV;' 或 "dBASE IV;",以上兩種寫法皆可接受。

    您亦可以使用 DATABASE 保留字指定外部資料庫。 例如,以下範例為指定相同的資料表:

    ... FROM Table IN "" [dBASE IV; DATABASE=C:\DBASE\DATA\SALES;];

    ... FROM Table IN "C:\DBASE\DATA\SALES" "dBASE IV;"


    備註

    為了改善執行效能及易於使用,請使用連結資料表而非 IN。

    在一個運算式之中,您亦可以使用 IN 保留字為比較運算子。 若需更多資訊,請參閱 In運算子。

     

     

    另外這邊有匯入匯出的 In 子句範例:

    In 子句的使用範例 http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!1290.entry

    2008年4月8日 上午 05:39
    版主
  • 麻煩哂你地啦~

    等我試下先~thx

    2008年4月8日 下午 01:35