01. marts 2003 - 13:05Der er
35 kommentarer og 1 løsning
fejl ved skrivning til db
hej eksperter ;o)
jeg har et problem skal skrive til en database og gemme fra 3 eller 4 form felter. det er til en news funktion hvor det skal være muligt at tilføje en "more" funktion. denne bliver selv tilføjet hvis feltet det valgfrie form felt bliver udfyldt. hvordan gør jeg dette smartest? jeg har valgt at bruge en lidt kluntet metode så har i gode ideer så bare kom med dem!
har denne kode:
<%
'if the user have submitted the formular if Request.ServerVariables("REQUEST_METHOD") = "POST" then
'checks to make sure all fields have been filled out if (Request.Form("headline") <> "" AND Request.Form("body") <> "" AND Request.Form("narrator") <> "") then Response.buffer = True Select Case Request.Form("moreBody") Case ""
'creates connection to database Set conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db.mdb") Set rs = Server.CreateObject("ADODB.RecordSet") strSQL = "Select * From news" rs.Open strSQL, Conn, 1, 3
If Request.Form("bold") = "on" Then strheadline = Replace("<B>" & request.Form("Headline") & "</B>","'","''") Else strHeadline = Replace(Request.Form("headline"),"'","''") End If
rs.AddNew rs("headline") = strHeadline rs("body") = strbody rs("morebody") = "o" rs("narrator") = Replace(Request.form("narrator"),"'","''") rs("Date") = Request.form("date") rs.update Response.Write "<FONT COLOR=""green"">you have added a topic to the news section </FONT><BR>" rs.Close set rs = nothing Case Else
'creates connection to database Set conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db.mdb") Set rs = Server.CreateObject("ADODB.RecordSet") strSQL = "Select * From news" rs2.Open strSQL, Conn, adOpenKeyset, adCmdText
If Request.Form("bold") = "on" Then strheadline = Replace("<B>" & request.Form("Headline") & "</B>","'","''") Else strHeadline = Replace(Request.Form("headline"),"'","''") End If
rs2.AddNew rs2("headline") = strHeadline rs2("body") = strbody rs2("morebody") = strmorebody rs2("narrator") = Replace(Request.form("narrator"),"'","''") rs2("Date") = Request.form("date") rs2.update Response.Write "<FONT COLOR=""green"">you have added a topic with More function to the news section </FONT><BR>"
rs2.Close set rs2 = nothing End Select else Response.Write"<FONT COLOR='red'>Some fields haven't been filled out</font><BR>"
end if end if %>
for denne fejl:
Fejltype: Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [Microsoft][ODBC Microsoft Access-driver] Databasen eller objektet er skrivebeskyttet og kan ikke opdateres. /vghk/UPDATE/admin/news.asp, line 65
Browsertype: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Side: POST 120 bytes to /vghk/UPDATE/admin/news.asp
POST Data: headline=gghfghdfdfhdgh&bold=on&body=gfgfhfghgfhdfghfg+dfh++dfhg+hgd&morebody=&narrator=dfhfgh+fghdf+&date=h+gfh+fgh+dfg
har fået det til at virke nu men nu er der fejl hvis alle 4 felter er udfyldt!!
denne fejl kommer Fejltype: ADODB.Recordset (0x800A0BB9) Argumenterne har en forkert type eller er uden for det angivne område, eller der er opstået en konflikt mellem dem. /vghk/UPDATE/admin/news.asp, line 77
ved denne kode
'creates connection to database Set conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db.mdb") Set rs2 = Server.CreateObject("ADODB.RecordSet") strSQL2 = "Select * From news" rs2.Open strSQL2, Conn, adOpenKeyset, adCmdText
If Request.Form("bold") = "on" Then strheadline = Replace("<B>" & request.Form("Headline") & "</B>","'","''") Else strHeadline = Replace(Request.Form("headline"),"'","''") End If
rs2.AddNew rs2("headline") = strHeadline rs2("body") = strbody rs2("morebody") = strmorebody rs2("narrator") = Replace(Request.form("narrator"),"'","''") rs2("Date") = Request.form("date") rs2.update Response.Write "<FONT COLOR=""green"">you have added a topic with More function to the news section </FONT><BR>"
rs2.Close set rs2 = nothing End Select else Response.Write"<FONT COLOR='red'>Some fields haven't been filled out</font><BR>"
Eller en streng er længere en det som et angivet som max længde for en kolonne eksvis hvis man indsætter 200 karakter ind i en kolonne som max længde er sat til 50.
det har ikke noegt med nullængde og gøre! der at det volder problemer er netop hvis alle felterne er fyldt ud! de steder hvor der forventes at kunne komme mere end de 200 tegn er datatypen sat som notat så tror heller ikke det er det der er problemet!
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. /vghk/UPDATE/admin/news.asp, line 88
prøvede lige for en sikkerheds skyld at skrive 3 i stedet for adCmdText og nu gav den ikke fejlen men nu siger den følgende: Fejltype: Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl i INSERT INTO-sætningen. /vghk/UPDATE/admin/news.asp, line 94
hmm ... hvorfor ser man det først efter man trykker udfør.. Syntax fejl ... Normalt vil Date som kolonnenavn give syntax fejl da det er et reserveret ord i SQL. Men man skulle da tror det virkeder når man skriver: rs2("Date")
der er to funktioner i mit lille script den ene bliver selected hvis request.form("morebody") = "" og her er der ikke nogen problemer med at bruge date der virker det fint! jeg har oprettet to forskellige recordsets i tilfælde af at den konfliktede ved at samme objektnavn stod 2 gange selvom den kun bliver udført en gang den vælger jo hvilken funktion der skal udføres via en select case... skulle jeg prøve og lave det med en if kommando der siger if Request.Form("morebody") <> "" Then rs2("morebody") = Request.Form("morebody") End If også droppe den select care funktion?
der skal være en replace for det er engelsk der bliver fyldt på.. og for en sikkerheds skyld er det fornuftigt med replace da der kan forekomme ' i engelske navne. forfatteren behøver ikke være et navn men kan også bliver en titel
Ja umiddelbart ville det være "pænest" med en if sætning nå det er det samme kode som udføres, med undtagelese af rs("morebody") Men det ændre nok ikke på den fejl som kommer, har du overvejet at prøve med en SQL sætning i stedet for.:
If Request.Form("bold") = "on" Then strheadline = Replace("<B>" & request.Form("Headline") & "</B>","'","''") Else strHeadline = Replace(Request.Form("headline"),"'","''") End If
If Request.Form("bold") = "on" Then strheadline = Replace("<B>" & request.Form("Headline") & "</B>","'","''") Else strHeadline = Replace(Request.Form("headline"),"'","''") End If
har løst problemet således: <% 'creates connection to database Set conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db.mdb")
'if the user have submitted the formular if Request.ServerVariables("REQUEST_METHOD") = "POST" then
'checks to make sure all fields have been filled out if (Request.Form("headline") <> "" AND Request.Form("body") <> "" AND Request.Form("narrator") <> "") then strbody = Replace(request("body"),vbCrLf,"<BR>") If request.Form("morebody") <> "" Then strMoreBody = Replace(request("morebody"),vbCrLf,"<BR>") End If Set rs = Server.CreateObject("ADODB.Recordset") strSQL = "select * from news" rs.Open strsql, conn, 1, 3 rs.AddNew If Request.Form("bold") = "on" Then strheadline = "<B>" & request.Form("Headline") & "</B>" rs("headline") = replace(strheadline,"'","''") Else rs("headline") = replace(Request.Form("headline"),"'","''") End If rs("body") = replace(strbody,"'","''") If request.Form("morebody") <> "" Then rs("moreBody") = Replace(strmorebody,"'","''") End If rs("narrator") = Replace(Request("narrator"),"'","''") rs("date") = Request.Form("date") rs.update
Response.Write "<FONT COLOR=""green"">you have added the topic to the news section</FONT><BR>"
rs.Close set rs = nothing
else Response.Write"<FONT COLOR='red'>Some fields haven't been filled out</font><BR>"
du skal næsten lige se hvad jeg laver når nu du har hjulpet.
det er på news sektionen der skal være en more funktion så hvis der er meget tekst kan man tilføje det som en funktion så der ikke bliver smidt så meget tekst i hovedet på en lige når man kommer ind på siden. du må meget gerne kommentere den hvis det er
tak for hjælpen!!! det var fanme rart at få løst det problem! har knoklet med det alt for længe nu! en del af skylden er iis! afinstallerede den og installerede den igen.
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.