Daha önce ticari bir yazılıma dönüştürülen ve başarılı bir şekilde satılan kişisel ihtiyaçlarımız için şirket içinde geliştirilen çok büyük bir MS Access uygulamasına sahibiz. Yazılım, "işiniz için çok yönlü bir yazılım" türüdür ve Doküman Yönetim Sistemi, Kurumsal Kaynak Planlama, Envanter Yönetimi, Müşteri İlişkileri Yönetimi, Veri Analizi vb. Gibi çeşitli modüller içerir. Mevcut durumdan oldukça memnunuz. Uygulamanın işlevselliği, ancak müşterilerimizin isteklerini karşılamak için yeni bir şeye geçmemiz gerektiğinin farkındayız.
Uygulamamızı aşamalı olarak .Net'e taşımaya karar verdik çünkü Visual Basic. Net'e bağlı kalabiliyoruz: buradaki geliştiricilerin çoğu için yeni bir dil olmasına rağmen, VBA ve VB6'da uygulanan birkaç düzine küçük proje hakkında derin bilgiye sahibiz.
Uygulamamızın veri katmanı işlevselliğini MS SQL Server'a taşımaya başladık, böylece her veri manipülasyonu ve arama doğrudan sunucu üzerinde gerçekleştirildi.
Aradığımız şey, geniş GUI'lerimizi kademeli olarak hareket ettirmek için en iyi uygulamalardır (alt formlar dahil yaklaşık 500-600 farklı form, çok dilli desteğe sahip yaklaşık 200 rapor vb.). Potansiyel müşterimizden DMS'deki belgelere zaman uyumsuz veri şifrelemesi uygulama talebinin ardından, bu parçayı MS Access'ten tamamen ayırıp .Net'te uygulamaktan memnuniyet duyarız.
Sorun, .NET uygulamasını mevcut MS Access sistemi ile nasıl sorunsuz bir şekilde bütünleştireceğimizdir, böylece onu belirli parametrelerle (kullanıcı hakları vb.) Çağırabilir ve bu uygulama ile MS Access uygulamasını çalıştıran arasında veri alışverişini sağlayabiliriz.
DÜZENLE:
MS Access uygulaması ile çeşitli ihtiyaçlar için .Net'te uyguladığımız küçük yardımcı programlar arasında entegrasyon sağlamak için Martin Fowler'in " Kurumsal entegrasyon kalıpları " kitabından bazı uygulamaları uygulamaya çalıştık . Ancak yalnızca "paylaşılan veritabanı" modelini kullanmayı başardık ve çözümümüzden gerçekten memnun kalmadık.
Örneğin, Windows hizmeti olarak çalışan ve POP3 bağlantısını kullanarak tüm mesajları posta sunucusundan otomatik olarak indiren ve bunları tek bir tabloda saklayan küçük bir yardımcı program uyguladık, oysa tüm ekler dosya sisteminde saklandı.
Temelde yaptığımız şey, ADO.NET'i MDB formatında MS Access veritabanlarına doğrudan erişmek ve tabloyu bazı işlenmiş verilerle doldurmak (yukarıdaki örnekten gelen posta mesajları hakkındaki veriler gibi: FROM, TO, CC, BCC, Konu ve Beden).
Net'ten MDB veri formatıyla çalışmak kesinlikle bir sorun değil, ayrıca MDB ile kalmak istemiyoruz ve MS SQL Server 2008'e neredeyse her şeyi yükseltmek istemiyoruz - bu bize veri yönetimi ve ölçeklenebilirlik konusunda daha fazla özgürlük sunuyor.
Buradaki asıl sorun , Access'te bir çeşit "geri arama" nın nasıl uygulanacağını bilmememizdir , böylece veri güncellemesinde belirli VBA kodlarının yürütülmesini tetikleyebiliriz.
MS Access 2010 ile veri tabanları için güncelleme ve ekleme tetikleyicilerini destekleyen büyük umutlarımız vardı , ancak bu tetikleyiciler için yalnızca MS Access Makrolarını kullanabileceğimiz ve tetikleyicide herhangi bir özel VBA kodu yürütmenin mümkün olmadığı ortaya çıktı.
Ayrıca bazı kullanıcı tarafından çağrılan veri gereksinimlerini taklit etmek için tuş vuruşlarını doğrudan MS Access penceresine göndermekle de bazı çözümler denedik . Bu işe yarıyor ama bunun üretimde kullanılabilecek makul bir çözüm olduğunu düşünmüyoruz.
MS Access için DDE'yi de inceledik, ancak DDE komutlarını uygulayan ve bunları bellek içi veri ve komut değişimi için kullanan herhangi bir iyi örnek çözüm bulamadık .
Bu nedenle, asıl sorun MS Access ve. Net uygulamasının birlikte var olması ve birbirleriyle etkileşime geçmesidir.
EDIT2 :
Net ve MS Access arasındaki iletiler için VBA'da MSMQ kitaplığını da uyguladığımızdan bahsetmeyi unuttum , sorun yine buradaki geri aramaların olmamasıydı: yeni iletiler için kuyruğu sorgulamak zorunda kaldık ve VBA'nın gerçekten desteklemediği göz önüne alındığında çoklu iş parçacığı gerçekten güzel bir çözüm değildi.