Beckerman2609 Geschrieben 20. Mai 2009 Geschrieben 20. Mai 2009 Hallo zusammen, bin gerade dabei eine Verbindung zu einer Access-Datei herzustellen. Habe auch schon erfolgreich eine Verbindung hergestellt. Leider muss ich die Tabellennamen innerhalb der mdb-Datei vorher kennen, damit ich diese selektieren kann. Ich suche nach einer einfachen Abfrage, welche mir die gesamten Tabellennamen einer mdb zurückgibt. Bisher lautet meine Abfrage folgendermaßen string sql = @"SELECT * FROM nameDerTabelle";
Beckerman2609 Geschrieben 20. Mai 2009 Autor Geschrieben 20. Mai 2009 Es handelt sich übrigens um die Programmiersprache C#
mepp Geschrieben 20. Mai 2009 Geschrieben 20. Mai 2009 Die Tabellennamen lassen sich folgendermaßen auslesen: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.Odbc; namespace tablenamesFromMDB { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { OdbcConnection dbcon = new OdbcConnection(); dbcon.ConnectionString = @"Driver={Microsoft Access Driver (*.mdb)}; Dbq=D:\#\My_Snippets\test.mdb;"; dbcon.Open(); dataGridView1.DataSource = dbcon.GetSchema("tables"); } } } In meinem Beispiel wird folgende Datatable zurückgegeben: Das heisst für dich im Klartext, dass du nurnoch die datatable filtern musst. Und zwar alle Systemtabellen rausnehmen. Aus den restlichen tabellen kannst du dir dann die gewünschten heraussuchen. Noch fragen? Gruss mepp
Amstelchen Geschrieben 20. Mai 2009 Geschrieben 20. Mai 2009 in MSysObjects stehen alle objekte inkl. tabellen der datenbank. sollten die berechtigungen auf diese systemtabelle ausreichend grosszügig gesetzt sein, lassen sich damit sowohl mit ODBC als auch mit OLEDB die tabellennamen auslesen. kriterien sollten sein: Type=1 (1: tabellen) sowie Flags=0. eine andere möglichkeit wäre OLEDB, da kann man mit schemata arbeiten (beispiel in VB, müsstest du halt in C# umschreiben). s'Amstel
Beckerman2609 Geschrieben 22. Mai 2009 Autor Geschrieben 22. Mai 2009 Alles klar, Danke für die Antworten. Hat alles wunderbar funktioniert.
Beckerman2609 Geschrieben 22. Mai 2009 Autor Geschrieben 22. Mai 2009 Hab in diesem Sinne ein neues, ähnliches Problem: Habe mittels ODBC-Connection eine Verbindung zu einem Exceldokument hergestellt. Bei der SQL-Abfrage muss man auch hier die Tabellennamen des Dokuments angeben: Bsp: SELECT * FROM [Tabelle1$A1:F100] Wie komme ich also an die verschiedenen Namen der Tabellen?
Amstelchen Geschrieben 22. Mai 2009 Geschrieben 22. Mai 2009 da excel kein data dictionary besitzt und excelobjekte sich nicht via ODBC auflisten lassen, würde ich dir zu interop (automatisierung) raten: How to: List All Worksheets in a Workbook s'Amstel
Beckerman2609 Geschrieben 27. Mai 2009 Autor Geschrieben 27. Mai 2009 Danke für die Antwort. Das sieht so weit ganz gut aus. Konnte es bisher jedoch nicht ausprobieren. Habe mittlerweile eine ganze Weile versucht den Ausdruck aus dem Beispiel "Microsoft.Office.Tools.Excel.NamedRange NamedRange1 " zu finden. Habe alle möglichen Verweise und dll's gesucht, die irgendwas mit Excel zu tun haben. Leider hat das nicht funktioniert. "Excel.Worksheet " kann ich allerdings benutzen. Die dll, die diesen Verweis laut Microsoft enthalten soll, habe ich bei mir eingebunden. Weiß also nicht woran das noch liegen könnte. Ich arbeite mit Visual Studio 2005 - Professional Edition.
Amstelchen Geschrieben 27. Mai 2009 Geschrieben 27. Mai 2009 instantiiere anstelle von Microsoft.Office.Tools.Excel doch versuchsweise mal Microsoft.Office.Interop.Excel und sieh nach, ob dort der member NamedRange existiert. s'Amstel
Beckerman2609 Geschrieben 28. Mai 2009 Autor Geschrieben 28. Mai 2009 Microsoft.Office.Interop.Excel habe ich bereits mit drin. In dieser Bibliothek befindet sich die ebenfalls im Beispiel genannten "Excel.Worksheets", leider gibts da kein "NameRange"
Amstelchen Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 versuchs mal mit Microsoft.Office.Tools.Excel.Names. s'Amstel
TDM Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 Ich arbeite mit Visual Studio 2005 - Professional Edition. Welches Excel? These examples can be compiled only if you have the required applications installed.
Beckerman2609 Geschrieben 28. Mai 2009 Autor Geschrieben 28. Mai 2009 Also "Microsoft.Office.Tools.Excel.Names" funktioniert nicht. Habe Office 2007 installiert. Hatte schon ein paar Mal eine Warnung, die vielleicht etwas damit zu tun haben könnte: "Für folgende Komponenten, auf die verwiesen wird, sind aktualisierte benutzerdefinierte Wrapper verfügbar: Excel". Bei Doppelklick geht eine Messagebox auf: [...] Möchten Sie die automatisch generierten Wrapper durch die benutzerdefinierten Wrapper ersetzen? Habe diese Meldung schon öfter bekommen und mit "ja" geantwortet. Derzeit befindet sich die Using-Direktive "using Microsoft.Office.Interop.Excel;" in meinem Programm.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden