2009-05-12 44 views
7

Kịch bản của tôi: Máy tính A có cơ sở dữ liệu Access có chứa các bảng được liên kết. Các bảng được liên kết này thực sự nằm trong cơ sở dữ liệu Access khác trên Máy tính B. Không có gì bất thường.Làm cách nào để "chuỗi" các bảng được liên kết trong Access?

Bây giờ chúng tôi tạo cơ sở dữ liệu SQL Server và thiết lập liên kết đến các bảng trong cơ sở dữ liệu Access trên Máy tính B; chúng ta cấu hình một DSN máy để xác định kết nối ODBC cần thiết trên máy tính B. Truy cập cơ sở dữ liệu B bây giờ chứa cả các bảng cục bộ và các bảng SQL được liên kết.

Cơ sở dữ liệu Access Bây giờ muốn liên kết tới bảng mới của cơ sở dữ liệu Access - nhưng chỉ các bảng cục bộ của nó mới hiển thị trong hộp thoại để thêm bảng đã nối kết. Có vẻ như bạn không thể "liên kết với một bảng được liên kết" trong Access ...

Nhưng điều này có thực sự đúng không? Những gì chúng tôi muốn làm là cơ sở dữ liệu hiện tại của bảng B liên kết đến cơ sở dữ liệu A như thể chúng là các bảng địa phương; tức là cơ sở dữ liệu A không biết rằng các bảng mới trong cơ sở dữ liệu B không thực sự cục bộ.

Tất nhiên, chúng tôi có thể liên kết trực tiếp các bảng SQL vào cơ sở dữ liệu A bằng cách định cấu hình DSN trên máy tính, nhưng chúng tôi không muốn thực hiện điều này. Chúng tôi muốn sử dụng máy tính/cơ sở dữ liệu B như một mối quan hệ hoặc "cổng" trình bày cả hai bảng cục bộ và SQL liên tục với các ứng dụng khách Access khác trên mạng. Đây chỉ là thiết lập tạm thời cho phép chúng tôi di chuyển dần tất cả ứng dụng của ứng dụng khách Access sang các bảng dựa trên SQL Server mà không phải sửa đổi nhiều mã.

Việc này có thể thực hiện được không? Có một giải pháp hoặc kịch bản khả thi nào khác mà chúng tôi chưa từng nghĩ tới?

+1

Bạn không cần DSN trên cả hai máy - thay vào đó hãy sử dụng chuỗi kết nối DSN-less. –

Trả lời

5

Nope - bạn chỉ có thể liên kết đến bảng thực - bạn phải tạo các liên kết SQL server bạn đã làm trên cơ sở dữ liệu B cho cơ sở dữ liệu Một

Nếu dữ liệu SQL server không thay đổi nhiều và bạn chỉ sử dụng nó cho tra cứu bạn có thể nhập dữ liệu vào bảng Truy cập thực mà bạn có thể liên kết đến.

EDIT

Một giải pháp khác là liên kết các bảng động - theo cách đó bạn không phải thêm DSN theo cách thủ công vào từng máy tính.Sử dụng một chuỗi kết nối một cái gì đó như thế này:

ODBC;Driver={SQL Server};Server=<server name/IP>;Database=<database>;UID=<user>;PWD=<password> 

này liên kết một bảng

Dim db As Database 
Dim TD As TableDef 
Dim sTableName As String ''MS Access name (can be same as SQL Server name) 
Dim sServerTableName As String ''SQL Server Name 

sTable = "Table1" 
sServerTableName = "dbo.Table1" 
sServerConnect = "ODBC;Driver={SQL Server};Server=Localhost;Database=DB1;" 

Set TD = db.CreateTableDef(sTableName) 
TD.Connect = sServerConnect 
TD.SourceTableName = sServerTableName 

db.TableDefs.Append TD 
db.TableDefs.Refresh 
0

Bạn có thể tạo truy vấn/chế độ xem trên B chỉ là chế độ xem của bảng được nối kết trên C, sao cho A có thể truy cập/truy vấn trên B (thực tế là bảng trên C)?

như:

 

Linked Query on A  ->  Query on B 
           : 
         Linked table on B  -> Real table on C 

chỉnh sửa sau khi bình luận: OK, rõ ràng bạn không thể liên kết đến truy vấn, do đó sẽ không làm việc sau đó.

Một ý tưởng khác: Bạn có thể thiết lập Sao chép giữa B và C sao cho tất cả các bảng C được sao chép vào B, trong đó A có thể truy cập chúng?

+0

Bạn không thể liên kết đến các truy vấn ... –

+0

Bạn có ý gì khi "sao chép?" Nếu bạn có nghĩa là nhân rộng máy bay phản lực, không, nó không hoạt động theo cách đó, và ODBC liên kết bảng trình bày một số vấn đề trong một MDB nhân rộng. –

+0

Vâng tôi có nghĩa là nhân rộng máy bay phản lực. OK có vẻ như ý tưởng đó cũng không giúp được gì. – codeulike

0

Về vấn đề để đề nghị truy vấn, nó có thể sử dụng một khoản IN 'C:\OtherDatabase.mdb' trong một điều khoản FROM:

SELECT qryMyTable.* 
FROM qryMyTable IN 'c:\OtherDatabase.mdb'; 

Điều này sẽ hiển thị cho bạn trong cơ sở dữ liệu nơi truy vấn được lưu trữ nội dung của truy vấn trong cơ sở dữ liệu khác. Nếu đường dẫn đến cơ sở dữ liệu khác không thay đổi, bạn có thể sử dụng phương thức này để piggyback trên các bảng được liên kết của cơ sở dữ liệu khác.

+0

Điều này giả định hai cơ sở dữ liệu chia sẻ cùng một tệp nhóm làm việc. – onedaywhen

+0

Nếu không, bạn có thể cung cấp chuỗi kết nối đầy đủ với thông tin xác thực phù hợp và vị trí tệp nhóm làm việc thích hợp. –

+0

Làm thế nào để bạn chỉ định đường dẫn đến tệp nhóm làm việc (mdw)? Tôi đã từ bỏ nhiều năm trước sau khi một MVP Access cuối cùng đã thuyết phục tôi rằng nó sẽ không thể thực hiện được do kiến ​​trúc của Jet. Nhưng nếu bạn biết làm thế nào để làm điều đó sau đó tôi muốn được vui mừng để tìm hiểu. Cho bạn biết những gì: Tôi sẽ bắt đầu một câu hỏi mới về SO và bạn có thể kiếm được một số đại diện bằng cách trả lời nó :) Xem không gian này ... – onedaywhen

Các vấn đề liên quan