2012-02-22 4 views
1

Access 2007 응용 프로그램에 연결할 수있는 Winforms C# 응용 프로그램이 있습니다. 기본적으로 사용자는 winforms 앱에서 버튼을 클릭하면 실행중인 MS 액세스 응용 프로그램 내에서 특정 양식으로 이동합니다.MS Access 응용 프로그램과 C# Winforms 응용 프로그램 간의 연결

이것이 가능합니까?

감사합니다.

+1

이것은 아마도 사용자가 찾고있는 대답이 아니지만 왜 WinForms로 Access 애플리케이션을 다시 작성하지 않습니까? – jrummell

+1

액세스 응용 프로그램은 회사 전체에서 일상 업무를 수행하는 데 사용되는 큰 규모의 기존 응용 프로그램입니다. 사실 winforms 앱은 Acess 앱을 대체하지만 그 중 일부는 아닙니다. 사용자는 새 앱에서 기존 앱으로 다시 연결할 수 있어야합니다. – user948060

답변

0

예 가능합니다. DDE를 사용해야합니다. 추한 기술이지만 여전히 Access 2007에 있습니다. NDde 라이브러리를 codeplex에 사용하고 있습니다.

using (DdeClient client = new DdeClient("MSACCESS", "MyDB.accdb")) 
{ 
      String DdeCommand = 
      "[OpenForm frmNavigate,,,,,,UserOpenArgs]"; 
     try 
     { 
      client.Connect(); 
      client.Execute(DdeCommand, 5000); 
     } 
     catch (NDde.DdeException ex) 
     { 
      // MessageBox.Show(ex.Message); 
      Logger.Write(ex.ToString()); 
     } 
} 
+0

우수합니다. 감사합니다. NDde를 확인합니다. 명확하게하기 위해 Access 애플리케이션은 MS SQL 데이터베이스에 연결된 액세스 양식입니다. .accdb 파일이 없습니다 ... 변경 사항이 있습니까? – user948060

+0

액세스 양식이 올바른지 accdb 또는 accde 파일이 있어야합니까? 우리는 SQLServer 연결된 테이블을 사용하고 개발을위한 accdb 파일을 가지고 있으며이를 배포 용 accde 파일로 변환합니다. 이것도 함께 작동합니다. – user957902

+0

user957902 : 나는 adp 파일을 가지고있다. – user948060

2

DDE를 사용하는 대신 자동화를 고려하십시오. 관련 PIA 라이브러리에 대한 참조를 추가해야하며 다음과 같이 Access 개발자에게 다소 익숙한 코드를 추가해야합니다.

var access = new Access.Application(); 
access.OpenCurrentDatabase("MyDB.accdb"); 
access.OpenForm("frmNavigate"); 
+0

자동화를 사용하면 항상 Access의 새 인스턴스가 시작된다는 것을 알게되었습니다. DDE는 이미 실행중인 인스턴스를 찾습니다. – user957902

+0

@ user957902 'System.Runtime.InteropServices.Marshal.GetActiveObject'를 사용하여 기존 인스턴스를 가져올 수 있습니다 (이 방법에도 문제가 있음). 예제는 http://support.microsoft.com/kb/316126을 참조하십시오. – phoog

관련 문제