Laden...

[gelöst] Access in C#, Tabellennamen

Erstellt von da_owa vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.106 Views
D
da_owa Themenstarter:in
58 Beiträge seit 2007
vor 16 Jahren
[gelöst] Access in C#, Tabellennamen

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??

:::{style="color: red;"}Es gibt 10 Arten von Menschen: Die die Tertiär verstehen, Die die es nicht verstehen und Die die es mit Binär verwechseln){red}
M
368 Beiträge seit 2006
vor 16 Jahren

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 😉

A
254 Beiträge seit 2007
vor 16 Jahren

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

            }
F
171 Beiträge seit 2006
vor 16 Jahren

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

D
da_owa Themenstarter:in
58 Beiträge seit 2007
vor 16 Jahren

Danke für die Hilfe, aber auf die IF Abfrage hätte ich selber kommen müssen 🙄

:::{style="color: red;"}Es gibt 10 Arten von Menschen: Die die Tertiär verstehen, Die die es nicht verstehen und Die die es mit Binär verwechseln){red}