Mamy naprawdę ogromną aplikację MS Access opracowaną początkowo dla naszych osobistych potrzeb, która następnie została przekształcona w oprogramowanie komercyjne i pomyślnie sprzedana. Oprogramowanie jest rodzajem „wszechstronnego oprogramowania dla Twojej firmy” i zawiera kilka modułów, w tym system zarządzania dokumentami, planowanie zasobów przedsiębiorstwa, zarządzanie zapasami, zarządzanie relacjami z klientami, analizę danych itp. Jesteśmy bardzo zadowoleni z obecnego funkcjonalność aplikacji, ale aby spełnić prośby naszych klientów, zdajemy sobie sprawę, że musimy przejść do czegoś nowego.
Zdecydowaliśmy się stopniowo przenieść naszą aplikację w kierunku .Net, ponieważ możemy trzymać się Visual Basic .Net: mimo że jest to nowy język dla większości programistów tutaj, mamy głęboką znajomość VBA i kilkudziesięciu małych projektów wdrożonych w VB6.
Rozpoczęliśmy już przenoszenie funkcjonalności warstwy danych naszej aplikacji na MS SQL Server, aby każda manipulacja danymi i wyszukiwanie odbywały się bezpośrednio na serwerze.
Szukamy najlepszych praktyk w zakresie stopniowego przenoszenia naszego rozbudowanego interfejsu GUI (około 500–600 różnych formularzy, w tym podformularzy, około 200 raportów z obsługą wielu języków itp.). Po niedawnym żądaniu od naszego potencjalnego klienta wprowadzenia asynchronicznego szyfrowania danych na dokumentach w DMS, chętnie również całkowicie oddzielimy tę część od MS Access i wdrożymy ją w .Net.
Pytanie brzmi, jak bezproblemowo zintegrować aplikację .Net z istniejącym systemem MS Access, abyśmy mogli wywołać ją z określonymi parametrami (uprawnienia użytkownika itp.) I umożliwić wymianę danych między tą aplikacją a uruchomioną aplikacją MS Access.
EDYTOWAĆ:
Próbowaliśmy zastosować pewne praktyki z książki Martina Fowlera „ Wzorce integracji przedsiębiorstw ”, aby osiągnąć pewną integrację między aplikacją MS Access a niektórymi małymi narzędziami, które zaimplementowaliśmy w .Net dla różnych potrzeb. Ale udało nam się jedynie użyć wzorca „współużytkowanej bazy danych” i nie byliśmy bardzo zadowoleni z naszego rozwiązania.
Na przykład zaimplementowaliśmy małe narzędzie działające jako usługa systemu Windows, które automatycznie pobiera wszystkie wiadomości z serwera pocztowego za pomocą połączenia POP3 i przechowuje je w jednej tabeli, podczas gdy wszystkie załączniki są przechowywane w systemie plików.
To, co głównie zrobiliśmy, to skorzystanie z ADO.NET w celu bezpośredniego dostępu do baz danych MS Access w formacie MDB i wypełnienia tabeli niektórymi przetworzonymi danymi (np. Danymi o wiadomościach pocztowych z powyższego przykładu: mamy pola FROM, TO, CC, BCC, Temat i ciało).
Nie ma absolutnie żadnego problemu z pracą z formatem danych MDB z .Net , ponadto nie chcemy pozostać przy MDB i rozszerzyć prawie wszystko do MS SQL Server 2008 - daje nam to znacznie więcej swobody w zakresie zarządzania danymi i skalowalności.
Główny problem polega na tym , że nie wiemy, jak zaimplementować rodzaj „wywołania zwrotnego” w programie Access, abyśmy mogli uruchomić wykonanie określonego kodu VBA podczas aktualizacji danych.
Mieliśmy wielką nadzieję, że MS Access 2010 obsługuje aktualizację i wstawianie wyzwalaczy do tabel danych , ale okazało się, że możemy używać tylko makr MS Access dla tych wyzwalaczy i nie ma sposobu na wykonanie dowolnego niestandardowego kodu VBA w wyzwalaczu.
Wypróbowaliśmy również niektóre rozwiązania z wysyłaniem naciśnięć klawiszy bezpośrednio do okna MS Access, aby naśladować niektóre dane wymagane przez użytkownika. To działa, ale nie uważamy, że jest to niezawodne rozwiązanie, które można zastosować w produkcji.
Przyjrzeliśmy się także DDE dla MS Access, ale nie mogliśmy znaleźć żadnego dobrego przykładowego rozwiązania implementującego polecenia DDE i używającego ich do wymiany danych w pamięci i poleceń.
Zatem głównym problemem jest współistnienie aplikacji MS Access i .Net i interakcja między nimi.
EDYCJA 2 :
Zapomniałem wspomnieć o tym , co zaimplementowaliśmy również bibliotekę MSMQ w VBA do przesyłania wiadomości między .Net i MS Access, problemem był znowu brak oddzwaniania: naprawdę musieliśmy sondować kolejkę pod kątem nowych wiadomości i biorąc pod uwagę, że VBA tak naprawdę nie obsługuje wielowątkowość to nie było naprawdę miłe rozwiązanie.