Kami memiliki aplikasi MS Access yang sangat besar yang dikembangkan in-house awalnya untuk kebutuhan pribadi kami yang kemudian diubah menjadi perangkat lunak komersial dan berhasil dijual. Perangkat lunak ini adalah semacam "perangkat lunak serba guna untuk bisnis Anda" dan berisi beberapa modul termasuk Sistem Manajemen Dokumen, Perencanaan Sumber Daya Perusahaan, Manajemen Inventaris, Manajemen Hubungan Pelanggan, Analisis Data, dll. Kami cukup puas dengan yang ada saat ini fungsionalitas aplikasi, tetapi untuk memenuhi permintaan dari klien kami, kami menyadari bahwa kami harus pindah ke sesuatu yang baru.
Kami memutuskan untuk secara bertahap memindahkan aplikasi kami ke .Net karena kami dapat tetap menggunakan Visual Basic .Net: meskipun ini adalah bahasa baru bagi sebagian besar pengembang di sini, kami memiliki pengetahuan mendalam tentang VBA dan beberapa lusin proyek kecil yang diimplementasikan di VB6.
Kami sudah mulai memindahkan fungsionalitas lapisan data aplikasi kami ke MS SQL Server, sehingga setiap manipulasi dan pencarian data dilakukan langsung di server.
Apa yang kami cari adalah praktik terbaik untuk secara bertahap memindahkan GUI kami yang luas (sekitar 500-600 bentuk berbeda termasuk subformulir, sekitar 200 laporan dengan dukungan multi-bahasa, dll). Mengikuti permintaan terbaru dari pelanggan potensial kami untuk mengimplementasikan enkripsi data asinkron pada dokumen dalam DMS, kami juga akan dengan senang hati memisahkan bagian ini dari MS Access dan mengimplementasikannya dalam .Net.
Pertanyaannya adalah bagaimana mengintegrasikan aplikasi .Net dengan sistem MS Access yang ada, sehingga kita dapat menjalankannya dengan parameter tertentu (hak pengguna dll.) Dan memungkinkan pertukaran data antara aplikasi ini dan menjalankan aplikasi MS Access.
EDIT:
Kami mencoba menerapkan beberapa praktik dari buku Martin Fowler " Pola integrasi perusahaan " untuk mencapai beberapa integrasi antara aplikasi MS Access dan beberapa utilitas kecil yang kami implementasikan di .Net untuk berbagai kebutuhan. Tetapi kami hanya berhasil menggunakan pola "database bersama" dan tidak benar-benar puas dengan solusi kami.
Misalnya, kami menerapkan utilitas kecil yang berjalan sebagai layanan Windows yang secara otomatis mengunduh semua pesan dari server surat menggunakan koneksi POP3 dan menyimpannya dalam satu tabel, sedangkan semua lampiran disimpan dalam sistem file.
Apa yang kami terutama lakukan adalah kami menggunakan ADO.NET untuk secara langsung mengakses database MS Access dalam format MDB dan mengisi tabel dengan beberapa data yang diproses (seperti data tentang pesan email dari contoh di atas: kami memiliki bidang untuk FROM, TO, CC, BCC, Subjek dan Tubuh).
Sama sekali tidak ada masalah untuk bekerja dengan format data MDB dari .Net , apalagi kita tidak ingin tetap menggunakan MDB dan meningkatkan hampir semuanya menjadi MS SQL Server 2008 - ini memberi kita lebih banyak kebebasan mengenai manajemen data dan skalabilitas.
Masalah utama di sini adalah bahwa kita tidak tahu bagaimana menerapkan semacam "panggilan balik" di Access sehingga kita dapat memicu eksekusi kode VBA tertentu pada pembaruan data.
Kami memiliki harapan besar dengan pembaruan yang mendukung MS Access 2010 dan menyisipkan pemicu untuk tabel data , tetapi ternyata kami hanya bisa menggunakan MS Access Macro untuk pemicu ini dan tidak ada cara untuk menjalankan kode VBA khusus dalam pemicu.
Kami juga mencoba beberapa solusi dengan mengirim penekanan tombol langsung ke jendela MS Access untuk meniru beberapa permintaan data yang diminta pengguna. Ini bekerja, tetapi kami tidak berpikir ini adalah solusi yang dapat digunakan yang dapat digunakan dalam produksi.
Kami juga melihat ke DDE untuk MS Access, tetapi kami tidak dapat menemukan solusi sampel yang baik mengimplementasikan perintah DDE dan menggunakannya untuk data dalam memori dan pertukaran perintah.
Jadi, masalah utama adalah untuk memiliki MS Access dan aplikasi .Net hidup berdampingan dan berinteraksi satu sama lain.
EDIT2 :
Saya lupa menyebutkan apa yang kami juga mengimplementasikan perpustakaan MSMQ di VBA untuk melewati pesan antara .Net dan MS Access, masalahnya lagi adalah kurangnya callback di sini: kami benar-benar harus polling antrian untuk pesan baru dan mengingat bahwa VBA tidak benar-benar mendukung multi-threading itu bukan solusi yang bagus.