Martin Weinhardt: Access und ASP

Hallo Leute.
Ich habe ein Problem mit meiner Access Datenbank.
Diese ist als ODBC definiert und ich kann Daten auslesen.
Wenn ich jetzt aber einen neuen Datensatz definieren möchte bekomme ich die Meldung:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[Microsoft][ODBC Microsoft Access Driver] Cannot update. Database or object is read-only.

Auch wenn ich die Verbindung mit "admodereadwrite" bekomme ich diese Meldung.
So. Die datenbank besteht nur aus einer Tabelle. Aber ich kann doch in eine Tabelle Daten eintragen ?
Kann es ein Problem meines Providers sein oder öffne ich die Verbindung falsch.
Danke im voraus.
Hier mein Quelltext
Set conn = Server.CreateObject("ADODB.Connection")
    conn.mode = admodereadwrite
    conn.open "bb67_prodplan2","",""
SQL = "Select * from [Haupt]"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3
if rs.Supports (adUpdate + adAddNew) Then
response.write Request.Form("Ordernumber")
rs.AddNew
rs.Fields("Ordernumber") = Request.Form("Ordernumber")
rs.Update

  1. HAllo Martin,
    das Problem liegt wahrscheinlich daran, dass der IUSR_servername keien Lese-/Schreibberechtigung in dem Verzeichnis der mdb hat.
    Gruss
    Christian

    1. Hi Christian
      Erst mal Danke für die Antwort.
      Mein Provider hat mir aber versichert, daß das betreffende Verzeichnis LeseSchreib Zugriff hat.
      Gibt es vielleicht noch einen anderen Fehler der mir unterlaufen sein könnte.
      Martin

  2. Hallo Leute.
    Ich habe ein Problem mit meiner Access Datenbank.
    Diese ist als ODBC definiert und ich kann Daten auslesen.
    Wenn ich jetzt aber einen neuen Datensatz definieren möchte bekomme ich die Meldung:
    Microsoft OLE DB Provider for ODBC Drivers error '80004005'

    [Microsoft][ODBC Microsoft Access Driver] Cannot update. Database or object is read-only.

    Auch wenn ich die Verbindung mit "admodereadwrite" bekomme ich diese Meldung.
    So. Die datenbank besteht nur aus einer Tabelle. Aber ich kann doch in eine Tabelle Daten eintragen ?
    Kann es ein Problem meines Providers sein oder öffne ich die Verbindung falsch.
    Danke im voraus.
    Hier mein Quelltext
    Set conn = Server.CreateObject("ADODB.Connection")
        conn.mode = admodereadwrite
        conn.open "bb67_prodplan2","",""
    SQL = "Select * from [Haupt]"
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn, 3, 3
    if rs.Supports (adUpdate + adAddNew) Then
    response.write Request.Form("Ordernumber")
    rs.AddNew
    rs.Fields("Ordernumber") = Request.Form("Ordernumber")
    rs.Update

    Hallo,
    versuche es mal mit den Insert/Update-Befehlen:
    z.B. fuer insert:
    Set Connection = Server.CreateObject("ADODB.Connection")
    Connection.Open "DSN=?"
    SQLStmt = "insert into [haupt] (Ordernumber) "
    SQLStmt = SQLStmt & "values (" & Request.Form("Ordernumber") & ")"
    Set RS1 = Connection.Execute(SQLStmt)

    Bei der Update-Funktion sieht das SQL-Stat. so aus:
    SQLStmt = "update [haupt] set datum = '" & Request.Form("Datum") & "' where Ordernumber = " & Request.Form("Ordernumber")

    Bei Strings bitte Anfuehrungszeichen verwenden:
    "'" & string & "'"

    Ausserdem laeuft diese Funktion schneller ab, als ueber VBscript.

    Uwe

    1. Hi Uwe
      Ist das so OK, wenn Request.Form("Ordernumber") ein String ist.
      Set conn = Server.CreateObject("ADODB.Connection")
              conn.open "bb67_prodplan2","",""
      SQLStmt = "insert into [haupt] (Ordernumber) "
      SQLStmt = SQLStmt & "values ("'" & Request.Form("Ordernumber") &"'")"
      Set RS1 = Connection.Execute(SQLStmt)
      Ich bekomme einen Error bei der letzten Zeile
      Und zwar Object required:"
      Vielleicht kannst Du mir weiterhelfen

      1. Hi Uwe
        Ist das so OK, wenn Request.Form("Ordernumber") ein String ist.
        Set conn = Server.CreateObject("ADODB.Connection")
                conn.open "bb67_prodplan2","",""
        SQLStmt = "insert into [haupt] (Ordernumber) "
        SQLStmt = SQLStmt & "values ("'" & Request.Form("Ordernumber") &"'")"
        Set RS1 = Connection.Execute(SQLStmt)
        Ich bekomme einen Error bei der letzten Zeile
        Und zwar Object required:"
        Vielleicht kannst Du mir weiterhelfen

        So geht es nicht ganz!
        Das SQL-Stat. muss in " stehen und die Strings in ', also so:

        SQLStmt = "insert into [haupt] (Ordernumber) "
        SQLStmt = SQLStmt & "values ('" & Request.Form("Ordernumber") & "')"

        Also bei MSQuery sieht es so aus:
        insert into [haupt] (Ordernumber) values ('12345')

        Dann sollte es gehen!

        1. Jou. Ich habs geändert. Es geht aber immer noch nicht.
          Der Fehler:
          Microsoft VBScript runtime error '800a01a8'

          Object required: ''

          /newrecord1.asp, line 15
          Die Line 15 ist : Set RS1 = Connection.Execute(SQLStmt)

          Oder muß ich vielleicht explizit angeben, daß es kein VB Script ist.

          1. Jou. Ich habs geändert. Es geht aber immer noch nicht.
            Der Fehler:
            Microsoft VBScript runtime error '800a01a8'

            Object required: ''

            /newrecord1.asp, line 15
            Die Line 15 ist : Set RS1 = Connection.Execute(SQLStmt)

            Oder muß ich vielleicht explizit angeben, daß es kein VB Script ist.

            Sorry,
            wenn die Connection ueber conn geoeffnet wird muss man execute auch mit conn ausfuehren:

            Set conn = Server.CreateObject("ADODB.Connection")
            conn.open "bb67_prodplan2","",""
            SQLStmt = "insert into [haupt] (Ordernumber) "
            SQLStmt = SQLStmt & "values ('" & Request.Form("Ordernumber") & "')"
            Set rs = conn.Execute(SQLStmt)

            1. So. Jetzt bekomme ich diese Meldung:
              [Microsoft][ODBC Microsoft Access Driver] Operation must use an updateable query.
              Ich verzweifle jetzt fast.
              Weißt Du noch weiter. Wäre super.

              1. So. Jetzt bekomme ich diese Meldung:
                [Microsoft][ODBC Microsoft Access Driver] Operation must use an updateable query.
                Ich verzweifle jetzt fast.
                Weißt Du noch weiter. Wäre super.

                Da stimmt etwas mit den Schreibrechten im ODBC-Eintrag (readonly etc.)oder mit den Rechten (user: Admin) in dem Verzeichnis nicht!!

                Kleiner Trick, mit Frontpage 2000 werden die Rechte automatisch vergeben (gehoert zu Office2000 Premium, falls vorhanden).

                ODER die Query muss vollstaendig eingegeben werden, bzw. fuer die anderen Datenfelder muss ein default Eintrag vorgenommen werden!

                Eventuell mal mit einer kleinen Tablle ueben und mit MSQuery die SQL-Statements ausprobieren!

                ODER mit dem OPEN-Befehl das SQL-Stat. uebergeben:
                conn.Open SQLStmt, "DSN="bb67_prodplan2"

                Sonst weiss ich auch nicht mehr weiter.

                Uwe

  3. Set conn = Server.CreateObject("ADODB.Connection")
        conn.mode = admodereadwrite
        conn.open "bb67_prodplan2","",""

    Hallo Martin!

    Probier mal eine DSN-lose Verbindung:

    SET conn=Server.CreateObject("ADODB.Connection")
    DSNtemp="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("PFAD/datenbank.mdb")
    conn.Open DSNtemp

    Jetzt ist eine Verbindung zur Datenbank aufgebaut und Du kannst wie gehabt auf Deine Tabellen zugreifen.

    Liebe Grüsse
    Klausi