Hallo,
ich muss zugeben das ich mich mit Datenbanken noch nicht so gut auskenne und auch nicht mit C#, da ich sonst in C++ programmiere, wobei sich da die ADOX-Programmierung aber viel komplizierter rausstellte.
Ich benutze VC 2008.
In dem folgenden Code will ich mit ADOX an sich einfach nur eine Datenbank mit zwei Tabellen anlegen: einmal fuer Buecher und einmal fuer Autoren. Die Buecher besitzen ein Feld AuthorID um auf einen Eintrag in der anderen Tabelle zu verweisen. Nichtbeteiligte Spalten habe ich der Uebersicht halber rausgenommen.
Der Compiler uebersetzt das ohne zu meckern, allerdings gibts dann beim Ausfuehren einen Laufzeitfehler:
Beim Debugggen habe ich herausgefunden, dass der Fehler in der Zeile "Buecher.Keys.Append(key, ADOX.KeyTypeEnum.adKeyForeign, null/*Type.Missing*/, null, null);" auftritt.
An sich finde ich habe ich mich sehr gut an die Vorlage in einem Buch gehalten; kann mir diesen Fehler nicht erklaeren.
Wisst ihr vielleicht wo der Fehler liegt, Hilfe waere echt nett!
Vielen Dank schonmal im Vorraus,
Andreas
ich muss zugeben das ich mich mit Datenbanken noch nicht so gut auskenne und auch nicht mit C#, da ich sonst in C++ programmiere, wobei sich da die ADOX-Programmierung aber viel komplizierter rausstellte.
Ich benutze VC 2008.
In dem folgenden Code will ich mit ADOX an sich einfach nur eine Datenbank mit zwei Tabellen anlegen: einmal fuer Buecher und einmal fuer Autoren. Die Buecher besitzen ein Feld AuthorID um auf einen Eintrag in der anderen Tabelle zu verweisen. Nichtbeteiligte Spalten habe ich der Uebersicht halber rausgenommen.
Code:
static void Tabellen_anlegen(String Name) { ADOX.Column column; ADOX.Catalog catalog = new ADOX.Catalog(); catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=E:\\NewMDB.mdb;"); //Spalte für ID ADOX.Table Buecher = new ADOX.Table(); Buecher.Name = "Books"; column = new ADOX.Column(); column.ParentCatalog = catalog; column.Name = "ID"; column.Type = ADOX.DataTypeEnum.adInteger; column.Properties["Nullable"].Value = false; column.Properties["AutoIncrement"].Value = true; Buecher.Columns.Append(column, ADOX.DataTypeEnum.adIUnknown, 0); //Spalte für einen Verweis auf den Autor column = new ADOX.Column(); column.ParentCatalog = catalog; column.Name = "AuthorID"; column.Type = ADOX.DataTypeEnum.adInteger; column.Properties["Nullable"].Value = false; Buecher.Columns.Append(column, ADOX.DataTypeEnum.adIUnknown, 0); Buecher.ParentCatalog = catalog; //Setzen des Primärindex auf ID ADOX.Index index = new ADOX.Index(); index.Name = "PrimaryKey"; index.PrimaryKey = true; index.Columns.Append("ID", Buecher.Columns["ID"].Type, Buecher.Columns["ID"].DefinedSize); Buecher.Indexes.Append(index, null); //Tabelle für die Autoren ADOX.Table Autoren = new ADOX.Table(); Autoren.Name = "Authors"; //ID für einen Autor column = new ADOX.Column(); column.ParentCatalog = catalog; column.Name = "ID"; column.Type = ADOX.DataTypeEnum.adInteger; column.Properties["Nullable"].Value = false; column.Properties["AutoIncrement"].Value = true; Autoren.Columns.Append(column, ADOX.DataTypeEnum.adIUnknown, 0); Autoren.ParentCatalog = catalog; //Setzen des Primärindex auf ID index = new ADOX.Index(); index.Name = "PrimaryKey"; index.PrimaryKey = true; index.Columns.Append("ID", Buecher.Columns["ID"].Type, Buecher.Columns["ID"].DefinedSize); Autoren.Indexes.Append(index, null); //Verknüpfen der Tabellen - AuthorID soll auf einen Autor in der anderen Tabelle zeigen ADOX.Key key = new ADOX.Key(); key.Name = "BuchAutor"; key.Type = ADOX.KeyTypeEnum.adKeyForeign; key.RelatedTable = "Authors"; key.Columns.Append("AuthorID", Buecher.Columns["AuthorID"].Type, Buecher.Columns["AuthorID"].DefinedSize); key.Columns["AuthorID"].RelatedColumn = "ID"; key.DeleteRule = ADOX.RuleEnum.adRICascade; Buecher.Keys.Append(key, ADOX.KeyTypeEnum.adKeyForeign, null/*Type.Missing*/, null, null); //Hinzufügen der beiden Tabellen zur Datenbank catalog.Tables.Append(Autoren); catalog.Tables.Append(Buecher); }
Unbehandelte Ausnahme: System.Runtime.InteropServices.COMException (0x800A0BB9):
Ausnahme von HRESULT: 0x800A0BB9
bei ADOX.Keys.Append(Object Item, KeyTypeEnum Type, Object Column, String Rel
atedTable, String RelatedColumn)
bei DatenbankTest_CS.Program.Tabellen_anlegen(String Name) in D:\Meine Visual
Projekte\DatenbankTest_CS\DatenbankTest_CS\Program .cs:Zeile 117.
bei DatenbankTest_CS.Program.Main(String[] args) in D:\Meine Visual Projekte\
DatenbankTest_CS\DatenbankTest_CS\Program.cs:Zeile 126.
Ausnahme von HRESULT: 0x800A0BB9
bei ADOX.Keys.Append(Object Item, KeyTypeEnum Type, Object Column, String Rel
atedTable, String RelatedColumn)
bei DatenbankTest_CS.Program.Tabellen_anlegen(String Name) in D:\Meine Visual
Projekte\DatenbankTest_CS\DatenbankTest_CS\Program .cs:Zeile 117.
bei DatenbankTest_CS.Program.Main(String[] args) in D:\Meine Visual Projekte\
DatenbankTest_CS\DatenbankTest_CS\Program.cs:Zeile 126.
An sich finde ich habe ich mich sehr gut an die Vorlage in einem Buch gehalten; kann mir diesen Fehler nicht erklaeren.
Wisst ihr vielleicht wo der Fehler liegt, Hilfe waere echt nett!
Vielen Dank schonmal im Vorraus,
Andreas
Comment