Access
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Access

Chuỗi kết nối đặc biệt và các truy vấn không đồng nhất cho MS Access

Chuỗi kết nối đặc biệt và các truy vấn không đồng nhất cho MS Access

Các truy vấn không đồng nhất là lý do tại sao các chuỗi kết nối, đặc biệt là chuỗi kết nối ad-hoc lại quan trọng. Trong các bài viết trước của loạt bài này, bạn đã biết cách tùy chỉnh các thông số kết nối để kết nối với Excel và tệp văn bản. Trong trường hợp của tệp văn bản, bạn cũng có thể mô tả giản đồ cấu trúc của tệp văn bản bằng cách sử dụng schema.ini hoặc thông số kỹ thuật đã lưu. Trong bài viết đầu tiên, bạn cũng đã biết được sự khác biệt giữa liên kết và mở nguồn dữ liệu.

Truy vấn không đồng nhất thay vì mã VBA

Bạn đã thấy trong các bài viết trước mã mẫu để mở nguồn dữ liệu đó bằng OpenDatabase của DAO phương pháp.

Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")

Điều này có thể để lại cho bạn ấn tượng rằng cách duy nhất để mở nguồn dữ liệu là thông qua mã. Nhưng đó không phải là trường hợp! Bạn thực sự có thể mở một nguồn dữ liệu tùy ý chỉ bằng cách sử dụng truy vấn Access. Đây là cú pháp mẫu mà bạn có thể chạy trong truy vấn Access:

SELECT * 
FROM [Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx].[Sheet1$];

Nói chung, chuỗi kết nối bạn đặt trong OpenDatabase Tham số thứ 4 của bạn là tham số mà bạn đặt tiền tố cho “bảng”. Do đó, cú pháp chung sẽ là:

FROM [<complete connection string>].[<name of the table>]

Bạn có thể sử dụng OpenDatabase và lặp lại TableDefs để tìm tên hợp lệ của bảng. Sau đó, bạn có thể sử dụng nó để điền vào phần thứ 2 của tên.

Tại sao lại mở thay vì liên kết?

Một lợi thế của việc mở trái ngược với liên kết là bạn có thể thay đổi chuỗi kết nối trong thời gian chạy. Bạn cũng không phải đối phó với việc dọn dẹp cần thiết như xóa các đối tượng liên kết không còn cần thiết. Nó hoàn toàn chỉ là tạm thời, điều này sẽ hoàn hảo để di chuyển dữ liệu từ nguồn này sang nguồn khác mà không cần viết bất kỳ mã VBA nào.

Đây là một tình huống có thể xảy ra. Giả sử chúng ta muốn tạo các tệp văn bản là đầu ra từ một dạng xem trên cơ sở dữ liệu SQL Server của chúng ta. Bạn đã thấy từ các bài viết trước rằng chúng ta có thể viết mã VBA để lặp qua các tập bản ghi DAO và viết nội dung từng cái một. Tuy nhiên, thay vào đó, chúng tôi chỉ có thể tạo truy vấn Access bằng SQL này:

INSERT INTO [Text;DATABASE=C:\Links\].[products.csv;] (Products, Count)
SELECT Products, Count
FROM [ODBC;DRIVER=ODBC Driver 17 for SQL Server;SERVER=myServer;DATABASE=myDatabase;].[vwProducts];

Bởi vì cả đích và nguồn đều không phải là nguồn của Access, đây là điều chúng tôi gọi là “truy vấn không đồng nhất”. Lưu ý rằng ngay cả khi vwProducts là một bảng được liên kết, nó vẫn sẽ là một truy vấn "không đồng nhất". Đó là vì chúng tôi vẫn đang kết hợp các nguồn dữ liệu khác nhau trong một truy vấn.

Quan trọng hơn, bằng cách sử dụng một truy vấn không đồng nhất, chúng tôi tránh được sự cần thiết phải tạo các đối tượng tạm thời trong ứng dụng Access của mình. Việc tạo một đối tượng tạm thời có thể khiến ứng dụng Access bị phình ra. Đây là trường hợp ngay cả khi nhập hoặc bằng cách liên kết hoặc bằng cách sử dụng các tập bản ghi trong VBA. Đến lượt nó, một tệp bị cồng kềnh có thể yêu cầu phải nén và sửa chữa. Tuy nhiên, khi bạn sử dụng một truy vấn không đồng nhất để chuyển trực tiếp dữ liệu từ nguồn dữ liệu này sang nguồn dữ liệu khác, bạn sẽ tránh được tất cả những điều đó. Do đó, nó lý tưởng cho các tình huống mà ứng dụng Access của bạn cần tạo một số tệp mà không cần bảo trì trên chính ứng dụng đó.

Xây dựng chuỗi kết nối đặc biệt

Bây giờ, bạn có thể thấy lý do tại sao việc hiểu các tham số được sử dụng trong chuỗi kết nối lại có giá trị. Điều đặc biệt quan trọng là phải kiểm soát đích (ví dụ:đường dẫn cho tệp văn bản hoặc phạm vi cho trang tính Excel). Với những nguồn dữ liệu không quan hệ đó, những gì tạo thành “cơ sở dữ liệu” và “bảng” trong nguồn dữ liệu đó có thể không trực quan. Bạn có thể sử dụng 3 bài viết cuối cùng làm tài liệu tham khảo để được trợ giúp về việc xây dựng chuỗi kết nối và thông tin lược đồ để đảm bảo rằng bố cục xuất hiện đúng. Điều đó nói rằng, cũng có một phím tắt mà bạn có thể sử dụng để tìm chuỗi kết nối.

Bạn có thể sử dụng Tab Bên ngoài và “Nhập Văn bản” hoặc Nhập Excel ”và chọn tùy chọn liên kết. Nó thường là tùy chọn thứ ba trên trình hướng dẫn như được hiển thị.

Sau khi xem qua trình hướng dẫn và lưu bảng được liên kết mới, bạn có thể kiểm tra chuỗi kết nối qua cửa sổ VBA ngay lập tức với mã này:

?CurrentDb.TableDefs("<name of linked table>").Connect

Điều này có thể cung cấp cho bạn các gợi ý về cách xây dựng chuỗi kết nối và sau đó bạn có thể tùy chỉnh. Hầu hết thời gian, bạn sẽ thấy mình tùy chỉnh đường dẫn hoặc tên bảng để nó thường hoạt động đủ như một kỹ thuật trong quá trình phát triển của bạn. Sau đó, bạn có thể tạo một truy vấn không đồng nhất cho phù hợp và xóa bảng được liên kết.

Kết luận

Trong loạt bài này, bạn đã học được sự khác biệt giữa liên kết và mở. Sau đó, bạn đã thấy cách Excel và các tệp văn bản có thể được sử dụng như thể chúng là một DAO.Database các đối tượng có "bảng". Với bài viết thứ 2, bạn đã tìm hiểu về các tham số kết nối cho sổ làm việc Excel. Trong bài thứ 3, bạn đã thấy sự cần thiết phải có thông tin lược đồ để mô tả một tệp văn bản. Bài viết thứ 4 mô tả cách sử dụng schema.ini . Trong bài viết thứ 5, bạn đã biết cách MSysIMEXSpecsMSysIMEXColumns có thể được sử dụng thay thế cho schema.ini phương pháp.

Cuối cùng, chúng tôi tập hợp tất cả lại với nhau trong việc xây dựng một truy vấn không đồng nhất như một ví dụ về giải pháp mã thấp. Chúng ta không cần phải viết một lượng lớn mã VBA chỉ để đẩy dữ liệu từ nguồn này sang nguồn khác. Tôi nghĩ rằng bạn sẽ đồng ý rằng việc sửa đổi truy vấn Access bằng cách điều chỉnh đường dẫn hoặc tên bảng sẽ dễ dàng hơn nhiều so với việc viết quy trình VBA lớn và phức tạp để đọc và ghi dữ liệu. Quan trọng hơn bằng cách sử dụng một truy vấn không đồng nhất, việc xử lý các thay đổi trong cấu trúc ở hai bên trở nên dễ dàng hơn nhiều. Một cột mới được thêm vào? Không sao, chỉ cần thêm cột mới vào truy vấn và chúng ta đã hoàn tất.

Tuy nhiên, như bạn thấy, điều này đòi hỏi bạn phải hiểu rõ về việc xây dựng chuỗi kết nối. Vì lý do đó, cần phải nghiên cứu sâu về sự phức tạp của chuỗi kết nối như chúng tôi đã làm từ bài viết thứ 2 đến thứ 5. Mặc dù chúng ta có thể sử dụng trình hướng dẫn bảng được liên kết để cung cấp cho chúng ta gợi ý về các chuỗi kết nối. Nhưng đó chỉ là gợi ý. Do đó, bạn nên biết cách kiểm soát chính xác kết quả đầu ra. Tôi hy vọng bạn đồng ý rằng việc đầu tư một chút nỗ lực để hiểu cách hoạt động của các chuỗi kết nối sẽ tự trả giá bằng sức lao động tiết kiệm.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Excel vs Access:Khi nào thì đến lúc chuyển đổi?

  2. Cách tạo một trường được tính toán trong Access

  3. Tham gia cùng tôi để có quyền truy cập Microsoft với Phiên học viện SQL Server

  4. Truy cập 2021 For Dummies Cheat Sheet

  5. Cách liên tục kiếm được giải thưởng MVP của Microsoft Access