Mở hoặc Liên kết Văn bản hoặc Excel dưới dạng Nguồn Dữ liệu trong Microsoft Access
Access là một công cụ phi thường để làm việc với nhiều nguồn dữ liệu. Từ lâu, bạn có thể biết rằng bạn có thể dễ dàng nhập hoặc xuất dữ liệu ở nhiều định dạng. Tuy nhiên, chúng tôi đã có một tình huống mà chúng tôi cần xử lý dữ liệu từ các nguồn dữ liệu bên ngoài. Quá trình xử lý chạy thường xuyên, vì vậy việc nhập dữ liệu sẽ làm cồng kềnh tệp front-end một cách nhanh chóng. Hơn nữa, trong tình huống này, tạo bản sao thứ hai của tệp Access làm cơ sở dữ liệu tạm thời để tránh bị đầy hơi không phải là một lựa chọn khả thi. Chúng ta đã có những lựa chọn nào? Đó là nơi chúng tôi nhận thấy rất ít thông tin liên quan đến việc mở hoặc liên kết đến các nguồn dữ liệu không quan hệ. Vì vậy, hãy cùng tìm hiểu sâu về chủ đề này.
Loạt blog này nhằm mục đích lấp đầy khoảng trống trong tài liệu của Microsoft về cách mở hoặc liên kết tới văn bản hoặc Excel làm nguồn dữ liệu trong các ứng dụng Access. Connectionstrings.com và các trang web khác cung cấp một số đường dẫn. Bạn cũng thường có thể phát hiện ra một số hành vi bằng cách sử dụng trình hướng dẫn của Access và sau đó kiểm tra các đối tượng. Tuy nhiên, phỏng đoán thứ hai không hữu ích lắm. Do đó, loạt bài viết này sẽ thảo luận về cách sử dụng các tệp Excel và Văn bản làm nguồn dữ liệu mà không nhất thiết phải nhập hoặc xuất dữ liệu.
Xin lưu ý rằng loạt bài này sẽ không thể thực hiện được nếu không có sự trợ giúp của Dan Haught và Jim Ferguson, đồng tác giả của Hướng dẫn lập trình viên cơ sở dữ liệu Microsoft Jet. Mặc dù cuốn sách đã bị in từ lâu nhưng nó vẫn là một cuốn sách có giá trị nếu bạn làm việc với DAO nhiều.
Nguồn dữ liệu truy cập và không quan hệ
Access luôn hỗ trợ sử dụng Phương pháp truy cập tuần tự được lập chỉ mục (ISAM) như một nguồn dữ liệu tiềm năng, cho phép nó nhập, liên kết hoặc xuất sang các nguồn dữ liệu không quan hệ như tệp văn bản hoặc bảng tính Excel và thậm chí cả các định dạng tệp khác như Exchange, dBASE hoặc FoxPro. DAO làm cho nó khả thi vì nó có trình điều khiển ISAM có thể hoạt động với các định dạng đó. Tuy nhiên, tôi sẽ tập trung vào các tệp văn bản và bảng tính Excel vì chúng là những nguồn phổ biến hơn mà chúng ta cần Access để làm việc. Nếu tất cả những gì bạn đã từng làm là nhập dữ liệu bằng tab Dữ liệu bên ngoài thông qua Access, điều đó có vẻ kỳ diệu nhưng trên thực tế, tất cả các tính năng của Access đều khả dụng cho chúng tôi với tư cách là các nhà lập trình ở cấp độ DAO.
Vì vậy, chúng ta hãy quên rằng các thuật sĩ tồn tại. Hãy quên các biểu tượng sáng bóng trên dải băng. Hãy quên rằng có các bảng được liên kết. Hãy chỉ sử dụng mã VBA để làm việc với các nguồn dữ liệu, ngoài không gian mỏng. Chúng ta có thể? Chắc chắn rồi. Đầu tiên, chúng ta sẽ xem xét sự khác biệt giữa liên kết và mở nguồn dữ liệu.
Liên kết so với Mở
Để trợ giúp với thuật ngữ, chúng ta cần phân biệt giữa liên kết so với khai mạc . Liên kết có nghĩa là chúng tôi tạo một bảng được liên kết mà bây giờ là một "bảng" Access mà chúng tôi có thể sử dụng giống như bất kỳ bảng Access nào khác. Do đó, nó là một đối tượng vĩnh viễn được xác định trong ứng dụng Access. Ngược lại, việc mở là khi chúng ta truy cập trực tiếp vào nguồn dữ liệu bằng cách sử dụng OpenDatabase
của DAO phương pháp. Về bản chất, việc mở một nguồn dữ liệu thường sẽ được thực hiện thông qua mã VBA như bạn sẽ thấy ngay sau đây.
Thiết lập mẫu và mã
Vì loạt bài này nói về việc tìm hiểu chi tiết thực tế về cách Access tương tác với các nguồn dữ liệu đó, nên trước tiên, chúng tôi sẽ tập trung vào việc mở thay vì liên kết ở đây. Vì vậy, làm thế nào để chúng ta mở một bảng tính Excel? Chắc chắn, nó không phải là một cơ sở dữ liệu? Hãy thiết lập một ví dụ tối thiểu để bắt đầu. Trong một thư mục, C:\Links
, chúng tôi sẽ tạo bảng tính Excel và tệp cơ sở dữ liệu Access, có tên là Products.xlsx
và Sample.accdb
, tương ứng:
Products.xlsx là một bảng tính đơn giản chỉ có một trang tính với nội dung sau:
Với điều này, hãy thêm mã VBA trong Sample.accdb
. Trong một mô-đun tiêu chuẩn:
Public Sub OpenExcel() Dim db As DAO.Database Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx") Dim tdf As DAO.TableDef For Each tdf In db.TableDefs Debug.Print tdf.Name Dim fld As DAO.Field For Each fld In tdf.Fields Debug.Print fld.Name, Next Debug.Print Dim rs As DAO.Recordset Set rs = tdf.OpenRecordset Do Until rs.EOF For Each fld In rs.Fields Debug.Print fld.Value, Next Debug.Print rs.MoveNext Loop Next End Sub
Nếu chúng tôi chạy mã, chúng tôi sẽ nhận được kết quả sau trong cửa sổ ngay lập tức của chúng tôi:
Products Count Apples 3 Bananas 5 Figs 8
Vì vậy, mặc dù Excel không phải là “cơ sở dữ liệu” (và nếu bạn đang sử dụng Excel làm cơ sở dữ liệu, hãy xấu hổ cho bạn 😉), chúng tôi vẫn có thể giả sử nó là một “cơ sở dữ liệu” và lặp lại qua các “bảng” và “bản ghi” của nó sử dụng các đối tượng DAO quen thuộc. Tất cả điều kỳ diệu đến từ chuỗi kết nối này:
Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx
Nhưng nó không nhất thiết phải có phép thuật. Loạt bài này sẽ phân tích các phần của chuỗi kết nối cho trình điều khiển tệp văn bản và Excel. Vì vậy, hãy bắt đầu với việc so sánh với chuỗi kết nối ODBC mà bạn có thể quen thuộc hơn.
Các loại nguồn dữ liệu
Nếu bạn đã liên kết với các nguồn dữ liệu ODBC, bạn có thể nhận thấy rằng các chuỗi kết nối ODBC thường trông giống như sau:
ODBC;DRIVER=...;SERVER=...;DATABASE=...;
Tự hỏi tại sao nó luôn bắt đầu bằng ODBC
? Phần đầu tiên đó là những gì DAO sử dụng để xác định loại nguồn. Tuy nhiên, vì Excel không phải là cơ sở dữ liệu ODBC, chúng tôi phải sử dụng Excel 12.0 Xml
để chỉ ra rằng DAO cần sử dụng một trình điều khiển Excel cụ thể. Sau đó, phần còn lại của cú pháp chuỗi kết nối bị ảnh hưởng bởi trình điều khiển mà chúng tôi đang sử dụng trong phần đầu tiên của chuỗi kết nối.
Dưới đây là danh sách một phần các loại nguồn dữ liệu có thể có mà MS Access sẽ nhận ra:
-
Excel 8.0
:97-2003 tệp xls -
Excel 12.0
:tệp xlsb -
Excel 12.0 Xml
:tệp xlsx -
Text
:Mọi tệp văn bản
Có nhiều nguồn dữ liệu hơn, bao gồm SharePoint, Exchange hoặc FoxPro, nhưng tôi sẽ không đề cập đến những nguồn đó. Mặc dù vậy, nó chứng tỏ rằng Access có khả năng làm việc với các nguồn đó giống như một cơ sở dữ liệu và điều đó có thể cho phép chúng tôi sử dụng DAO để đọc nội dung. Lưu ý rằng khi chúng tôi sử dụng các nguồn dữ liệu không quan hệ, không phải tất cả các hoạt động đều có thể được hỗ trợ đầy đủ. Ví dụ:bạn có thể không được phép chỉnh sửa hàng hiện có mặc dù bạn có thể chèn một hàng.
Tuy nhiên, một thách thức đối với việc mở hoặc liên kết với nguồn dữ liệu có nghĩa là bạn không thể chỉ nhập dữ liệu vào, sau đó chỉnh sửa lược đồ sau cho phù hợp với nhu cầu của mình. Do đó, bạn có thể thấy rằng lược đồ mặc định mà bạn nhận được trong khi liên kết sẽ không phải là những gì bạn muốn. Vì lý do đó, hiểu biết sâu sắc về chuỗi kết nối sẽ rất quan trọng. Do đó, bạn sẽ tìm hiểu thêm về chi tiết của chuỗi kết nối cho cả tệp Excel và tệp văn bản trong một vài bài viết tiếp theo.
Kết luận
Bạn đã thấy rằng thay thế cho việc nhập dữ liệu bên ngoài, chúng tôi có thể chọn liên kết hoặc thậm chí mở nguồn dữ liệu bên ngoài bằng DAO. Khả năng liên kết hoặc mở một nguồn dữ liệu bên ngoài được sử dụng rất ít. Tuy nhiên, không nên giảm khả năng liên kết hoặc mở vì điều này có thể mở ra các kịch bản mới chẳng hạn như tránh bị phình ra do tác động của việc nhập, đặc biệt là trong môi trường bị khóa. Trong phần tiếp theo, tôi sẽ thảo luận về các tham số khác nhau được trình điều khiển Excel sử dụng để tạo một chuỗi kết nối hợp lệ. Trong các bài viết sau, tôi sẽ xem xét trình điều khiển tệp văn bản và các tham số kết nối. Trong bài viết cuối cùng, chúng tôi sẽ tổng hợp tất cả lại với nhau.