Laden...

[erledigt] Probleme mit Access-Update bei bestimmtem Tabellennamen

Erstellt von Flow1 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.071 Views
F
Flow1 Themenstarter:in
3 Beiträge seit 2010
vor 14 Jahren
[erledigt] Probleme mit Access-Update bei bestimmtem Tabellennamen

verwendetes Datenbanksystem: Access 2003-DB mit Jet-OLEDB 4.0

Hallo allerseits,

ich entwickle derzeit an einer Applikation, die auf eine Access 2003-DB zurückgreift. Die Tabelle aus der gelesen und in die auch zurückgeschrieben werden muss hat eine Tabelle mit dem Namen "USER". Dies scheint bei der Abfrage Schwierigkeiten zu machen. Wenn die Tabelle zu "USER1" umbenannt wird, tritt kein Fehler auf. Nun habe ich den Tabellennamen in eckige Klammern gesetzt "[USER]". So tritt der Fehler bei der Select-Abfrage nicht auf, aber beim späteren Update gibt es nach wie vor einen Fehler: "Syntaxfehler in UPDATE-Anweisung". Mehr Informationen erhalte ich leider auch im Debugging nicht. Primary Key ist vorhanden. Mit einem anderen Tabellennamen geht alles bestens. Dieser darf aber nicht geändert werden (Kundenanforderung - andere Programme greifen auf diese Tabelle zu.

Hier der Code (vereinfacht):


            DataSet myDS      = new DataSet();
            String strTabelle = "[USER]";

            // ...

            using (OleDbConnection conn = new OleDbConnection(m_strConnectionString))
            {
                // korrekten Datensatz ermitteln
                String strSQLAbfrage = "SELECT * FROM " + strTabelle + " WHERE Name = \"" + strAmtsKennung + "\"";
                
                OleDbDataAdapter adapter    = new OleDbDataAdapter();
                adapter.SelectCommand       = new OleDbCommand(strSQLAbfrage, conn);
                OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
                

                // Daten ändern und zurückschreiben
                try
                {

                    myDS.Tables[strTabelle].Rows[0]["LetzteAktualisierung"] = DateTime.Now;
                }
                // DB-Feld und zugewiesener Wert haben unterschiedliche Typen
                catch (System.ArgumentException e)
                {
                    Protokoll(e.Message, ProtokollPrioritaet.PrioFehler);
                    return false;
                }

                try
                {
                    adapter.Update(myDS, strTabelle); // Hier tritt der Fehler auf
                }
                // Probleme mit dem Update (Kein PrimaryKey, etc.)
                catch (System.InvalidOperationException e)
                {
                    Protokoll(e.Message + " (Fehlender PrimaryKey?)", ProtokollPrioritaet.PrioFehler);
                    return false;
                }
            }


Ich hoffe Ihr könnt mir helfen.

Viele Grüße
Flow1

T
210 Beiträge seit 2006
vor 14 Jahren

Kann es sein, das evtl. auch einige Spaltennamen reservierte Wörter sind? Auch die Spaltennamen solltest Du mit [] klammern...

Gruß
T-Man

F
Flow1 Themenstarter:in
3 Beiträge seit 2010
vor 14 Jahren

Hallo T-Man,

vielen Dank für Deine schnelle Antwort.

Nein, sonstige Feldnamen sind unproblematisch. Die heissen alle wie "LetzteAktualisierung", "Strasse", etc. Zumal das ganze ja problemlos funktioniert, wenn die Tabelle anders heißt.

Hast Du noch eine andere Idee?

Gruß
Flow1

J
3.331 Beiträge seit 2006
vor 14 Jahren

Wie sieht denn der UpdateCommand nach dem CommandBuilder aus? Vielleicht geht der nicht wie erwartet mit dem Tabellennamen um. Jürgen

F
Flow1 Themenstarter:in
3 Beiträge seit 2010
vor 14 Jahren

Hi Juetho. Ich habe Deinen Tip aufgegriffen und den UpdateCommand integriert. Vorher hatte ich keinen, aber es ging. Komisch.
Ich habe es damit jetzt gelöst, indem ich den UPDATE-String manuell in den UpdateCommand ausgeführt habe. Mit dem anderen Tabellennamen musste ich das aber nicht.
Auf jeden Fall Danke.


adapter.UpdateCommand = new OleDbCommand(strSQLUpdate, conn);
adapter.Update(myDS, strTabelle); // Hier tritt der Fehler auf

F
10.010 Beiträge seit 2004
vor 14 Jahren

Viel einfacher ginge es, sich einfach mal die Properties des CommandBuilders anzuschauen.

Da gibt es nämlich für diesen Fall schon Pre und Postfixes.