2012-12-19 10 views
10

Abbiamo sviluppato un'app per la ms-access piuttosto pesante, con circa 300 moduli (sì!). Poiché il codice crea un'istanza di questi moduli (e non li "apre" semplicemente), possiamo avere più istanze dello stesso modulo visualizzate sullo schermo.Come incorporare i moduli di accesso ms nel modulo C#?

Per bypassare le limitazioni di VBA, e la sua scarsa attuazione di alcuni concetti object oriented come eredità, interfaccia, incapsulamento, ecc, il codice è gestione:

  • una collezione finestre fatto di tutto il istanze attive delle nostre forme.
  • un oggetto 'ghost windows', che contiene tutte le proprietà e i metodi aggiuntivi necessari per il nostro codice.

Così, ad esempio, quando voglio raggiungere la proprietà standard di uno dei miei casi, posso scrivere:

MyWindows.accessWindow(hWnd).name 

Dove hWnd è la maniglia data da Windows, e il nome di serie modulo() in nome

Ma se voglio raggiungere una proprietà specifica di uno dei miei casi, posso scrivere:.

MyWindows.ghostWindow(hWnd).originalRecordset 

Dove 'origine alRecordset 'contiene il ADODB.recordset originale che è stato caricato quando il modulo è stato instanciated (significato prima che qualsiasi modifica apportata dall'utente ... possa essere interessante!)

Sta funzionando benissimo, ma la codifica può essere una vera PITA , specialmente quando si sa quanto potrebbe essere Starigforward fare qualcosa di simile in C#, a patto che si possa incapsulare l'oggetto form di MS-Access in un oggetto C# più generico. Quindi questa è la domanda: si potrebbe incorporare il modulo MS-Access in una C# dll fatta in casa? È fattibile?

Non mi aspetto una risposta completa, ma mi aspetto qualche aiuto per andare sulla buona strada. Qualche idea di amici?

+2

Tecnicamente impressionante, ma un campo minato commerciale e la manutenzione? Suggerisco di iniziare un incrementale ri-scrittura. Riscrivere parti della tua app in verticali basati sul dominio con chiare definizioni ha funzionato per me in passato. Il risultato è che ottieni più C#. –

risposta

3

Questo dovrebbe essere possibile tramite Office Automation.

In breve, si utilizza C# per avviare l'applicazione di accesso e quindi ottenere il modello di oggetto appropriato per i moduli, allo stesso modo in cui sono disponibili in vba.

È probabilmente il primo passo se si desidera utilizzare più C# (buono) e meno di vba (meh) per migliorare/refactare gradualmente l'app di accesso.

Maggiori dettagli in questo articolo KB MS "How to automate Microsoft Access by using Visual C#"

+1

Grazie per il link. Potrebbe esserci qualcosa di interessante lì –

Problemi correlati