Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:05 Der 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

strBody = Replace(Replace(Request.Form("body"),vbCrLf,"<BR>"),"'","''")

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

strBody = Replace(Replace(Request.Form("body"),vbCrLf,"<BR>"),"'","''")
strmoreBody = Replace(Replace(Request.Form("morebody"),vbCrLf,"<BR>"),"'","''")

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

please help me out
hilsen Angeldust83
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:08 #1
Det er fordi folderen eller database filen er skrive beskyttet se mere her:
http://activedeveloper.dk/aspdigital/kapitel2/updateable_query.asp
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:11 #2
gør jeg det inde fra mmc?
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:13 #3
Er det din egen server eller på et web-hotel?
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:14 #4
kører iis på samme computer som jeg sidder ved nu så jeg kan teste!
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:15 #5
har lige været inde og tilføje skrivning til mappen via mmc og det fungere stadig ikke :o(
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:16 #6
Så skal du højre klikke på den folder som database filen ligger i. Og tilføje en ny bruger IUSR_xxxxx. Give den skriverettighed til den folder.
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:16 #7
Er det XP?
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:17 #8
det er xp
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:19 #9
Ok der er noget som ikke er helt ens med NT og W2K. Prøv at kigge her:
http://www.webwizguide.info/asp/faq/server_permissions.asp

Og læs først helt ned i bunden.
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:26 #10
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

strBody = Replace(Replace(Request.Form("body"),vbCrLf,"<BR>"),"'","''")
strmoreBody = Replace(Replace(Request.Form("morebody"),vbCrLf,"<BR>"),"'","''")

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
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:33 #11
Hvilket format er Date i databasen?
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:34 #12
det er tekst, og det er også tekst der bliver sat ind
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:36 #13
Er der nogle af strengene som kunne være tomme?
Eksvis hvis strbody er = "" og body i databasen ikke vil modtage en nullængde streng?
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:38 #14
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.
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:45 #15
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!
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:48 #16
Er alle defineret som tekst?
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:48 #17
håber du har andre gode bud!
kan det være denne linie der giver fejlen?
rs2.Open strSQL2, Conn, adOpenKeyset, adCmdText
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:49 #18
alle er defineret som tekst! så det er ikke datatyperne der er forkerte
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:50 #19
Måske prøv at fjerne adCmdText:

rs2.Open strSQL2, Conn, adOpenKeyset
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:54 #20
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

dette sker hvis adCmdText ikke er med
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:56 #21
hmm ikke godt.. Hvad hvis du skriver:

rs2.Open strSQL2, Conn, adOpenKeyset, 3
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:57 #22
det er jo det samme... giver samme resultat

hvad kan der være galt?
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 13:59 #23
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

linie 94 er: rs2.update
Avatar billede eagleeye Praktikant
01. marts 2003 - 14:03 #24
Ok hvad er linie 94?
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 14:04 #25
linie 94 er: rs2.update
Avatar billede eagleeye Praktikant
01. marts 2003 - 14:05 #26
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")
Avatar billede eagleeye Praktikant
01. marts 2003 - 14:08 #27
Det et vel ikke nødvendigt at havde replace når man bruger rs("xxx")

rs2("narrator") = Replace(Request.form("narrator"),"'","''")

Prøv uden replace, måske det er det som driller? men igen det lyder lidt underligt.:

rs2("narrator") = Request.form("narrator")
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 14:10 #28
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?
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 14:14 #29
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
Avatar billede eagleeye Praktikant
01. marts 2003 - 14:33 #30
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.:


strSQL2 = "Select * From news"
rs2.Open strSQL2, Conn, adOpenKeyset, adCmdText

strBody = Replace(Replace(Request.Form("body"),vbCrLf,"<BR>"),"'","''")
strmoreBody = Replace(Replace(Request.Form("morebody"),vbCrLf,"<BR>"),"'","''")

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


------------------------------------
Så sådan her:


strBody = Replace(Replace(Request.Form("body"),vbCrLf,"<BR>"),"'","''")
strmoreBody = Replace(Replace(Request.Form("morebody"),vbCrLf,"<BR>"),"'","''")

If Request.Form("bold") = "on" Then
  strheadline = Replace("<B>" & request.Form("Headline") & "</B>","'","''")
Else
  strHeadline = Replace(Request.Form("headline"),"'","''")
End If

SQL = "INSERT INTO news (hadline, body, morebody, narrator, [Date]) VALUES ("
SQL = SQL & "'" & strHeadline & "', "
SQL = SQL & "'" & strbody & "', "
SQL = SQL & "'" & strmorebody & "', "
SQL = SQL & "'" & Replace(Request.form("narrator"),"'","''") & "', "
SQL = SQL & "'" & Request.form("date") & "'"
SQL = SQL & ")"

Conn.Execute(SQL)
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 14:47 #31
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>"
   
    end if
    end if
%>
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 14:48 #32
forresten... hvorfor havde du sat [] rundt om date... er det fordi det er reserveret i sql?
Avatar billede eagleeye Praktikant
01. marts 2003 - 14:50 #33
Ja der er [] omkring fordi det er et reserveret ord.
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 14:53 #34
er i gang med en opdatering af min onkels hjemmeside

http://www.Vikinggroup.dk

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

mvh angeldust
Avatar billede eagleeye Praktikant
01. marts 2003 - 15:01 #35
Ok det ser spændene ud :)
Avatar billede angeldust83 Nybegynder
01. marts 2003 - 15:10 #36
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.
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