Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Tabellennamen von Access-Dateien(.mdb) über ODBC-Abfragen

Empfohlene Antworten

Veröffentlicht

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";

Es handelt sich übrigens um die Programmiersprache C#

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:

scheme.gif

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

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

Alles klar, Danke für die Antworten. Hat alles wunderbar funktioniert.

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?

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

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.

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

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"

versuchs mal mit Microsoft.Office.Tools.Excel.Names.

s'Amstel

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.