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

Tham số chuỗi kết nối cho nguồn tệp văn bản

Tham số chuỗi kết nối cho nguồn tệp văn bản

Trong bài viết trước, tôi đã đề cập đến các tham số chuỗi kết nối cho nguồn dữ liệu Excel. Bây giờ chúng ta sẽ tập trung vào các tệp văn bản. Có các phương pháp khác nhau để mô tả giản đồ của tệp văn bản và sử dụng thông tin trong khi mở hoặc liên kết trong Access. Mặc dù bảng tính Excel có một số điểm tương đồng về cấu trúc, nhưng điều này không đúng với các tệp văn bản. Chúng tôi phải trả lời một số câu hỏi về cấu trúc của tệp văn bản bao gồm:

  1. Nó được phân cách hay chiều rộng cố định?
  2. Làm cách nào để biết khi nào một cột kết thúc và cột khác bắt đầu?
  3. Văn bản có được trích dẫn hay không?
  4. Chúng ta nên phân tích ngày và giờ như thế nào?
  5. Còn về số tiền thì sao? Chúng nên được định dạng như thế nào?

và có thể hơn thế nữa. Mặc dù nhìn sơ qua thì CSV có vẻ được xác định rõ ràng nhưng khi bạn tìm hiểu kỹ, nó thực sự được xác định rất lỏng lẻo. Không có thỏa thuận chung nào về việc có nên trích dẫn văn bản hay không, ngày tháng nên được định dạng như thế nào. Vì tất cả những lý do đó, việc sử dụng tệp văn bản thường yêu cầu sử dụng một số loại thông tin lược đồ để mô tả cấu trúc của tệp văn bản. Có ba cách để lưu trữ thông tin giản đồ:

  1. Một schema.ini tệp được lưu trữ trong một thư mục
  2. Truy cập MSysIMEXMSysIMEXColumns bảng
  3. Access ’ImportExportSpecification.XML tài sản.

Để làm phức tạp vấn đề, có một số phương pháp khác nhau mà chúng ta có thể sử dụng để làm việc với tệp văn bản nhưng không phải tất cả các phương pháp đều có thể sử dụng cả 3 cách khác nhau để lấy thông tin lược đồ. Ví dụ:DoCmd.TransferText hoạt động với các bảng hệ thống nhưng không lưu nhập / xuất. Mặt khác, DoCmd.RunSavedImportExport hoạt động với ImportExportSpecification vật. Tuy nhiên, ImportExportSpecification không được sử dụng như một phần của liên kết. Vì vậy, đối với cuộc thảo luận của chúng tôi, chúng tôi thực sự chỉ có 2 phương pháp khả dụng trong ngữ cảnh mở hoặc liên kết đến một tệp văn bản. Điều quan trọng cần lưu ý là sự phân biệt giữa việc lưu thông số kỹ thuật vào MSysIMEXSpecs &MSysIMEXColumns bảng so với lưu nhập / xuất trở thành ImportExportSpecification vật. Chúng ta sẽ tìm hiểu 2 phương pháp đó trong các bài viết tiếp theo.

Chuỗi kết nối cho tệp văn bản

Chúng ta nên xem xét cách Access sẽ cảm nhận một tệp văn bản. Trong phần trước, chúng ta đã thấy rằng mỗi trang tính hoặc một dải ô được đặt tên được biểu diễn dưới dạng “bảng” trong “cơ sở dữ liệu” bảng tính Excel. Nhưng một tệp văn bản không có cấu trúc như vậy. Điều gì tạo nên một “cơ sở dữ liệu” sau đó? Câu trả lời là thư mục đại diện cho một “cơ sở dữ liệu” và do đó bất kỳ tệp văn bản nào trong một thư mục đều là “bảng”. Vì lý do đó, có thể có nhiều thông tin lược đồ cho cùng một thư mục nếu thư mục đó chứa nhiều hơn một định dạng khả thi cho bất kỳ tệp văn bản nào được lưu trữ trong thư mục. Sau đó, bạn sẽ thấy rằng khi chúng tôi tạo chuỗi kết nối, chúng tôi liên kết đến thư mục, sau đó truy cập tệp riêng lẻ dưới dạng bảng.

Do đó, sử dụng thiết lập này như được hiển thị:

Sau đó, chúng tôi có thể mở một tệp văn bản bằng mã VBA sau:

Dim db As DAO.Database
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DATABASE=C:\Links")

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
    
    Debug.Print
Next

Điều này sẽ mang lại kết quả đầu ra:

Products#csv
Products      Count         PackDate      Amount        ShipDate      
Apples         3            12/4/2020     $ 1.02        4/12/2020     
Bananas        5            4/12/2020     $ 1,234.56    12/4/2020     
Figs           8            5/7/2020      $ 0.01        7/5/2020      
Grapes         11           10/10/2020    $12.30        10/10/2020

Hãy lưu ý những điều sau:

  1. Chúng tôi đã không chỉ định tệp văn bản trong chuỗi kết nối của mình. Thay vào đó, chúng tôi đã sử dụng thư mục.
  2. Tên của "bảng" đã được thay đổi do dấu chấm trong tên không phải là ký tự hợp lệ. Ergo, products.csv đã trở thành products#csv .
  3. So với Excel, không có tham số bắt buộc nào ngoài việc chỉ định trình điều khiển tệp văn bản và đường dẫn đến thư mục.

Trong phần tiếp theo, bạn sẽ tìm hiểu thêm về cách mô tả lược đồ của tệp văn bản. Tuy nhiên, đối với chính chuỗi kết nối, các từ khóa sau được nhận dạng.

FMT tham số:Cho biết định dạng của tệp văn bản.

Delimited :Tệp được phân cách bằng một ký tự. Ký tự được sử dụng được chỉ định bởi thông tin lược đồ.
Fixed :Tệp có chiều rộng cố định cho (các) cột. Một lần nữa, (các) chiều rộng cột cụ thể được chỉ định bởi thông tin lược đồ.

HDR tham số:Hàng tiêu đề

YES :Hàng đầu tiên là tiêu đề và phải trở thành tên cột cho “bảng” / ”tập bản ghi”
NO :Hàng đầu tiên không được xử lý khác và chỉ là một dữ liệu. Tất cả các tên cột sẽ được đặt tên là “FN” trong đó “N” là một số bắt đầu bằng 1

IMEX tham số:Hành vi Nhập / Xuất

Điều này chi phối cách xác định các kiểu dữ liệu cột, dựa trên nội dung:
1 :Nếu cột chứa các kiểu dữ liệu khác nhau, hãy coi nó như một chuỗi. Nếu không, hãy đối sánh cột với kiểu dữ liệu tốt nhất.
2 :Luôn khớp cột với một kiểu dữ liệu nhất định dựa trên mẫu. Điều đó có thể gây ra lỗi đọc khi chúng tôi đọc một hàng chứa dữ liệu không khớp với kiểu dữ liệu mong đợi.

ACCDB tham số:Cho biết Access đang sử dụng định dạng tệp ACCDB?

Theo mặc định, điều này luôn được đặt ACCDB =YES ở định dạng tệp accdb. Tuy nhiên, việc bỏ qua hoặc đặt thành KHÔNG dường như không làm được gì. Đó là một chút bí ẩn. Nếu ai đó có thể chia sẻ tác dụng của thông số này, hãy đăng nhận xét và tôi sẽ cập nhật blog.

DATABASE tham số:Đường dẫn đến thư mục chứa các tệp văn bản

Tham số phải chứa một đường dẫn đủ điều kiện. Nó không được bao gồm tên của các tệp văn bản.

CharacterSet Tham số:Xác định mã hóa ký tự để sử dụng để đọc các tệp văn bản.

Điều này sẽ được thảo luận chi tiết hơn trong bài viết tiếp theo. Điều này cũng có thể được mô tả trong thông tin lược đồ.

DSN Tham số:Xác định thông tin giản đồ để sử dụng với tệp văn bản.

Tên phải tương ứng với MSysIMEXSpec , sẽ được phân tích trong bài viết sau. Điều này chỉ hoạt động với MSysIMEX*** những cái bàn. Nếu bạn muốn sử dụng schema.ini , bạn chỉ cần không bao gồm bất kỳ DSN nào trong chuỗi kết nối của bạn.

Điều quan trọng cần lưu ý là trình điều khiển tệp văn bản sẽ chỉ xem xét các tham số được liệt kê ở trên. Không thể đặt các từ khóa khác và phải phân tích cú pháp từ trình điều khiển tệp văn bản. Vì lý do đó, bạn sẽ không thể chỉ định tất cả các chi tiết về tệp văn bản chỉ từ chuỗi kết nối.

Lược đồ mặc định cho tệp văn bản

Về lý thuyết, bạn có thể mở hoặc liên kết một tệp văn bản mà không có bất kỳ thông tin lược đồ nào nhưng điều này sẽ hiếm khi hoạt động. Trong tình huống này, Access sẽ chỉ đơn giản là giả định các giá trị mặc định cho các tùy chọn khác nhau. Nếu tệp văn bản tuân theo tất cả các giá trị mặc định hiện tại thì Access sẽ thành công trong việc đọc tệp. Quan trọng hơn, việc không có lỗi khi mở hoặc liên kết với tệp văn bản không có nghĩa là dữ liệu được biểu diễn một cách có ý nghĩa. Ví dụ:số tiền tiền tệ được định dạng đặc biệt có thể được hiểu là văn bản chứ không phải tiền tệ và văn bản không được phân tách bằng dấu phẩy trong văn bản có thể được phân tích cú pháp sai, thêm các cột không mong muốn. Các giá trị mặc định được xác định ở hai nơi có thể:

  1. Access sẽ xem xét cài đặt đăng ký. Để cài đặt Office 365, sổ đăng ký có thể được đặt tại:
    Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Text . Chúng tôi sẽ gọi vị trí này là “Khóa đăng ký văn bản” trong các bài viết tiếp theo.
  2. Các cài đặt bạn sẽ thấy trong Region applet trong bảng điều khiển của Windows. Chúng tôi sẽ gọi vị trí này là “Cài đặt Windows”.

Lưu ý về mã hóa cho các tệp văn bản

Bắt buộc phải có mã hóa chính xác bất kể bạn có thể sử dụng phương pháp nào để truy cập tệp văn bản của mình. Khi nội dung tệp văn bản của bạn bị hạn chế chỉ với các ký tự trong nửa dưới của điểm ASCII (ví dụ:0-127), thì việc bạn chọn kiểu mã hóa nào cho tệp văn bản của mình hầu như không quan trọng. Giá trị mặc định thường đủ tốt. Tuy nhiên, nếu các tệp văn bản của bạn có thể chứa bất kỳ Unicode nào hoặc bất kỳ ký tự nào lớn hơn 127, thì bạn, nhà phát triển, phải biết mã hóa. Nếu mã hóa sai được chỉ định, văn bản có thể không được nhập như mong đợi và sẽ không gây ra bất kỳ lỗi nào. Đối với những chi tiết lộn xộn, tôi sẽ giới thiệu bạn với Joel Spolsky về vấn đề này.

Lựa chọn giữa schema.iniMSysIMEX*** bảng

Như bạn sẽ thấy trong các bài viết tiếp theo, cả hai phương pháp đều có sự trùng lặp khá lớn về khả năng. Do đó, bạn có thể thấy mình phải lựa chọn sử dụng một trong hai. Sự khác biệt chính nằm ở việc bạn muốn lược đồ được lưu trữ trong ứng dụng của mình hay trong một thư mục chứa các tệp văn bản. Khi bạn sử dụng schema.ini , bạn đang giả định rằng các tệp văn bản sẽ có trong một thư mục nhất định và sẽ có một tên nhất định.

Với MSysIMEX*** , bạn có thể xử lý bất kỳ tệp văn bản nào từ bất kỳ đâu đơn giản bằng cách tham khảo thông số kỹ thuật đã xác định. Tuy nhiên, không dễ để chỉnh sửa đặc tả bên ngoài Access. Ngay cả trong Access, thật không dễ dàng để điều chỉnh các thông số kỹ thuật bằng giao diện người dùng. schema.ini có một số tính năng bổ sung không có sẵn trực tiếp với MSysIMEX*** bảng.

Tuy nhiên, câu hỏi về nơi lưu trữ thông số kỹ thuật rất có thể sẽ là yếu tố quan trọng nhất của bạn trong việc quyết định sử dụng cái nào.

Kết luận

Chúng tôi đặc biệt khuyến khích bạn xác định thông tin lược đồ cho bất kỳ tệp văn bản nào có chứa ngày tháng hoặc số tiền. Ngày tháng và số lượng tiền tệ nhạy cảm với cài đặt khu vực có thể ảnh hưởng đến việc phân tích dữ liệu chính xác. Bởi vì chúng tôi có hai hệ thống khác nhau với các tập hợp tùy chọn có sẵn khác nhau, chúng tôi phải xem xét từng hệ thống trong các bài viết tiếp theo. Bạn có thể lựa chọn sử dụng một trong hai (hoặc thậm chí cả hai giữa các tệp văn bản khác nhau). Bây giờ chúng ta sẽ chuyển sang schema.ini trong bài viết tiếp theo. Sau đó chúng ta sẽ xem xét MSysIMEX*** các bảng trong bài viết sau.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Access nói chuyện với các nguồn dữ liệu ODBC như thế nào? Phần 6

  2. GIẢI QUYẾT:Microsoft Office 365 Phiên bản 2009 có thể phá vỡ ứng dụng cơ sở dữ liệu của bạn

  3. Đặt quyền truy cập cơ sở dữ liệu

  4. Gặp gỡ Michal Bar và tôi tại Microsoft Ignite!

  5. Di chuyển cơ sở dữ liệu truy cập của bạn sang máy chủ SQL