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.
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();
}
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
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,"");
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;
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.
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