Avatar billede Slettet bruger
06. marts 2002 - 16:22 Der er 9 kommentarer og
2 løsninger

Forskel på Access & MySql

Hej

Jeg er netop gået over til MySql fra Access, og det er jo i sig selv ret fedt, men jeg har et lille problem...
Jeg har en side - profil.asp - som bla giver en bruger mulighed for at ændre sine data.
Jeg har lavet det med sessions og det virker perfekt, bortset fra at når brugeren vil ændre noget - e.g adresse - får jeg flg fejl :

Fejltype:
ADODB.Recordset (0x800A0CB3)
Det aktuelle postsæt understøtter ikke opdatering. Det kan skyldes en begrænsing af provideren eller den markerede låsetype.

Jeg bruger flg kode til at ændre i db'en med :
<%
Navn = Request.form("Navn")
Brugernavn = Request.form("Brugernavn")
Password = Request.form("Password")
Adresse = Request.form("Adresse")
Postnummer = Request.form("Postnummer")
Bynavn = Request.form("Bynavn")
Telefonnummer = Request.form("Telefonnummer")
Email = Request.form("Email")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={MySql};dsn=localhost;Database=jaja;uid=root;pwd="

SQLstmt = "SELECT * FROM tbl_users WHERE Brugernavn = '" & Session("user") & "' AND Password = '" & Session("id") & "'"
Conn.Execute(SQLstmt)

Set rs = conn.Execute(SQLstmt)

    if Request.ServerVariables("REQUEST_METHOD") = "POST" then
    rs.update
    rs("Navn")         = Navn
    rs("Adresse")        = Adresse
    rs("Postnummer")    = Postnummer
    rs("Bynavn")         = Bynavn
    rs("Telefonnummer")    = Telefonnummer
    rs("Brugernavn")     = Brugernavn
    rs("Password")         = Password
    rs("Email")         = Email

    rs.update
    Response.redirect "profil.asp?besked=Dine data er blevet opdateret"
    end if


conn.Close
Set conn = nothing
Set SQLstmt = nothing
%>

Nogen forslag
Avatar billede invisibleman Nybegynder
06. marts 2002 - 16:27 #1
Fordi man ikke bruger den måde til at opdatere på i MySQL.

Der bruger man UPDATE sql statement.

"UPDATE tabel SET talfelt=54, tekstfelt='" & Replace(Request.Form("navn"), "'", "''") & "' WHERE brugernavn=' .. ' AND ..."

Sådan ..


Replace(værdi, "'", "''") er nødvendig for at undgå "hacking" af siden...
Avatar billede Slettet bruger
06. marts 2002 - 16:29 #2
invis > Tænkte nok det var der lorten lå begravet :o)
Avatar billede Slettet bruger
06. marts 2002 - 16:31 #3
Var det ikke nemmere at lave det til en funktion? Altså Replace(værdi, "'", "''")
Hvad mener du egentlig med hacking i denne forbindelse?
Avatar billede Slettet bruger
06. marts 2002 - 16:37 #4
invis > Jeg formoder at det samme er tilfældet for indsætning af data? Altså at der skal bruges INSERT INTO bla. bla. i stedet for rs.AddNew metoden....
Avatar billede coltau Juniormester
06. marts 2002 - 16:54 #5
Det er noget vrøvl at man kun anvender SQL-sætninger i MySQL. Man anvender også RS.AddNew netop fordi den er nemmere at anvende ved INSERT/UPDATE.

Fejlen i din kode er at Recordsættet ikke understøtter opdatering - som fejlmeddelelsen også siger. Det skal se således ud.

SQLstmt = "SELECT * FROM tbl_users WHERE Brugernavn = '" & Session("user") & "' AND Password = '" & Session("id") & "'"

set rs = Server.CreateObject("ADODB.Recordset")
rs.Open(SQLstmt), conn, 1, 3 ' 1 åbner recordset for opdatering

rs("Navn")        = Navn
osv...
rs.Update
   

Også må du godt fjerne den første rs.Update
Avatar billede Slettet bruger
06. marts 2002 - 16:58 #6
coltau > Nu får jeg :
Fejltype:
ADODB.Field (0x80020009)
Enten er BOF eller EOF sand, eller den aktuelle post er blevet slettet. Den anmodede handling kræver en aktuel post.
Mærkeligt?!
Avatar billede Slettet bruger
06. marts 2002 - 17:10 #7
coltau > Nå den er væk igen, men figurerer denne fejl i linien med rs.Update :

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
Forespørgselsbaseret opdatering mislykkedes, fordi den række, der skulle opdateres, ikke kunne findes.
Avatar billede coltau Juniormester
06. marts 2002 - 17:20 #8
Det er fordi sql-sætningen ikke finder en post. Check lige om koden ser således ud:

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={MySql};dsn=localhost;Database=jaja;uid=root;pwd="

SQLstmt = "SELECT * FROM tbl_users WHERE Brugernavn = '" & Session("user") & "' AND Password = '" & Session("id") & "'"

set rs = Server.CreateObject("ADODB.Recordset")
rs.Open(SQLstmt), conn, 1, 3 ' 1 åbner recordset for opdatering

if Request.ServerVariables("REQUEST_METHOD") = "POST" then
    rs("Navn")        = Navn
    rs("Adresse")        = Adresse
    rs("Postnummer")    = Postnummer
    rs("Bynavn")        = Bynavn
    rs("Telefonnummer")    = Telefonnummer
    rs("Brugernavn")    = Brugernavn
    rs("Password")        = Password
    rs("Email")        = Email

    rs.update
    Response.redirect "profil.asp?besked=Dine data er blevet opdateret"
  end if

Du kan jo ændre denne linie til også at omfatte om der er en post der skal opdateres.

if not rs.EOF and Request.ServerVariables("REQUEST_METHOD") = "POST" then

Begge ovennævnte fejl tyder på at der ikke er fundet en post.
Avatar billede Slettet bruger
06. marts 2002 - 18:09 #9
koden er fuldstændig den du skriver der... Det virker bare ikke?!
Avatar billede Slettet bruger
06. marts 2002 - 18:12 #10
Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
Forespørgselsbaseret opdatering mislykkedes, fordi den række, der skulle opdateres, ikke kunne findes.
Avatar billede Slettet bruger
06. marts 2002 - 18:46 #11
coltau > Nu har jeg fået det til at virke, sån' næsten da! Den her profil ting er lavet ved at brugeren kan se sine oplysninger i <input>s og kan ændre dem og klikke på opdater profil...
Det virker en lille smule nu, men langt fra optimalt. Nogle gange vil den gerne ændre f.eks navn, men ikke f.eks telefonnummer, nogle gange omvendt, og andre gange ingen overhovedet... I de tilfælde hvor det går galt får jeg denne fejl :
Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E21)
Der opstod en eller flere fejl ved en OLE DB-handling på flere trin. Kontroller alle OLE DB-statusværdier. Handlingen blev ikke udført.
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