2012-05-17 18 views
9

Có thể biết khi nào và nếu nội dung của một số bảng trong cơ sở dữ liệu đã thay đổi? Làm thế nào máy chủ SQL của tôi có thể thông báo cho các ứng dụng khách rằng dữ liệu đã được thay đổi bởi một người dùng khác? Làm cách nào để triển khai thông báo truy vấn bằng dbGo?Ứng dụng cơ sở dữ liệu Client-Server: cách thông báo cho khách hàng rằng dữ liệu đã bị thay đổi?

Khách hàng của tôi có cần thăm dò ý kiến ​​cơ sở dữ liệu hoặc có cơ chế gọi lại cho điều này không?

Ứng dụng khách của tôi là ứng dụng Delphi với TADODataSet và máy chủ của tôi là SQL Server 2005/2008, phục vụ nhiều khách hàng.

+1

Có thể trùng lặp http://stackoverflow.com/q/9671284/960757 – TLama

+1

@TLama, vẫn không có giải pháp kết luận cho TADODataSet và SQL-Server tại đó. – ZigiZ

+1

Nếu ['câu trả lời này] (http://stackoverflow.com/a/9671708/960757) là chính xác, thì * dbGo (ADO) không hỗ trợ thông báo * ... – TLama

Trả lời

1

Không, bạn sẽ phải xây dựng riêng "tầng giữa" của bạn để làm điều này. Cách đơn giản nhất là thăm dò ý kiến ​​của máy chủ. Một giải pháp phức tạp hơn là xây dựng máy chủ "tầng giữa" của riêng bạn để thăm dò cơ sở dữ liệu và đẩy thông báo tới máy khách (với kết nối máy khách của riêng bạn).

Giải pháp nền tảng trung gian là có một khách hàng riêng biệt trên máy chủ thăm dò các bảng bạn cần "xem" và viết "cờ không xác định" vào bảng cơ sở dữ liệu khác có thể được khách hàng thăm dò ý kiến. Ít nhất theo cách này, khách hàng có thể thăm dò một bảng đơn giản với dữ liệu tối thiểu liệt kê những gì đã thay đổi mà sau đó có thể được đọc bởi một truy vấn chọn khác. Một nỗ lực ít hơn rất nhiều trên một phần của khách hàng.

+0

Ngoài ra còn có cách "trộn lẫn trung gian": bản thân các ứng dụng khách bản ghi cơ sở dữ liệu thay đổi bản ghi (bao gồm logic bên máy chủ ứng dụng) có thể gửi bản ghi 'phát sóng đã thay đổi!' tin nhắn cho tất cả các khách hàng nghe qua tầng giữa. Đây sẽ là cách 'ngay lập tức' để thông báo cho các ứng dụng khác về thay đổi. Ngoài ra, 'khách hàng riêng biệt của bạn trên máy chủ' có thể chạy trong khoảng thời gian dài hơn để giảm số lượng bỏ phiếu và có thể bỏ qua chu kỳ bỏ phiếu mỗi khi nhận được thông báo do khách hàng tạo ... – mjn

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