Abfragename nach EXECUTE erwartet. – Fehler

Vorgeschichte: Ich wollte in C# eine Paradox-Tabelle mit einem SQL-Update-Statement aktualisieren. Meine Versuche dies direkt mittels

OleDbCommand aCmd = new OleDbCommand(“update t_time set bis = ‘” + DateTime.Now.ToString() + “‘ where personalNr = 481 and datum = “”12.06.2007″””, aCon);
aCmd.ExecuteNonQuery();

zu bewerkstelligen scheiterten an der Fehlermeldung “Datentypen in Kriterienausdruck unverträglich.”. Also machte ich mich im Web etwas schlau und fand einen Hinweis, dass man dies am Besten mittels Parameter umgeht. Das untenstehende Beispiel habe ich an meine Bedürfnisse angepasst und bekam dann die Fehlermeldung (die im Visual Studio angezeigt wird) wenn man versucht folgende SQL-Update-Anweisung an eine Paradox Datenbank zu senden.

Mein C# Code sah so aus:

 

String sConStr = @”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DB\Paradox\Daten;Extended Properties=Paradox 7.x;”;
OleDbConnection aCon = new OleDbConnection(sConStr) ;
aCon.Open();
OleDbCommand aCmd = new OleDbCommand(“update t_time set bis = ‘” + DateTime.Now.ToString() + “‘ where personalNr = 31114 and ”
+ ” datum = @startDatum”, aCon);
aCmd.CommandType = CommandType.StoredProcedure;
OleDbParameter datParameter;
datParameter = new OleDbParameter(“@startDatum”, OleDbType.DBDate);
datParameter.Value = startdatum;
aCmd.Parameters.Add(datParameter);
aCmd.ExecuteNonQuery();
aCon.Close();

Beim Versuch dieses Statement auf der DB auszuführen bekam ich den Fehler “Abfragename nach EXECUTE erwartet.”

Nach etwas überlegen (fiel mir etwas schwer, weil ich schon zu viele Stunden am Rechner hing) fand ich den kleinen Fehler:

Statt

aCmd.CommandType = CommandType.StoredProcedure;

muss es natürlich

aCmd.CommandType = CommandType.Text;

heissen. Dann klappt die Datumsübergabe perfekt!

Kein VBA-Zugriff auf Paradox nach DB-Änderung

Ich habe eine alte Paradox Datenbank im Einsatz, die über ein Jahrzehnt “gereift” ist. Ich muss dazu sagen, dass ich die Betreuung und Administration dieser Datenbank erst nach ca. 8 Jahren übernommen habe. Leider existierte bis dahin keinerlei Dokumentation!

Aber nach einiger Zeit habe ich mich “hineingelebt” und habe sie eigentlich soweit im Griff.

Nun aber zu meinem neuestem Problem und dessen Lösung:

Auf die Datenbank wurde unter anderem auch aus Outlook 2003 mittels VBA / ODBC zugegriffen. Bisher lief das einwandfrei. Seit Kurzem aber kommt nur noch eine nichtssagende Fehlermeldung wenn auf eine bestimmte Tabelle mittels Select-Statement zugegriffen wird. TODO: genauen Fehlertext angeben

Also fragte ich mich, was ist nun anders? Erstmal dachte ich an Microsoft, die hatten gerade wieder ein paar Updates installiert und da gab es schon an anderer Stelle seltsame Effekte. Also suchte ich mir einen Rechner im Netzwerk, der diese Updates noch nicht installiert hatte und probierte den Zugriff von diesem.

Dort erschien die gleiche Fehlermeldung. Also fragte ich mich: “Was wurde zuletzt an der Datenbank geändert?”. Und ich erinnerte mich, dass ein neues Attribut in diese Tabelle eingefügt wurde. Also habe ich erstmal auf einem Testsystem die Tabelle aufgespielt und das entsprechende Attribut gelöscht: perfekt! Nun funktionierte der Zugriff wieder, aber ich konnte das neue Feature nicht mehr nutzen. Also habe ich testweise dieses Attribut wieder eingefügt und dafür ein anderes gelöscht und siehe da auch dann funktionierte der Zugriff aus Outlook heraus! Es liegt also an der Anzahl der Attribute!

Zugegeben, die Tabelle ist ein Monster. Sie hat nun 85! Attribute. Wie oben schon erwähnt, möchte ich zu meiner Verteidigung sagen, dass ich diese nicht geplant habe. Aber ich konnte einige nicht genutzte Attribute identifizieren und habe diese nun gelöscht, so dass es nun keine Probleme der beschrieben Art gibt, auch wenn ich nun noch ein paar neue Attribute einfüge.