우리는 개인 요구에 맞게 자체 개발 한 거대한 MS Access 애플리케이션을 상용 소프트웨어로 전환하여 성공적으로 판매했습니다. 이 소프트웨어는 일종의 "비즈니스를위한 모든 소프트웨어"이며 문서 관리 시스템, 기업 자원 계획, 재고 관리, 고객 관계 관리, 데이터 분석 등 여러 모듈을 포함합니다. 고객의 요청을 충족시키기 위해 새로운 무언가로 옮겨 가야한다는 것을 깨달았습니다.
우리는 Visual Basic .Net을 고수 할 수 있기 때문에 응용 프로그램을 .Net으로 점진적으로 옮기기로 결정했습니다. 여기에서는 대부분의 개발자에게 새로운 언어이지만 VBA와 VB6에서 구현 된 수십 개의 소규모 프로젝트에 대해 깊이 알고 있습니다.
우리는 이미 모든 데이터 조작 및 검색이 서버에서 직접 수행되도록 응용 프로그램의 데이터 계층 기능을 MS SQL Server로 이전하기 시작했습니다.
우리가 찾고있는 것은 광범위한 GUI (하위 양식을 포함한 약 500-600 개의 다른 양식, 다국어 지원을 포함한 약 200 개의 보고서 등)를 점차적으로 이동시키는 모범 사례입니다. DMS 문서에서 비동기 데이터 암호화를 구현하려는 잠재 고객의 최근 요청에 따라이 부분을 MS Access에서 완전히 분리하여 .Net에서 구현하게되어 기쁩니다.
문제는 .Net 응용 프로그램을 기존 MS Access 시스템과 원활하게 통합하여 특정 매개 변수 (사용자 권한 등)로 호출하고이 응용 프로그램과 실행중인 MS Access 응용 프로그램간에 데이터를 교환 할 수 있도록하는 방법입니다.
편집하다:
우리는 Martin Fowler의 저서 " 엔터프라이즈 통합 패턴 (Enterprise intergration patterns) " 의 일부 관행을 적용 하여 MS Access 응용 프로그램과 다양한 요구를 위해 .Net에서 구현 한 작은 유틸리티 간의 통합을 달성했습니다. 그러나 우리는 "공유 데이터베이스"패턴 만 사용했고 실제로는 솔루션에 만족하지 않았습니다.
예를 들어, POP3 연결을 사용하여 메일 서버에서 모든 메시지를 자동으로 다운로드하여 하나의 테이블에 저장하는 Windows 서비스로 실행되는 작은 유틸리티를 구현했지만 모든 첨부 파일은 파일 시스템에 저장되었습니다.
우리가 주로 한 것은 ADO.NET을 사용하여 MDB 형식의 MS Access 데이터베이스에 직접 액세스하고 처리 된 데이터로 테이블을 채우는 것입니다 (위 예의 메일 메시지에 대한 데이터 등). FROM, TO, CC, BCC, 대상 및 신체).
.Net의 MDB 데이터 형식으로 작업하는 데 전혀 문제가 없으며 , MDB를 유지하고 싶지 않으며 거의 모든 것을 MS SQL Server 2008로 업 사이징하지 않기 때문에 데이터 관리 및 확장 성과 관련하여 훨씬 더 많은 자유를 얻을 수 있습니다.
여기서 중요한 문제는 데이터 업데이트시 특정 VBA 코드의 실행을 트리거 할 수 있도록 Access에서 일종의 "콜백"을 구현하는 방법을 모른다는 것입니다 .
데이터 테이블에 대한 업데이트 및 삽입 트리거를 지원하는 MS Access 2010에 큰 희망이 있었지만 이러한 트리거에 대해서만 MS Access 매크로를 사용할 수 있으며 트리거 내에서 사용자 지정 VBA 코드를 실행할 수있는 방법이 없습니다.
또한 사용자가 호출 한 일부 데이터 쿼리를 흉내 내기 위해 키 입력을 MS Access 창 으로 직접 보내는 솔루션도 시도했습니다 . 이것은 작동하지만 프로덕션 환경에서 사용할 수있는 실현 가능한 솔루션이라고는 생각하지 않습니다.
또한 MS Access 용 DDE를 조사했지만 DDE 명령을 구현 하고 메모리 내 데이터 및 명령 교환에 사용하는 좋은 샘플 솔루션을 찾을 수 없었 습니다.
따라서 주요 문제는 MS Access와 .Net 응용 프로그램이 공존하고 상호 작용하는 것입니다.
EDIT2 :
.Net과 MS Access 사이의 메시지 전달을 위해 VBA에서 MSMQ 라이브러리를 구현 한 것을 언급하는 것을 잊어 버렸습니다 . 문제는 다시 콜백이 부족하다는 것입니다. 새 메시지에 대한 대기열을 실제로 폴링하고 VBA가 실제로 지원하지 않는다는 점을 감안할 때 멀티 스레딩 그것은 정말 좋은 해결책이 아니 었습니다.