verwendetes Datenbanksystem: Access
Ich habe eine Datenbank bereits mit C# erstellt.
Ich kann nun verschiedene Tabellen erstellen und will diese dann auch in einem Menü anzeigen lassen. Dort soll es dann die Möglichkeit geben, den Namen zu ändern, usw.
Das Problem ist nur, wenn ich die Tabellennamen in das Menü lade, erscheinen zwar alle Tabellennamen der Datenbank, aber auch 4 weitere: MsysACEs, MsysObjects, MsysQueries, MsysRelationships;
Der code sieht wie folgt aus:
#region Initialisieren der Datenbank
ADOX.Table table = new ADOX.TableClass();
ADOX.Catalog catalog = new ADOX.CatalogClass();
ADODB.Connection conn = new ADODB.ConnectionClass();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Mannschaften.mdb;";
conn.Open(null,null,null,0);
catalog.ActiveConnection = conn;
#endregion
Menu_Laden.MenuItems.Clear();
for (int i = 0; i < catalog.Tables.Count; i++)
{
MenuItem menuItem = new MenuItem(catalog.Tables[i].Name);
Menu_Laden.MenuItems.Add (menuItem);
}
Menu_Bearbeiten.MenuItems.Clear();
for (int i = 0; i < catalog.Tables.Count; i++)
{
MenuItem menuItem = new MenuItem(catalog.Tables[i].Name);
Menu_Bearbeiten.MenuItems.Add (menuItem);
}
Menu_Loschen.MenuItems.Clear();
for (int i = 0; i < catalog.Tables.Count; i++)
{
MenuItem menuItem = new MenuItem(catalog.Tables[i].Name);
Menu_Loschen.MenuItems.Add (menuItem);
}
Die Frage stellt sich nun, wo kommen diese 4 weiteren Namen her?? Wie kann ich verhindern, dass diese auch angezeigt werden??
Das ist ein wenig doof den aktuell ersten Google Link zum Thema "MsysObjects" hier reinzustellen, aber vielleicht erklärt er ja alles: http://www.access-im-unternehmen.de/82.0.html ?
mfg M.L.
Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉
Hi,
ich habe das ganze auch schon mal gebnraucht. Bei mir sind diese System-Views, nicht aufgetaucht. Hab allerdings den Zugriff über ODBC realisiert.
DataTable table = con.GetSchema("Tables");
foreach (DataRow r in table.Rows)
{
string table_type = (string)r["Table_Type"];
string table_name = (string)r["Table_Name"];
if ( table_type == "TABLE")
listTables.Items.Add(table_name);
}
Hallo da_owa,
Wie kann ich verhindern, dass diese auch angezeigt werden?
Indem du sie nicht anzeigst. 😉 Du erstellst doch die Menüs.
Pseudocode:
string systemViews="Msys";
for (int i = 0; i < catalog.Tables.Count; i++)
{
if( catalog.Tables[i].Name.Contains(systemViews) == false )
{
MenuItem menuItem = new MenuItem(catalog.Tables[i].Name);
Menu_Laden.MenuItems.Add (menuItem);
}
}
Das sollte eigendlich für dich völlig ausreichend sein.
Persönlich würde ich aber nicht auf die String-Methode Contains zurückgreifen, sondern es mi einer kleinen Regular Expression umsetzen.
Gruß falangkinjau
Danke für die Hilfe, aber auf die IF Abfrage hätte ich selber kommen müssen 🙄