06. marts 2002 - 16:22Der 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 %>
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
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...
Synes godt om
Slettet bruger
06. marts 2002 - 16:29#2
invis > Tænkte nok det var der lorten lå begravet :o)
Synes godt om
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?
Synes godt om
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....
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
Synes godt om
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?!
Synes godt om
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.
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.
Synes godt om
Slettet bruger
06. marts 2002 - 18:09#9
koden er fuldstændig den du skriver der... Det virker bare ikke?!
Synes godt om
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.
Synes godt om
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.
Synes godt om
Ny brugerNybegynder
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.