C. Elsen: Fehler in der SQL-Abfrage?

Hallo Leute.

Ich versuche gerade einen Kalender in ASP zu realisieren. Er basiert auf dem ASP Event Calendar von http://www.asp-dev.com/calendar/
Leider funktioniert der bei mir nicht. Also habe ich angefangen den umzuschreiben, aber wenn ich folgende SQL-Abfrage ausführe

Sql ="INSERT INTO db (datum, text) values (#" & DateValue(request("datum")) & "#, '" & request("txt") & "')"

bekomme ich die Fehlermeldung

Microsoft OLE DB Provider for ODBC Drivers-Fehler '80004005'
[Microsoft][ODBC Microsoft Access Driver] Operation muss eine aktualisierbare Abfrage verwenden.

Was bedeutet das? Ich hoffe ihr könnt mir weiterhelfen.

MfG
C.Elsen

  1. Hi,

    Sql ="INSERT INTO db (datum, text) values (#" & DateValue(request("datum")) & "#, '" & request("txt") & "')"

    ich bin kein SQL-Experte, aber ich würde '#" & ... & "#' in Anführungszeichen setzen.

    Cheatah

  2. Hallo,

    da war mal was gepostet zum Thema "datum" als Feldname bei Access, daß man das vermeiden soll, weil es ein reservierter Begriff ist..
    Ich hatte damals auch Probleme damit, die sich nach Umbenennung gegeben haben.
    Versuch doch das mal!

    Gruß, Regina

    1. Hallo.

      Ich hab' die Tipps ausprobiert, aber es klappt leider immer noch nicht. :-(
      Weder INSERT noch UPDATE.
      Ich bekomme immer die Fehlermeldung
      [Microsoft][ODBC Microsoft Access Driver] Operation muss eine aktualisierbare Abfrage verwenden.

      Wo ist der Fehler? Unten habe ich mal (leicht geändert) das Script gepostet. Die erste Abfrage wird noch gemacht und dann kommt der Fehler.

      MfG
      C. Elsen

      ---------------------------------------------------------------------

      <%
      set my_conn= Server.CreateObject("ADODB.Connection")
      my_conn.Open "DRIVER={Microsoft Access-Treiber (*.mdb)}; DBQ=C:\intranet\Diary\diary.mdb"

      tmpDatum = DateValue(Request("view_Date"))
      tmpDatum = year(tmpDatum) & "-" & month(tmpDatum) & "-" & day(tmpDatum)

      StrSql= "SELECT * FROM diary WHERE (diary.dte=#" & tmpDatum & "#)"
      set rs = my_conn.Execute (StrSql)

      if rs.EOF then
      StrSql ="INSERT INTO diary (dte, text_field) values (#" & tmpDatum & "#, '" & request("txt") & "')"
      else
      StrSql = "UPDATE diary SET diary.dte = #" & tmpDatum & "#, text_field = '" & request("txt") & "' WHERE id = " & rs("id")
      End If

      my_conn.Execute (strSql)
      my_Conn.Close
      set my_conn = nothing
      %>

      1. hi,

        StrSql= "SELECT * FROM diary WHERE (diary.dte=#" & tmpDatum & "#)"
        set rs = my_conn.Execute (StrSql)

        if rs.EOF then

        »»  StrSql ="INSERT INTO diary (dte, text_field) values (#" & tmpDatum & "#, '" & request("txt") & "')"

        else

        »»  StrSql = "UPDATE diary SET diary.dte = #" & tmpDatum & "#, text_field = '" & request("txt") & "' WHERE id = " & rs("id")

        End If

        könntest Du an dieser Stelle mal den Inhalt von "StrSql" ausgeben?
        Den ganzen A$P-Kram zuvor verstehe ich nicht, aber bei einer reinen SQL-Abfrage könnte man immerhin beurteilen, ob diese syntaktisch korrekt zusammengebaut ist ...

        mfG - Michael

        1. könntest Du an dieser Stelle mal den Inhalt von "StrSql" ausgeben?
          Den ganzen A$P-Kram zuvor verstehe ich nicht, aber bei einer reinen SQL-Abfrage könnte man immerhin beurteilen, ob diese syntaktisch korrekt zusammengebaut ist ...

          mfG - Michael

          Hallo.

          Die SQL-Abfragen lauten:

          Sql= "SELECT * FROM diary WHERE (diary.dte=#2000-6-6#)

          Das ist die die noch funktioniert und dann kommen die beiden bei denen der fehler auftritt:

          Sql = INSERT INTO diary (dte, text_field) values (#2000-6-6#, 'irgendein Text')"

          und

          Sql = UPDATE diary SET diary.dte = #2000-6-6#, text_field = 'irgendein Text' WHERE id = 1

          Ich hoffe du kannst damit was anfangen.

          MfG
          C. Elsen

  3. Hallo C.Elsen

    Microsoft OLE DB Provider for ODBC Drivers-Fehler '80004005'
    [Microsoft][ODBC Microsoft Access Driver] Operation muss eine aktualisierbare Abfrage verwenden.

    Wahrscheinlich hat die Access-DB auf dem Server zuwenig Rechte.
    Die Access-DB braucht mindestens Schreibrechte, setze also mal den User "Jeder" auf "Vollzugriff" (unter WinNT mit NTFS) und prüfe ob es funktioniert.
    Weiter könnte auch noch das Dateiattribut "Schreibgeschützt" gesetzt sein (Eigenschaften->Allgemein). Dieses müsste entfernt werden.

    Grüsse
    Tom