Avatar billede bredum Nybegynder
21. juni 2001 - 12:22 Der er 17 kommentarer og
1 løsning

ODBC Microsoft Access-driver

Hvad er der galt, hvorfor er der ikke skrive adgang til databasen?? hvad skal der gøres?
Jeg bruger Microsoft Internet Explorer 5 og PWS 5.0(win2000)

Får føljende fejl:

Tekniske oplysninger (for supportteknikere)

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access-driver] Handlingen skal bruge en opdaterbar forespørgsel.
/viskurv.asp, line 14


kode for viskurv:

<%
    Response.Expires = 0
    Titel = \"Indkøbskurv\"
   
    Set Conn = Server.CreateObject(\"ADODB.Connection\")
    Conn.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & server.MapPath(\"shop.mdb\")
   
    Mode = LCase(Request.QueryString(\"Mode\"))
    ID = CLng(Request.QueryString(\"ID\"))
    Antal = CLng(Request.QueryString(\"Antal\"))
   
    If CLng(Session(\"CartID\")) = 0 then
        SQLstmt = \"INSERT INTO ShoppingCarts (SessionID, [Date]) VALUES (\" & Session.SessionID & \", \'\" & Now & \"\');\"

        Conn.Execute SQLstmt **** fejlen her (linie 14) *****

        Set RS = Conn.Execute (\"SELECT * FROM ShoppingCarts ORDER BY ID Desc\")
        Session(\"CartID\") = RS(\"ID\")
    End If
    Select Case Mode
        Case \"tilfoej\"
            If Not Conn.Execute(\"SELECT ID FROM Articles WHERE ID = \" & ID).EOF Then
                If Conn.Execute(\"SELECT ID FROM ShoppingCartItems WHERE CartID = \" & Session(\"CartID\") & \" AND ArticleID = \" & ID).EOF Then
                    SQLstmt = \"INSERT INTO ShoppingCartItems (CartID, ArticleID, ArticleAmount) VALUES (\"
                    SQLstmt = SQLstmt & Session(\"CartID\") & \", \"
                    SQLstmt = SQLstmt & ID & \", \"
                    SQLstmt = SQLstmt & \"1);\"
                    Conn.Execute SQLstmt
                Else
                    Conn.Execute \"UPDATE ShoppingCartItems SET ArticleAmount = ArticleAmount + 1 WHERE CartID = \" & Session(\"CartID\") & \" AND ArticleID = \" & ID
                End If
            End If
        Case \"fjernvare\"
            Conn.Execute \"DELETE * FROM ShoppingCartItems WHERE ArticleID = \" & ID
        Case \"nytantal\"
            If Antal < 1 Then
                Conn.Execute \"DELETE * FROM ShoppingCartItems WHERE ArticleID = \" & ID
            Else
                Conn.Execute \"UPDATE ShoppingCartItems SET ArticleAmount = \" & Antal & \" WHERE ArticleID = \" & ID
            End If
            Response.Redirect \"viskurv.asp\"
        Case \"toem\"
            Conn.Execute \"DELETE * FROM ShoppingCartItems\"
            Response.Redirect \"viskurv.asp\"
        Case \"indtastantal\"
            SQLstmt = \"SELECT \"
            SQLstmt = SQLstmt & \"(SELECT Name FROM Articles WHERE ID = ShoppingCartItems.ArticleID) AS ArticleText, \"
            SQLstmt = SQLstmt & \"ArticleAmount \"
            SQLstmt = SQLstmt & \"FROM ShoppingCartItems WHERE CartID = \" & Session(\"CartID\") & \" AND ArticleID = \" & ID & \";\"
            Set RS = Conn.Execute(SQLstmt)
    End Select
   
    SQLstmt = \"SELECT \"
    SQLstmt = SQLstmt & \"(ArticleAmount * (SELECT Price FROM Articles WHERE ID = ShoppingCartItems.ArticleID)) AS ArticlePriceTotal, \"
    SQLstmt = SQLstmt & \"(SELECT Price FROM Articles WHERE ID = ShoppingCartItems.ArticleID) AS ArticlePrice, \"
    SQLstmt = SQLstmt & \"(SELECT Name FROM Articles WHERE ID = ShoppingCartItems.ArticleID) AS ArticleText, \"
    SQLstmt = SQLstmt & \"ArticleID, ArticleAmount \"
    SQLstmt = SQLstmt & \"FROM ShoppingCartItems WHERE CartID = \" & Session(\"CartID\") & \"; \"
    Set RSList = Conn.Execute(SQLstmt)

Select Case Mode
    Case \"indtastantal\"
        If Not RS.EOF Then
            %>
            <form action=\"viskurv.asp\" method=\"nytantal\">
            <table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"5\">
            <tr bgcolor=\"#FFF7DF\">
            <td colspan=\"3\"><b><%= RS(\"ArticleText\") %></b><b></b></td>
            </tr>
            <tr>
            <td bgcolor=\"#FFF7DF\" width=\"1%\" nowrap>Nyt antal</td>
            <td bgcolor=\"#FFF9EA\" width=\"99%\">
            <input type=\"text\" name=\"antal\" class=\"FlatInput\" maxlength=\"3\" value=\"<%= RS(\"ArticleAmount\") %>\" style=\"width=40; text-align=right;\">
            </td>
            <td bgcolor=\"#FFF9EA\" width=\"1%\">
            <input type=\"submit\" name=\"Submit\" value=\"OK\" class=\"FlatButton\">
            </td>
            </tr>
            </table>
            <input type=\"hidden\" name=\"id\" value=\"<%= ID %>\">
            <input type=\"hidden\" name=\"mode\" value=\"nytantal\">
            </form>
            <%
        End If
    Case Else
        If Not RSList.EOF Then
            %>
            <table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"5\">
            <tr>
            <td bgcolor=\"#FFF7DF\" width=\"1%\"><center><b>Varenr.</b></td>
            <td bgcolor=\"#FFF7DF\" width=\"99%\"><b>Tekst</b></td>
            <td bgcolor=\"#FFF7DF\" width=\"1%\"><center><b>Antal</b></td>
            <td bgcolor=\"#FFF7DF\" width=\"1%\"><center><b>&aacute;</b></td>
            <td bgcolor=\"#FFF7DF\" width=\"1%\"><center><b>Total</b></td>
            <td bgcolor=\"#FFF7DF\" width=\"1%\"></td>
            </tr>
            <%
            Do While Not RSList.EOF
                %>
                <tr>
                <td bgcolor=\"#FFF9EA\"><center><%= RSList(\"ArticleID\") %></td>
                <td bgcolor=\"#FFF9EA\"><a href=\"visvare.asp?id=<%= RSList(\"ArticleID\") %>\"><%= RSList(\"ArticleText\") %></a></td>
                <td bgcolor=\"#FFF9EA\"><center><a href=\"viskurv.asp?mode=indtastantal&id=<%= RSList(\"ArticleID\") %>\"><%= RSList(\"ArticleAmount\") %></a></td>
                <td bgcolor=\"#FFF9EA\"><center><%= RSList(\"ArticlePrice\") %>,-</td>
                <td bgcolor=\"#FFF9EA\"><center><%= RSList(\"ArticlePriceTotal\") %>,-</td>
                <td bgcolor=\"#FFF9EA\"><font size=\"1\"><a href=\"viskurv.asp?mode=fjernvare&id=<%= RSList(\"ArticleID\") %>\">Slet</a></font></td>
                </tr>
                <%
                PriceTotal = PriceTotal + RSList(\"ArticlePriceTotal\")
                RSList.MoveNext
            Loop
            %>
            <tr>
            <td colspan=\"4\" bgcolor=\"#FFF7DF\"><b>Ialt</b></td>
            <td bgcolor=\"#FFF9EA\"><center><%= PriceTotal %>,-</td>
            <td bgcolor=\"#FFF7DF\">&nbsp;</td>
            </tr>
            </table>
            <%
        Else
            %>
            <center>Indkøbskurven er tom.</center>
            <%
        End If
End Select
%>
<p align=\"center\">[<a href=\"viskategori.asp?id=<%= CLng(Session(\"LastCategory\"))%>\">Luk indkøbskurv</a>] [<a href=\"viskurv.asp?mode=toem\">Tøm indkøbskurv</a>] [<a href=\"viskurv.asp\">Genindlæs indkøbskurv</a>]</p>

Avatar billede mmp Nybegynder
21. juni 2001 - 12:29 #1
Fejlen ligger her:
SQLstmt = \"INSERT INTO ShoppingCarts (SessionID, [Date]) VALUES (\" & Session.SessionID & \", \'\" & Now & \"\');\"

Du vil eksekvere denne handling, men mangler at update...
Avatar billede jkjaers Nybegynder
21. juni 2001 - 12:30 #2
Kunne det tænkes at du har en autonummerering i din accessDB?
Avatar billede harlequin Nybegynder
21. juni 2001 - 12:39 #3
er du sikker på at der er skriverettigheder på den mappe som DB`en ligger i ?
hvis ikke så kontakt din udbyder og opret det

/harlequin
Avatar billede bredum Nybegynder
21. juni 2001 - 12:41 #4
ja det har jeg(autonummerering), men hvordan skal man så gøre for at indsætte i databasen?
Avatar billede jkjaers Nybegynder
21. juni 2001 - 12:48 #5
Du kan godt bruge autonummerering, men du kan ikke opdatere et autonummereringsfelt med et nyt nummer. Du bliver nødt til at opdatere posten efter den er fundet.
Avatar billede bredum Nybegynder
21. juni 2001 - 12:48 #6
jeg har skriverettigheder, da jeg køre det på PWS på min egen maskine.
Avatar billede bredum Nybegynder
21. juni 2001 - 12:54 #7
hvordan gøres det smartes? opdatere efter insert, eller før?
Avatar billede jkjaers Nybegynder
21. juni 2001 - 12:56 #8
Først oprettes posten, og derved gives den i access et autonummer. Du skal ikke indsætte sessionId-værdien hvis denne er et autonummer.
Avatar billede bredum Nybegynder
21. juni 2001 - 13:03 #9
hvordan gøres det?? ShoppingCarts benytter 3 tabeller, henholdsvis \"ID\", \"Session\" og \"date\" hvad mangler jeg i overstående kode eksempel??
Avatar billede jkjaers Nybegynder
21. juni 2001 - 13:17 #10
Kunne det tænkes at din BD er skrivebeskyttet, jeg begynder at fatte at det vidst ikke er autonumm. der er fejlen.
Avatar billede jkjaers Nybegynder
21. juni 2001 - 13:18 #11
undskyld BD=DB
Avatar billede bredum Nybegynder
21. juni 2001 - 13:26 #12
det er den ikke hvad jeg kan se af, men hvordan skal indstiligerne under sikkerhed i access stå for at kunne skrive til DB??
Avatar billede jkjaers Nybegynder
21. juni 2001 - 13:35 #13
Read-only skal skal være slået fra
Avatar billede respen Nybegynder
21. juni 2001 - 13:40 #14
Det kan godt være at du kører databasen lokalt på din maskine, men du skal alligevel share dit databasebibliotek til brugeren \"IUSR_<maskinnavn>\", da du har anonym access (med mindre du instiller pws el. IIS til NT challenge). Sharet skal være med skriverettigheder.

Prøv det og se om det ikke virker.

rené
Avatar billede kjoller Nybegynder
22. juni 2001 - 00:29 #15
Hvorfor er der [] omkring date? har du evt prøvet at fjerne den ene af felterne, for at se om det virker med et? i så fald hvilket virker det med?
hvilke formater er database feleterne?

Avatar billede jkjaers Nybegynder
22. juni 2001 - 08:38 #16
Klammerne burde ikke give dig problemer. Fejlmeddelelsen tyder som sagt på at DB\'en er skrivebeskyttet.
Avatar billede kichian Nybegynder
22. juni 2001 - 11:59 #17
PWS 5.0 er forresten noget sludder. Der er tale om IIS 5.0 i denne sammenhæng.

Hvis der benyttes NTFS rettigheder på det drev hvor databasen ligger, så skal NTFS rettigheder på både Mappe og database være Change for IUSR_*. (Det kan minimeres, men dette er lettest)
Dette har i øvrigt intet med en share at gøre.

Derudover har jeg et problem med din datoindsættelse:
,\'\" & Now & \"\')\" : FEJL medmindre at Date-feltet er tekst.

Dette skal være
,Now)\" : Bedst, da Access forstår Now
Eller
,#\" & Now & \"#)\" : Dårligere da datoen bliver til en streng som er formateret. Kan give fejl.

I øvrigt er ; unødvendigt når du sender SQL gennem ODBC.
Avatar billede respen Nybegynder
22. juni 2001 - 12:25 #18
Kichian har ret. Det behøver ikke share men blot tildeling af rettigheder. Brug af Sharing giver dog også rettigheder.

respen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester