2016-01-20 73 views
1

假設我有多個表分佈在不同的Access數據庫文件(* .mdb)中,我想將它與「連接」子句結合到一個數據集中。我現在看到的唯一解決方案是在Access數據庫中創建鏈接表,除非有人知道更好和更乾淨的解決方案。訪問ODBC:在不同數據庫文件中的表之間加入連接

我試過的東西是例如創建一個像SELECT * FROM tbl_a1 INNER JOIN [file_name].tbl_b1 ON [file_name].tbl_b1.pk=tbl_a1.fk WHERE 1這樣的SQL語句,其中不支持「file_name」。

所以我創建了一個使用Microsoft Access的鏈接表,它可以很好地與SELECT * FROM tbl_a1 INNER JOIN tbl_b1 ON tbl_b1.pk=tbl_a1.fk WHERE 1一起工作。

我期望看到以編程方式創建它的解決方案,因爲「機器B」可能沒有安裝Access,並且預定義的數據庫文件尚未包含鏈接表。這些表格也不一定是永久的。 Microsoft有一個documentation如何僅使用Microsoft Access創建鏈接表,但它不會告訴我如何以編程方式執行此操作。

注意:我使用RAD 10 Seattle/VCL C++ Builder和UniDac通過ODBC驅動程序進行數據庫連接,所以VBA不是一個選項。

解決方案:在我的情況下,我不得不爲第二個表SELECT * FROM tbl_a1 INNER JOIN [C:\path\db.mdb].tbl_b1 AS tbl_b1 ON tbl_b1.pk = tbl_a1.fk WHERE 1設置一個表別名,以使其工作。感謝@Gord Thompson

+0

歡迎來到SO,請提出一個更具體的問題:你有什麼試過,你期望什麼等。請參閱[如何問](http://stackoverflow.com/help/how-問) – Nehal

+0

你可以鏈接在一個'輸出'彙總表中的表在一些MDB,然後將您的應用程序連接到這個表 – SalientBrain

+0

你好@Nehal,我試過的東西是fe創建一個SQL語句,如'SELECT * FROM tbl-a1 INNER JOIN [file_name] .tbl-b1 ON [file_name] .tbl-b1.pk = tbl-a1.fk WHERE 1'其中不支持「file_name」。所以我創建了一個使用Microsoft Access的鏈接表,它可以很好的使用'SELECT * FROM tbl-a1 INNER JOIN tbl-b1 ON tbl-b1.pk = tbl-a1.fk WHERE 1'。我期望看到以編程方式創建它的解決方案,因爲「機器B」可能沒有安裝Access,並且預定義的數據庫文件尚未包含鏈接表。這些表格也不一定是永久的。 –

回答

1

如果您使用的是Microsoft自己的Access ODBC驅動程序,則使用[mdbFileSpec].[tableName]的方法應該可行。我不能在你的C++環境中測試這一點,但我可以證實,使用Python和pyodbc這樣做工作...

# -*- coding: utf-8 -*- 
import pyodbc 

connStr = (
    r"Driver={Microsoft Access Driver (*.mdb)};" 
    r"DBQ=C:\Users\Public\test\a1.mdb;" 
    ) 
cnxn = pyodbc.connect(connStr) 
sql = """\ 
SELECT * 
FROM tbl-a1 
INNER JOIN 
[C:\\Users\\Public\\test\\b1.mdb].tbl-b1 
    ON [C:\\Users\\Public\\test\\b1.mdb].tbl-b1.pk=tbl-a1.fk 
WHERE 1 
""" 
crsr = cnxn.execute(sql) 
for row in crsr: 
    print(row) 
crsr.close() 
cnxn.close() 

...但是這工作得很好:

# -*- coding: utf-8 -*- 
import pyodbc 

connStr = (
    r"Driver={Microsoft Access Driver (*.mdb)};" 
    r"DBQ=C:\Users\Public\test\a1.mdb;" 
    ) 
cnxn = pyodbc.connect(connStr)  
sql = """\ 
SELECT * 
FROM [tbl-a1] AS tbl_a1 
INNER JOIN 
[C:\\Users\\Public\\test\\b1.mdb].[tbl-b1] AS tbl_b1 
    ON tbl_b1.pk=tbl_a1.fk 
WHERE 1 
""" 
crsr = cnxn.execute(sql) 
for row in crsr: 
    print(row) 
crsr.close() 
cnxn.close() 

注意

  1. 我只用文件規範一次,創建表的別名來引用表,
  2. 我在表名周圍放了方括號,因爲它們包含可能被誤解爲負號的連字符。
+0

這工作就像一個魅力,謝謝。我必須設置一個表別名來在我的'ON'子句中使用它。有人請提出這個答案。 –

相關問題