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

Access nói chuyện với các nguồn dữ liệu ODBC như thế nào? Phần 1

Đây là loạt bài gồm sáu phần về truy tìm ODBC để giúp các nhà phát triển Access khắc phục sự cố và làm việc với Access khi phát triển một ứng dụng sử dụng (các) nguồn dữ liệu ODBC, thường nhưng không dành riêng cho SQL Server. Loạt bài này nhằm mục đích trình bày cách sử dụng theo dõi ODBC để giám sát các câu lệnh ODBC SQL mà Access gặp sự cố trong nền khi làm việc với các đối tượng như truy vấn, biểu mẫu hoặc báo cáo hoặc thậm chí trong khi thực thi mã VBA đối với các đối tượng DAO. Loạt bài này cũng sẽ chỉ ra cách Access xây dựng các câu lệnh ODBC SQL. Cuối cùng, loạt bài này sẽ trình bày cách giải thích việc truy tìm và xác định các vấn đề tiềm ẩn. Các bài báo sẽ được in hàng ngày cho đến khi bộ truyện kết thúc.

CẬP NHẬT: Đã thêm khóa đăng ký để cài đặt C2R 32 bit trên Windows 64 bit. Cảm ơn, Jack MacDonald!

Đã bao nhiêu lần bạn nghe “Tôi không biết tại sao, nhưng việc lắc tay cầm vẫn hoạt động”? Bất cứ khi nào tôi nhận được câu trả lời như vậy, điều đó khiến tôi khó chịu vì nó quá không hài lòng. Tôi sẽ rất lo lắng nếu người thợ sửa ống nước của tôi nói với tôi rằng anh ấy không biết một cái bẫy p là để làm gì và tiếp tục gọi nó là “cái thứ cong cong dưới bồn rửa mặt”. Tương tự như vậy, khách hàng của tôi phải rất lo lắng nếu tôi nói “Tôi không biết tại sao truy vấn đó lại chậm, vì vậy tôi đã thử một vài thao tác ngẫu nhiên và này, tôi đã tìm thấy một thủ thuật hiệu quả. Tuy nhiên, tôi không biết tại sao. ” Đó có thể là một trong những lệnh cấm lớn nhất của phát triển phần mềm - chúng tôi đang làm việc với một hệ thống phức tạp có thể chuyển từ 0 đến 1 rất nhanh theo một trình tự nhất định và chúng tôi dự kiến ​​sẽ biết tại sao nó không làm theo cách đó thay vì theo cách này.

Tôi tin rằng nhà phát triển làm việc với Access và VBA là xứng đáng với thời gian và sự đầu tư để thực sự biết họ đang làm gì, đặc biệt là với chương trình phụ trợ ODBC. Chúng tôi đã có các tình huống di chuyển trong đó chúng tôi có thể không có quyền truy cập vào các công cụ lập hồ sơ phía máy chủ vì các lý do khác nhau, nhưng đó không phải là lý do để nhún vai và chỉ kết hợp ngẫu nhiên các nút cho đến khi có thứ gì đó hoạt động. Quan trọng hơn, có một sự hiểu biết vững chắc về những gì đang diễn ra sẽ giúp bạn trở nên tốt hơn nhiều trong việc dự đoán những bản sửa lỗi về hiệu suất mà bạn cần áp dụng cho một tình huống nhất định. Tôi khẳng định rằng ngay cả khi tất cả những gì bạn làm là đọc loạt bài này và tìm hiểu cách Access hoạt động với các nguồn dữ liệu ODBC, bạn sẽ được trang bị tốt hơn nhiều chỉ đơn giản là vì bạn biết Access có khả năng làm gì.

Đối với những tình huống phức tạp hơn, lần theo dấu vết thường có thể làm nên điều kỳ diệu trong việc tiết lộ lý do tại sao mọi thứ lại chạy chậm như vậy. Bởi vì bạn có thể theo dõi nó ở phía Access thay vì tại máy chủ, nó không yêu cầu quyền cao hơn ngoài việc có quyền truy cập vào khóa đăng ký để kích hoạt theo dõi ODBC. Phần thưởng bổ sung là điều này hoạt động với bất kỳ nguồn dữ liệu ODBC nào, không chỉ SQL Server, vì vậy nếu bạn có một ứng dụng khách đang sử dụng MySQL hoặc PostgreSQL mà bạn không biết gì về, việc theo dõi ODBC vẫn sẽ giúp bạn xác định các vấn đề tiềm ẩn mà sau đó bạn có thể giải quyết trực tiếp. Truy cập 'bên.

Loạt bài này sẽ chỉ tập trung vào ngữ cảnh của Access và DAO. Mọi thứ có thể khác khi chúng tôi sử dụng ADO trong VBA nhưng điều đó hiện chưa phù hợp vì bất cứ khi nào chúng tôi sử dụng DAO, Access sẽ thực hiện một số việc để đáp ứng các yêu cầu bất khả thi của chúng tôi. Một ví dụ điển hình là truy vấn Access tham chiếu đến một hàm VBA. Bạn không thể chạy chức năng VBA trên SQL Server, nhưng Access không phàn nàn. Vậy điều gì thực sự đang xảy ra đằng sau bức màn? Chúng ta có thể khám phá Access đang làm gì bằng cách truy tìm các lệnh ODBC SQL mà nó cấp cho các nguồn dữ liệu ODBC.

Nhiều thông tin được trình bày trong loạt bài viết này có thể thực hiện được với sự trợ giúp của sách trắng cũ của Microsoft về Jet &ODBC. Mặc dù tôi nghĩ rằng thông tin vẫn rất hữu ích, nhưng nó cũng khá dày đặc và đòi hỏi trình độ kỹ thuật cao. Hy vọng rằng thông qua chuỗi lần theo dõi, nó sẽ giúp có ý nghĩa và trình bày thông tin theo cách dễ tiếp cận hơn.

Tại sao chúng ta nên theo dõi ODBC? Nó sẽ giúp tôi như thế nào?

Nếu bạn đã từng gặp bất kỳ triệu chứng nào trong số đó:

Hoặc bất kỳ lỗi nào khác khi làm việc với bảng được liên kết ODBC, thì việc hiểu lý do tại sao bạn nhận được những thông báo đó và cách bạn có thể sửa chúng sẽ rất hữu ích. Một bản sửa lỗi phổ biến mà một số nhà phát triển Access áp dụng là thêm Yêu cầu hoặc cố gắng lưu các bản ghi. Mặc dù điều đó có thể giải quyết một số vấn đề, nhưng không phải là chưa từng thấy khi thấy một biểu mẫu Truy cập phức tạp được rắc một cách tự do với Requery và một số chuỗi sự kiện xếp tầng mà hiệu suất bắt đầu bị ảnh hưởng. Thay vì rắc chúng như thể chúng là bụi pixie ma thuật, chúng ta nên phẫu thuật hơn trong cách tiếp cận để khắc phục các sự cố với ứng dụng.

Một lý do thuyết phục khác là có thể phân tích tại sao một biểu mẫu A cụ thể mất 10 giây để mở nhưng một biểu mẫu B tương tự chỉ mất 2 giây để mở. Thay vì mất thời gian xáo trộn mọi thứ để tìm ra điều gì làm cho biểu mẫu A mở nhanh hơn, bạn có thể bắt đầu bằng cách truy tìm và so sánh sự khác biệt, sau đó tập trung vào sự khác biệt để giúp bạn khắc phục sự cố theo cách trực tiếp hơn.

Ngay cả khi không phải lúc nào chúng ta cũng kết thúc việc theo dõi mỗi khi có vấn đề về hiệu suất, việc nắm rõ những gì Access phải làm có giá trị to lớn. Vì vậy, ngay cả khi tất cả những gì bạn đã làm là đọc loạt bài này, hy vọng bạn sẽ đánh giá tốt hơn cách làm việc với Access hơn là chống lại.

Truy cập phương ngữ SQL và ODBC SQL

Trước khi đi vào chi tiết, chúng ta cần biết rằng bất cứ khi nào Access làm việc với nguồn dữ liệu ODBC, trước tiên nó phải dịch câu lệnh SQL của nó thành câu lệnh ODBC SQL hợp lệ. Điều này khác với phương ngữ SQL đích của phần phụ trợ (ví dụ:SQL Server, Oracle, MySQL, PostgreSQL). Ngữ pháp SQL ODBC được mô tả ở đây. Bạn cũng có thể xem danh sách tất cả các chức năng được hỗ trợ bởi lớp ODBC. Điều quan trọng cần nhớ là khi chúng tôi sử dụng ODBC, chúng tôi không thực sự dịch trực tiếp từ Access SQL sang phương ngữ SQL gốc của nguồn dữ liệu. Thay vào đó, chúng tôi đang dịch Access SQL thành ODBC SQL mà trình điều khiển ODBC cho nguồn dữ liệu đã cho sau đó sẽ dịch sang phương ngữ bản địa của nó. Nếu bạn có thể tưởng tượng một người nói tiếng Nhật và người nói tiếng Pháp không nói ngôn ngữ của nhau nhưng cả hai đều nói tiếng Anh, thì về cơ bản đó là những gì đang xảy ra trên lớp ODBC. Một hệ quả khác là chỉ vì phương ngữ ODBC hỗ trợ tính năng X, không có nghĩa là bên nào cũng hỗ trợ tính năng này. Cả hai bên phải hỗ trợ tính năng X đó để nó có thể di động qua lớp ODBC. May mắn thay, hầu hết các trình điều khiển ODBC hiện có khá rộng và làm tốt công việc bao gồm hầu hết các tính năng. Nếu bạn gặp phải tình huống trong đó một tính năng được cho là hoạt động nhưng không hoạt động, bạn có thể phải trả phí để tham khảo tài liệu của trình điều khiển ODBC để xác minh rằng tính năng đó được hỗ trợ.

Bật theo dõi ODBC SQL

Điều đầu tiên cần làm để chúng ta có thể nhìn ra phía sau bức màn là kích hoạt tính năng theo dõi ODBC SQL. Mặc dù chúng ta có thể sử dụng SQL Server Profiler, nhưng việc xem cách Access định dạng ODBC SQL là rất hữu ích. Nó sẽ hoạt động với bất kỳ nguồn dữ liệu ODBC nào chứ không chỉ SQL Server. Quan trọng hơn, điều này cho phép chúng tôi xem cách Access đang dịch các truy vấn của nó sang ODBC theo cách trực tiếp hơn so với SQL Server Profiler hoặc các công cụ cấu hình phía máy chủ khác. Bạn không cần bất kỳ quyền đặc biệt nào để sử dụng theo dõi ODBC SQL trong khi các công cụ lập hồ sơ phía máy chủ có thể yêu cầu cấp quyền cao để sử dụng. Việc kích hoạt theo dõi ODBC SQL là một cài đặt đăng ký để chúng tôi có thể định cấu hình điều này bằng cách đi tới khóa đăng ký thích hợp:

Cơ sở dữ liệu phản lực hoặc các phiên bản Office trước năm 2007

Đối với Windows 32 bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\ODBC

Đối với động cơ Jet 32-bit hoặc Office trước 2007 trên Windows 64-bit:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Jet\4.0\Engines\ODBC

Lưu ý:Không có phiên bản 64-bit nào của động cơ Jet không dùng nữa.

Office 2007 đến 2016 (cài đặt MSI)

Đối với Office 32 bit trên Windows 32 bit hoặc Office 64 bit trên Windows 64 bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\X.Y\Access Connectivity Engine\Engines\ODBC

Đối với Office 32 bit trên Windows 64 bit:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\X.Y\Access Connectivity Engine\Engines\ODBC

(trong đó X.Y tương ứng với phiên bản Office bạn đã cài đặt)

Office 2016 hoặc Office 365 (Nhấp để chạy)

Đối với Office 32 bit trên Windows 32 bit hoặc Office 64 bit trên Windows 64 bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ODBC

Đối với Office 32 bit trên Windows 64 bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ODBC

Dưới khóa, tìm khóa TraceSQLMode và thay đổi giá trị từ 0 thành 1 .

Quyền truy cập sẽ cần được khởi động lại nếu nó đã được mở. Nếu không, hãy mở nó và chạy một số truy vấn. Tệp có tên sqlout.txt sẽ được tạo trong thư mục hiện tại. Điều đó thường nằm trong cùng một thư mục với tệp Access HOẶC trong thư mục tài liệu. Ngoài ra, bạn có thể thực thi hàm VBA CurDir để xác định thư mục hiện tại.

Tôi khuyên bạn nên sử dụng Notepad ++ hoặc một trình soạn thảo văn bản tương tự có khả năng phát hiện rằng nó đã bị sửa đổi. Sau đó, nó sẽ nhắc tải lại tệp. Điều đó cho phép bạn xem các bản cập nhật mới khi Access phát ra các lệnh mới cho tệp văn bản mà không cần mở lại liên tục. Khi bạn kích hoạt tệp văn bản, Notepad ++ sẽ hiển thị hộp thoại:

Sau đó, bạn có thể nhấp vào Yes để xem các lệnh ODBC SQL mới nhất do Access phát hành. Bởi vì Access có thể phát hành một số lệnh ODBC SQL, nhật ký có thể phát triển nhanh chóng. Tôi thấy thật thuận tiện khi đến điểm mà tôi muốn theo dõi điều gì đó (ví dụ:sắp mở một biểu mẫu hoặc chạy một truy vấn), sau đó tôi chuyển sang sqlout.txt , tải lại nó, sau đó chọn tất cả, xóa tất cả văn bản và sau đó lưu tệp hiện trống. Bằng cách đó, tôi có thể thực hiện hành động mà tôi muốn theo dõi, sau đó chỉ thấy các lệnh ODBC có liên quan mà không có tất cả các tiếng ồn khác không liên quan đến hành động đang được theo dõi.

Đây là một video nhanh để minh chứng:

Kết luận

Bạn đã học cách bật theo dõi ODBC và xem kết quả do Access tạo ra. Bạn có thể thấy rằng bạn có thể thu thập kết quả đầu ra ngay cả từ các hành động chẳng hạn như chỉ cần mở bảng hoặc chạy truy vấn. Điều đó cung cấp cho bạn thông tin chi tiết về loại truy vấn SQL nào mà Access thực sự đang gửi đến nguồn dữ liệu ODBC.

Như bạn có thể thấy, theo dõi ODBC SQL nắm bắt tất cả các lệnh ODBC SQL do Access phát hành ngay cả khi bạn không trực tiếp ra lệnh. Do đó, bạn có thể sử dụng nó tại bất kỳ thời điểm nào mà bạn gặp phải hiện tượng chậm máy mà bạn không có lời giải thích rõ ràng. Ví dụ:giả sử bạn có một biểu mẫu mở chậm và bạn không chắc đó là mã VBA của mình trong Open của biểu mẫu hoặc Load sự kiện hoặc nguồn bản ghi đó là vấn đề. Chiến lược sẽ là thiết lập ứng dụng Access để bạn chuẩn bị mở biểu mẫu đó, xóa sqlout.txt tệp văn bản sau đó tiến hành mở biểu mẫu. Sau đó, bạn có thể xem lại các câu lệnh ODBC SQL được theo dõi và xác định xem có câu lệnh nào có thể được cải thiện hay không.

Điều đó đặc biệt có giá trị khi bạn xử lý một biểu mẫu hoặc báo cáo phức tạp cũng chứa biểu mẫu con / báo cáo con hoặc chứa các hộp tổ hợp hoặc hộp danh sách đưa ra các truy vấn riêng của chúng để đáp ứng thuộc tính rowource.

Trong bài viết tiếp theo, chúng tôi sẽ phân tích kết quả đầu ra khi chúng tôi duyệt qua các bản ghi.

Cần trợ giúp với Microsoft Access? Liên hệ với nhóm của chúng tôi theo số 773-809-5456 hoặc gửi email cho chúng tôi theo địa chỉ [email protected].


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham nhũng MS Access Phần 2:Các phương pháp tốt nhất để ngăn ngừa và phục hồi

  2. * CẢNH BÁO * Bản cập nhật Windows phá vỡ các ứng dụng Access thuần túy - có bản sửa lỗi

  3. Hướng dẫn điều khiển Microsoft TreeView

  4. 4 cách Cơ sở dữ liệu hàng tồn kho mang lại lợi ích cho Bán lẻ

  5. Gỡ rối khi sử dụng Microsoft Access Runtime