Autor Beitrag
kecks
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 18.10.09 10:19 
Hallo Leute,

ich habe im Moment ein ganz seltsames Problem. Ich bestelle gerade ein Frontend zum Zugriff auf eine Access-Datenbank. Das klappt soweit eigentlich ganz gut, allerdings habe ich beim Zugriff auf eine Tabelle das Problem, dass dort eine Fehlermeldung kommt.

Hier mal ein Auszug meiner DB:

Zitat:

iSP(iSPID, Name)

Module(ModulID, iSPID, Name)

Lehrveranstaltungen(VeranstaltungsID, Name, ...., ModulID, ...)

.
.
.


iSP - Module 1-n
Module - Lehrveranstaltungen 1-n


Und hier ein Auszug meines Programmcodes samt Fehlermeldung in der betreffenden Zeile:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
.
.

String strSQL = "SELECT Name FROM Module";

OleDbConnection con = new OleDbConnection(
....);
con.Open();

OleDbCommand cmd = new OleDbCommand(strSQL, con);
OleDbDataReader dr = cmd.ExecuteReader(); // Fehler E_FAIL(0x80004005) in IErrorInfo.GetDescription

.
.
.

dr.Close();
con.Close();

.
.
.


Das Seltsame an der Geschichte, sobald ich in der SQL-Anweise in Zeile 4 auf eine andere Tabelle zugreife, sei es iSP oder Lehrveranstaltungen, läuft alles problemlos. Nur beim Zugriff auf die Tabelle Module kommt in Zeile 11 die Fehlermeldung, obwohl sich die Tabellen im Grunde kaum unterscheiden. Die Ausführung der SQL-Anweisung im Access funktioniert übrigens bei allen Tabellen problemlos.

Kann mir jemand erklären, wo der Fehler liegt? Was beim Zugriff auf die Tabelle Module so anders ist, als bei allen anderen Tabellen, dass nur hier eine Fehlermeldung kommt?
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 18.10.09 10:32 
Hallo und :welcome:

Module gehört zu den reservierten Wörtern von Access, siehe MSDN. Diese müssen in SQL-Befehlen in [] gesetzt werden:
ausblenden SQL-Anweisung
1:
String strSQL = "SELECT Name FROM [Module]";					

Übrigens solltest du eine Connection vorzugsweise in einen using-Block kapseln, das macht die Arbeit damit sicherer (und Close/Dispose können entfallen):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
using (OleDbConnection con = new OleDbConnection(....) {
   con.Open();

   OleDbCommand cmd = new OleDbCommand(strSQL, con);
   OleDbDataReader dr = cmd.ExecuteReader(); 
   while(dr.Read()) {  ...
   }
}

Und Einrückungen machen Quelltexte besser lesbar.

Gruß Jürgen
kecks Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 18.10.09 10:49 
Vielen Dank erstmal. Auf diese Idee wäre ich gar nicht gekommen. Werde schauen, ob das mein Problem löst.

Wegen den Einrückungen und using etc. Die war nur ein Auszug. Wollte nicht die kompletten 1000 Zeilen Code, die es momentan sind, posten. Aber du hast recht.
kecks Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 18.10.09 12:25 
Ja, genau das war das Problem. Jetzt läuft alles. Danke nochmal.