2012-02-22 1 views
1

J'ai une application Winforms C# à partir de laquelle j'aimerais pouvoir me connecter à une application Access 2007. Fondamentalement, les utilisateurs cliquent sur un bouton dans l'application WinForms, et ils sont pris à un formulaire spécifique dans une application d'accès MS qu'ils ont en cours d'exécution.Lien entre l'application MS Access et l'application Winforms C#

Est-ce possible?

Merci

+1

Ceci n'est probablement pas la réponse que vous cherchez, mais pourquoi ne pas réécrire l'application Access avec WinForms? – jrummell

+1

L'application d'accès est une grande application héritée utilisée dans l'entreprise pour effectuer son travail quotidien. L'application winforms est, en fait, un remplacement pour l'application Acess, mais pour seulement une petite partie de celui-ci. Les utilisateurs doivent pouvoir relier la nouvelle application à l'existant. – user948060

Répondre

0

Oui c'est possible. Vous devrez utiliser DDE. La vieille technologie laide mais elle est toujours dans Access 2007. J'utilise la bibliothèque NDde sur 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

Excellent, merci, je vais vérifier NDde out. Pour être clair, l'application Access est un formulaire d'accès connecté à une base de données MS SQL. Il n'y a pas de fichier .accdb ... Cela change-t-il quelque chose? – user948060

+0

Vous devez avoir un fichier accdb ou accde que vos formulaires d'accès sont en droit? Nous avons utilisé des tables liées SQLServer et avons un fichier accdb pour le développement, puis le convertir en fichier Accde pour le déploiement. Cela fonctionnera avec l'un ou l'autre. – user957902

+0

user957902: J'ai un fichier adp, c'est tout. – user948060

2

En alternative à l'utilisation de DDE, envisager l'automatisation. Vous aurez besoin d'ajouter une référence aux bibliothèques PIA pertinentes, et vous pourrez ensuite avoir un code plus familier à un développeur Access, comme ceci:

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

J'ai découvert que l'utilisation de l'automation démarre toujours une nouvelle instance d'Access. DDE localisera une instance en cours d'exécution. – user957902

+0

@ user957902 vous pouvez récupérer une instance existante avec 'System.Runtime.InteropServices.Marshal.GetActiveObject' (bien que cette approche présente également des problèmes). Voir http://support.microsoft.com/kb/316126 pour des exemples. – phoog

Questions connexes