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"; Zitieren
Beckerman2609 Geschrieben 20. Mai 2009 Autor Geschrieben 20. Mai 2009 Es handelt sich übrigens um die Programmiersprache C# Zitieren
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 Zitieren
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 Zitieren
Beckerman2609 Geschrieben 22. Mai 2009 Autor Geschrieben 22. Mai 2009 Alles klar, Danke für die Antworten. Hat alles wunderbar funktioniert. Zitieren
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? Zitieren
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 Zitieren
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. Zitieren
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 Zitieren
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" Zitieren
Amstelchen Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 versuchs mal mit Microsoft.Office.Tools.Excel.Names. s'Amstel Zitieren
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. Zitieren
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. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.