webForumDet fria alternativet

update och problem

9 svar · 337 visningar · startad av Nova

NovaMedlem sedan feb. 2005241 inlägg
#1

En kock ska laga mat och inte göra hemsidor. Efter många om och men så fick jag detta till att fungera, hur säkert och bra det är har jag ingen aning om.

set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = XXXXXXXXXX
Command1.CommandText = "UPDATE recept SET visat = visat+1 WHERE id = Receptnr"
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()

Som vanligt kommer en följdfråga då. Jag vill bara uppdatera ett specifikt recept och denna kod uppdaterar alla recept med +1.

OveRRidEMedlem sedan feb. 20018 509 inlägg
#2

Jag vet inte hur din databasstruktur ser ut, men om den där koden uppdaterar alla poster i tabellen så har du två kolumner ('id' och 'Receptnr') som på alla rader innehåller identiska värden mot varandra, vilket jag för det första inte alls förstår. Antagligen identifierar du recepten med 'id', så varför ha en kolumn till med samma värde? Det din SQL gör nu är alltså att uppdatera alla rader där 'id's värde är samma som 'Receptnr's värde, vilket antagligen är på alla rader eftersom alla uppenbarligen påverkas av frågan.

Om du vill uppdatera ett recept givet ett id-nummer skall din SQL se ut såhär;

UPDATE recept SET visat = visat + 1 WHERE id = " & Cint(iReceptId)
NovaMedlem sedan feb. 2005241 inlägg
#3

Om jag skriver in som du visade så får jag felmedelande

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
/lyckasmeddb/wwwroot/receptbak.asp, line 60
set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_news_STRING
Command1.CommandText = "UPDATE recept SET visat = visat+1 WHERE id = " & Cint(iReceptnr)
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()    [B]Detta är rad 60[/B]

Det unika nr jag har för varje recept är "receptnr"

och skriver jag in

set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_news_STRING
Command1.CommandText = "UPDATE recept SET visat = visat+1 WHERE Receptnr = " & Cint(Receptnr)
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()

Så updaterar det inget alls men jag får inga felmedelanden.

Som sagt tidigare man ska koka mat som kock inte koka i hop kod :)

LarsGMedlem sedan dec. 200012 465 inlägg
#4
Command1.CommandText = "UPDATE recept SET visat = visat+1 WHERE Receptnr = " & Cint(Receptnr)
response.write "SQL:" & Command1.CommandText
response.end

Kontrollera att det värde som anges i where-villkoret verkligen finns i din tabell.

WebbisNetMedlem sedan feb. 20032 182 inlägg
#5

Hur tar du emot receptnumret, ser ingen variabel
vad händer om du skriver ut satsen, får du nåt värde

set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_news_STRING
Command1.CommandText = "UPDATE recept SET visat = visat+1 WHERE Receptnr = " & Cint(Receptnr)
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Response.Write Command1
Response.End
'Command1.Execute()
NovaMedlem sedan feb. 2005241 inlägg
#6

Detta får jag om jag skriver in det LarsG skriver

SQL:UPDATE recept SET visat = visat +1 WHERE Receptnr = 0

det verkar som att jag försöker uppdatera receptnr "0" med den kod jag har, men det är inte riktigt det jag vill utan jag vill uppdatera det unika receptnr som besökaren tittar på.

Och denna felkod får jag när jag föresöker med vad WebbisNet skriver

Error Type:
Response object, ASP 0185 (0x8002000E)
A default property was not found for the object.
LarsGMedlem sedan dec. 200012 465 inlägg
#7

Då är ju problemet hur Receptnr får något värde. Hämtar du det från ett formulär eller vad? Beskriv hur det går till.

NovaMedlem sedan feb. 2005241 inlägg
#8

Varje gång en besökare trycker på en länk till ett recept så skickas receptnr med och jag använder receptnr som "trigger" heter det så? för att skriva ut texten och innehåll till det unika receptet med ett recordset.

Min förhoppning var att jag skulle kunna använda mig av "receptnr" som skickas med när någon trycker på länken, till att uppdatera kolumnen "visat" i tabellen Recept, med +1 varje gång något tittat på just det receptet.

LarsGMedlem sedan dec. 200012 465 inlägg
#9
if  isNumeric(request.querystring("receptnr")) then
    receptNr = request.querystring("receptnr")
else
    response.write "Felaktigt receptnummer" 
    response.direct "lämplig sida"
end 
'...
Command1.CommandText = "UPDATE recept SET visat = visat+1 WHERE Receptnr = "  & receptNr

Du får väl snygga till felhanteringen något.

NovaMedlem sedan feb. 2005241 inlägg
#10

Jag tackar och bockar så MYCKET :) LarsG
Så här vart koden:

iF  isNumeric(request.querystring("receptnr")) then
    receptNr = request.querystring("receptnr")
else
    response.write "Felaktigt receptnummer" 
    response.direct "lämplig sida"   (ska fundera på vilken om den alls behövs)
end IF
set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_news_STRING
Command1.CommandText = "UPDATE recept SET visat = visat +1 WHERE Receptnr = " & CLng(Receptnr)
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()
%>

Om du någonsin behöver hjälp med mat och dryck så är det bara att hojta till :)

//Peder

128 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
125 ms — hämta tråd, inlägg och bilagor (db)