Probleme mit Create View

27/04/2009 - 12:24 von Christoph Michalski | Report spam
Hallo,
mit folgendem Statement werden Daten aus einer Datenbanktabelle in eine
Datensicht eingefügt:

"CREATE VIEW TestView as SELELCT FORM .. WHERE... "
command = New OleDbCommand(TestSQLString, TestConnString)
reader = command.ExecuteReader

Anschließend wird die Datensicht in eine DataTable geschrieben:

"SELECT * FROM TestView"
command = New OleDbCommand(TestSQLString, TestConnString)
reader = command.ExecuteReader
Tab = New DataTable("TestTabelle”)
Tab.Load(reader)

Spàter werden noch weitere SQL-Abfragen durchgeführt, wo die Datensicht
„TestView“ mit einbezogen wird:

"SELECT TestTab.Feld2 " & _
"FROM TestTabelle As TestTab, TestView As TestView " & _
"WHERE TestTab.Feld1 = TestView.Feld1 "

Zum Schluß wird die Dataview gelöscht

" DROP TABLE TestView "
command = New OleDbCommand(SQLStr, Conn)
command.ExecuteNonQuery()

Diese SQL-Abfrage wird immer wieder von vierschiedenen Stellen des Programms
aufgerufen. In meisten Fàllen funktioniert alles gut, sporadisch kriege ich
ich jedoch folgende Fehlermeldung:

1. obwohl CREATE VIEW fehelrfrei verlaufen ist:
a. Tabelle 'TestView' ist nicht vorhanden
b. Das Microsoft Jet-Datenbankmodul findet die Eingangstabelle oder
Abfrage 'TestView' nicht. Stellen Sie sicher, dass sie existiert und
der Name richtig eingegeben wurde.
c. Datensatz ist gelöscht.

2. obwohl DROP TABLE TestView fehelrfrei verlaufen ist:
Tabelle 'TestView' ist bereits vorhanden

Kann mir vielleicht jemand sagen, was ich hier falsch mache?
Gruß
Christoph
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
27/04/2009 - 16:22 | Warnen spam
Hallo Christoph,

"Christoph Michalski" schrieb:

1. obwohl CREATE VIEW fehelrfrei verlaufen ist:
a. Tabelle 'TestView' ist nicht vorhanden
b. Das Microsoft Jet-Datenbankmodul findet die Eingangstabelle oder
Abfrage 'TestView' nicht. Stellen Sie sicher, dass sie existiert und
der Name richtig eingegeben wurde.
c. Datensatz ist gelöscht.

2. obwohl DROP TABLE TestView fehelrfrei verlaufen ist:
Tabelle 'TestView' ist bereits vorhanden



beim Arbeiten mit Access DBs über die Jet Engine (was in deinem Fall auch so
sein dürfte) kommt es ab und an mal zu "Verzögerungen", wenn DDL Statements
abgesetzt werden. D.h. dein Statement ist zwar durchlaufen, zugreifen kann
man auf das erstellte Objekt aber erst spàter (manchmal nach einer halben
Sekunde, manchmal dauert es auch viele Sekunden).

In solchen Fàllen habe ich mir bisher damit geholfen, für die DDL Statements
eine getrennte Connection zu erstellen und nach dem Ausführen des Statements
wieder zu schließen. (In deinem Fall wàre das für CREATE VIEW und DROP TABLE
jeweils eine eigene Connection, die Du nach Ausführung des jeweiligen Statements
wieder schließen solltest)

Ich gehe davon aus, dass es sich hier nicht um eine DB handelt, die von mehreren
Benutzern gleichzeitig verwendet wird. Dann wàre dein Vorhaben so eh nicht umzu-
setzen, weil sich die Objektnamen immer ins Gehege kommen würden, wenn mehrere
dieser Zugriffe gleichzeitig stattfinden.

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen