Hej! Låter som att du försöker uppdatera ett textfält? I sådana fall: Tack, precis det jag var ute efter! Om jag läser rätt nu, på din ursprungsfråga ser du felet: Syntax error (missing operator) in query expression 'Förnamn Efternamn'. Namn-felet är åtgärdat - det fixades när jag satte ' runt strängen.Problem med databasskrivning
Fick för ett tag sedan en funktion för att enkelt uppdatera många poster i en databas.
Principen var då "ta värde på posten X och lägg till med värdet Y". Nu vill jag göra
"Strunta i vad värdet på posten X är och sätt dit Y".
Den första funktionen såg ut så här:
Jag har dessutom satt följande:
Response.Buffer = true
set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("db/statistik.mdb")
function doedit(id, post, laggatill, connection)
connection.Execute "UPDATE statdata_org SET " + post + " = " + post + " + " + laggatill + " WHERE ID = " + id
end function
Och jag pusslade ihop den andra så att den ser ut så här:
function doedit2(id, post, laggatill, connection)
connection.Execute "UPDATE statdata_org SET " + post + " = " + laggatill + " WHERE ID = " + id
end function
Men det är något som inte stämmer. Jag anropar funktionen med
doedit2 CurID, "Namn", request.form("namn"), cnn
Och får felmeddelandet
Microsoft JET Database Engine error '80040e14'
Syntax error (missing operator) in query expression 'Förnamn Efternamn'.
/st/editspelare.asp, line 9
På rad 9 står följande:
connection.Execute "UPDATE statdata_org SET " + post + " = " + laggatill + " WHERE ID = " + id
Då tänkte jag att man kanske skulle bädda in laggatill med "-tecken, men det går ju inte så bra...
Någon som kan hjälpa mig? Vore ytterst tacksam. Säg till om du vill se hela koden.
Tack,
BjörnSv: Problem med databasskrivning
function doedit2(id, post, laggatill, connection)
connection.Execute "UPDATE statdata_org SET " + post + " = '" + laggatill + "' WHERE ID = " + id
end function
/JohanSv:Problem med databasskrivning
Men det är något som inte stämmer.
Jag klistrar in hela koden nedan, hoppas det inte är för rörigt (jag är som du säkert märkt inte en hejare på asp)... Jag försöker lägga till ' och förklara vad som verkar skumt det gör.
Hela grejen är en databas för en fotbollsförening. Alla spelarna i A, B, C och J-lag finns med, tillsammans med diverse data såsom namn, födelsedatum, yrke samt hur många mål, matcher, assist, inhopp och dylikt de fått i varje lag.
<code>
<html>
<head><title>*</title>
<link href="../main.css" rel="stylesheet" type="text/Css">
<body class="text">
<%
function doedit2(id, post, laggatill, connection)
connection.Execute "UPDATE statdata_org SET " + post + " = '" + laggatill + "' WHERE ID = " + id + " "
Response.write("UPDATE statdata_org SET " + post + " = '" + laggatill + "' WHERE ID = " + id)
response.write("<br>")
end function
function doedit3(id, post, laggatill, connection)
'connection.Execute "UPDATE statdata_org SET " + post + " = '" + laggatill + "' WHERE ID = " + id + " "
Response.write("<b>UPDATE statdata_org SET " + post + " = '" + laggatill + "' WHERE ID = " + id)
response.write("<br></b>")
end function
Response.Buffer = true
set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("db/statistik.mdb")
dim CurID, frn(9), tem(4), str(72), a, b, c
CurID = request.form("uti")
'Posterna för statistiken är 72 st, MatcherAlag, InhoppJlag osv osv osv, och de skapas här
'istället för att behöva skriva i dem själv
frn(1) = "Matcher" : frn(2) = "Inhopp" : frn(3) = "Mal"
frn(4) = "Assist" : frn(5) = "Varning" : frn(6) = "Utvisning"
frn(7) = "Etta" : frn(8) = "Nolla" : frn(9) = "ML"
tem(1) = "A" : tem(2) = "B" : tem(3) = "C" : tem(4) = "J"
a = 1
c = 1
do while a <> (1 + ubound(tem))
b = 1
do while b <> (1 + ubound(frn))
str(c) = frn(b) & tem(a) & "lag"
c = c + 1
b = b + 1
loop
a = a + 1
loop
a = 1
do while a <> 37
str(36 + a) = str(a) & "T"
a = a + 1
loop
'Den sista do-loop grejen gör en kopia på varje skapad post och lägger till ett T: MatcherAlag -> 'MatcherAlagT - detta är för träningsmatcher.
'Här skrivs sedan persondatan, typ namn, födelsedatum och annat. statistiken (Dvs alla poster som
'finns i str() kommer längre ner)
dim vt, vs, vb, lk 'bild, vstat, vtrupp, kapten är checkboxar
vt = "0" : vs = "0" : vb = "0" : lk = "0"
if request.form("bild") = "on" then vb = "1"
if request.form("vstat") = "on" then vs = "1"
if request.form("vtrupp") = "on" then vt = "1"
if request.form("kapten") = "on" then lk = "Ja"
doedit2 CurID, "Namn", request.form("namn"), cnn
doedit2 CurID, "Smeknamn", request.form("snamn"), cnn
doedit2 CurID, "Lag", ucase(request.form("lag")), cnn
doedit2 CurID, "VisaTrupp", vt, cnn
doedit2 CurID, "Persnr", request.form("pnum"), cnn
doedit2 CurID, "VisaStatistik", vs, cnn
doedit2 CurID, "Bild", vb, cnn
doedit3 CurID, "Position", request.form("pos"), cnn 'Orsaken till att jag har doedit3 är att den inte
'klarar av att använda doedit2 av någon anledning.
doedit2 CurID, "Vikt", request.form("vikt"), cnn
doedit2 CurID, "Langd", request.form("lngd"), cnn
doedit2 CurID, "Yrke", request.form("yrke"), cnn
doedit2 CurID, "Moderklubb", request.form("mklu"), cnn
doedit2 CurID, "KomHit", request.form("kgoi"), cnn
doedit2 CurID, "AndraKlubbar", request.form("oklu"), cnn
doedit2 CurID, "BastaSpelare", request.form("bspe"), cnn
doedit2 CurID, "BastaLag", request.form("bklu"), cnn
doedit2 CurID, "BastaMinne", request.form("bgme"), cnn
doedit2 CurID, "SamstaMinne", request.form("wgme"), cnn
if lk = "Ja" then
doedit2 CurID, "Lagkapten", lk, cnn
end if
'Sen tar vi matchstatistiken... och här kör den alltså igenom alla i str() och sätter dit rätt värde
a=1
do while a <> (ubound(str) + 1)
doedit2 CurID, str(a), request.form(str(a)), cnn
a=a+1
loop
'response.redirect("admin.asp")
%>
</body>
</html>
</code>
Hoppas det inte blev alltför rörigt. Att den inte kan spara positionen är en grej (som jag kan ta senare, inte så viktigt), men när den ska skriva matchstatistiken - dvs str() - så sparar den inte som den ska. Som du ser i funktionen doedit2 så har jag lagt till en response.write() för att kolla att den skriver ut rätt saker. i utskriften ser allt bra ut, men datan sparas inte.
Ytterst tacksam för hjälpen. Sv: Problem med databasskrivning
Du har alltså inget mellanslag mellan för och efternamn för att informera att det är två fält.Sv:Problem med databasskrivning
Problemet som kvarstår är att
do while a <> (ubound(str) + 1)
doedit2 CurID, str(a), request.form(str(a)), cnn
a=a+1
loop
inte vill fungera som det ska. De rader där jag skrivit ut varje doedit2... (för namn, födelsedata etc) fungerar, men inte de där postens namn hämtas ur str().