Laden...

Access aus c# öffnen

Erstellt von ganymedes vor 15 Jahren Letzter Beitrag vor 15 Jahren 7.128 Views
G
ganymedes Themenstarter:in
219 Beiträge seit 2007
vor 15 Jahren
Access aus c# öffnen

Ich habe ein Form und einen Button. Nun möchte ich, dass wenn der Button gedrückt wird, MS Access gestartet wird. Hierzu habe ich die Microsoft Access Object Library eingebunden.

Dummerweise habe ich immer folgenden Fehler beim Aufruf:

Error 1 'Form' is an ambiguous reference between 'System.Windows.Forms.Form' and 'Microsoft.Office.Interop.Access.Form'


Access.Application oAccess = null;

// Start a new instance of Access for Automation:
oAccess = new Access.ApplicationClass();

// Open a database in exclusive mode:
oAccess.OpenCurrentDatabase(
"c:\\mydb.mdb", //filepath
true //Exclusive
);

Bitte um Hilfe.

P
42 Beiträge seit 2007
vor 15 Jahren

Hallo ganymedes

versuche mal System.Diagnostics.Process um Access zu starten.


private void button1_Click(object sender, EventArgs e)
{
string sFileName = @"C:\Program Files\Microsoft Office\Office12\MSACCESS.EXE";
System.Diagnostics.Process prog = new System.Diagnostics.Process();
prog.StartInfo = new System.Diagnostics.ProcessStartInfo(sFileName);
prog.Start();
prog.WaitForExit();
}


1.274 Beiträge seit 2005
vor 15 Jahren

Die Klasse 'System.Windows.Forms.Form' und 'Microsoft.Office.Interop.Access.Form' sind beides mal mit Using eingebunden, vielleicht hast du irgendwo Form verwendet und daher weis er nicht für welche Klasse er sich entscheiden sollten, wenn ein Objekt auf der Klasse Form erstellen möchte oder auch bei einem CAST.

lg
L.G.

"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein

G
ganymedes Themenstarter:in
219 Beiträge seit 2007
vor 15 Jahren

Danke für Eure Beiträge!

Du hast recht!
Ich hatte


using System.Windows.Forms.Form;
using Microsoft.Office.Interop.Access.Form;

eingebunden.

Nur...wie mache ich damit ich nicht immer Microsoft.Office.Interop.Access.xxxxx angeben muss??

Zurzeit habe ich es so (geht aber ist etwas mühsam):


Microsoft.Office.Interop.Access.Application oAccess = null;

// Start a new instance of Access for Automation:
oAccess = new Microsoft.Office.Interop.Access.ApplicationClass();

// Open a database in exclusive mode:
oAccess.OpenCurrentDatabase(@"C:\test.mdb", true,"");


T
708 Beiträge seit 2008
vor 15 Jahren

Hallo ganymedes,

ich denke da gibt es ein Verständnisproblem.

Du bindest eine Schnittstelle zu Access ein, mit der du dich zu einer Datenbank verbinden kannst, um die Daten/Tabellen in deinem C# Programm verwenden zu können.

Access an sich zu öffnen braucht natürlich keine Schnittstelle!
Dafür hat peacemaker dir einen Code gepostet, mit dem du jedes Ausführbare Programm (z.B. MSaccess.exe) starten kannst.

Möchtst du Access nun starten oder auf die Daten zugreifen?!

Gruß,
TriB

EDIT:
Ahh, jetzt sehe ich auch was du machen möchtest 🙂
Du kannst eine Using Direktive wie eine Variable anlegen und dann diesen Namen verwenden!
using MeinText = System.Text;

G
ganymedes Themenstarter:in
219 Beiträge seit 2007
vor 15 Jahren

Hallo trib

Danke für deinen Beitrag!!! Nun geht was ich wollte! Danke!

Ich versuche das Reporting von Access zu brauchen, darum benötige ich
die Automatisierung um auf die anwendungsspezifische Features zuzugreiffen zu können.

ADO.NET benötige ich in meinem Fall nicht.

J
3.331 Beiträge seit 2006
vor 15 Jahren

Nur...wie mache ich damit ich nicht immer Microsoft.Office.Interop.Access.xxxxx angeben muss??

Das geht z.B. so:

using WinForm = System.Windows.Forms.Form;
using AccessForm = Microsoft.Office.Interop.Access.Form;

public class MainForm : WinForm {...}

Es gibt noch mehr Möglichkeiten für alias, siehe :rtfm: using-Direktive.

Jürgen