Chúng tôi có một ứng dụng MS Access thực sự khổng lồ được phát triển nội bộ ban đầu cho nhu cầu cá nhân của chúng tôi sau đó được chuyển thành phần mềm thương mại và được bán thành công. Phần mềm này là một loại "phần mềm toàn diện cho doanh nghiệp của bạn" và chứa một số mô-đun bao gồm Hệ thống quản lý tài liệu, Lập kế hoạch tài nguyên doanh nghiệp, Quản lý kho, Quản lý quan hệ khách hàng, Phân tích dữ liệu, v.v. Chúng tôi khá hài lòng với hiện tại chức năng của ứng dụng, nhưng để đáp ứng các yêu cầu từ khách hàng, chúng tôi nhận ra rằng chúng tôi phải chuyển sang một thứ mới.
Chúng tôi quyết định dần dần chuyển ứng dụng của mình sang .Net vì chúng tôi có thể gắn bó với Visual Basic .Net: mặc dù đó là ngôn ngữ mới cho hầu hết các nhà phát triển ở đây, chúng tôi có kiến thức sâu về VBA và hàng tá dự án nhỏ được triển khai trong VB6.
Chúng tôi đã bắt đầu chuyển chức năng lớp dữ liệu của ứng dụng của mình sang MS SQL Server, để mọi thao tác và tìm kiếm dữ liệu được thực hiện trực tiếp trên máy chủ.
Những gì chúng tôi đang tìm kiếm là các thực tiễn tốt nhất để chuyển dần GUI rộng lớn của chúng tôi (khoảng 500-600 hình thức khác nhau bao gồm biểu mẫu con, khoảng 200 báo cáo có hỗ trợ đa ngôn ngữ, v.v.). Theo yêu cầu gần đây từ khách hàng tiềm năng của chúng tôi để thực hiện mã hóa dữ liệu không đồng bộ trên các tài liệu trong DMS, chúng tôi cũng rất vui khi tách hoàn toàn phần này khỏi MS Access và triển khai nó trong .Net.
Câu hỏi đặt ra là làm thế nào để tích hợp liền mạch ứng dụng .Net với hệ thống MS Access hiện có, để chúng tôi có thể gọi nó với một số tham số nhất định (quyền người dùng, v.v.) và cho phép trao đổi dữ liệu giữa ứng dụng này và chạy ứng dụng MS Access.
CHỈNH SỬA:
Chúng tôi đã cố gắng áp dụng một số thực tiễn từ cuốn sách " Các mẫu kết hợp doanh nghiệp " của Martin Fowler để đạt được một số tích hợp giữa ứng dụng MS Access và một số tiện ích nhỏ mà chúng tôi đã triển khai trong .Net cho các nhu cầu khác nhau. Nhưng chúng tôi chỉ quản lý để sử dụng mẫu "cơ sở dữ liệu dùng chung" và không thực sự hài lòng với giải pháp của chúng tôi.
Chẳng hạn, chúng tôi đã triển khai một tiện ích nhỏ chạy dưới dạng dịch vụ Windows, tự động tải xuống tất cả thư từ máy chủ thư bằng kết nối POP3 và lưu trữ chúng vào một bảng, trong khi tất cả các tệp đính kèm được lưu trữ trong hệ thống tệp.
Những gì chúng tôi chủ yếu làm là chúng tôi đã sử dụng ADO.NET để truy cập trực tiếp vào cơ sở dữ liệu MS Access ở định dạng MDB và điền vào bảng một số dữ liệu đã xử lý (như dữ liệu về thư trong ví dụ ở trên: chúng tôi có các trường cho TỪ, TO, CC, BCC, Chủ thể và cơ thể).
Hoàn toàn không có vấn đề gì khi làm việc với định dạng dữ liệu MDB từ .Net , hơn nữa chúng tôi không muốn ở lại với MDB và tăng kích thước gần như mọi thứ cho MS SQL Server 2008 - điều này cho chúng tôi nhiều tự do hơn về quản lý dữ liệu và khả năng mở rộng.
Vấn đề chính ở đây là chúng tôi không biết cách triển khai một loại "gọi lại" trong Access để có thể kích hoạt việc thực thi mã VBA nhất định trên cập nhật dữ liệu.
Chúng tôi rất hy vọng với MS Access 2010 hỗ trợ cập nhật và chèn trình kích hoạt cho các bảng dữ liệu , nhưng hóa ra chúng tôi chỉ có thể sử dụng MS Access Macros cho các trình kích hoạt này và không có cách nào để thực thi bất kỳ mã VBA tùy chỉnh nào trong trình kích hoạt.
Chúng tôi cũng đã thử một số giải pháp bằng cách gửi tổ hợp phím trực tiếp đến cửa sổ MS Access để bắt chước một số yêu cầu dữ liệu do người dùng yêu cầu. Điều này hoạt động, nhưng chúng tôi không nghĩ rằng đây là một giải pháp khả thi có thể được sử dụng trong sản xuất.
Chúng tôi cũng đã xem xét DDE cho MS Access, nhưng chúng tôi không thể tìm thấy bất kỳ giải pháp mẫu tốt nào thực hiện các lệnh DDE và sử dụng chúng cho dữ liệu trong bộ nhớ và trao đổi lệnh.
Vì vậy, vấn đề chính là để ứng dụng MS Access và .Net cùng tồn tại và tương tác với nhau.
EDIT2 :
Tôi đã quên đề cập đến những gì chúng tôi cũng đã triển khai thư viện MSMQ trong VBA cho tin nhắn chuyển qua .Net và MS Access, vấn đề một lần nữa là thiếu cuộc gọi lại ở đây: chúng tôi thực sự phải thăm dò hàng đợi cho các tin nhắn mới và cho rằng VBA không thực sự hỗ trợ đa luồng nó không thực sự là một giải pháp tốt.