SQL-sats som genererar fel i andra mappar!?

ASP

7 svar · 206 visningar · startad av Harback

Medlem sedan juni 2001206 inlägg
Trådstart#1

Jag har fixat ihop ett inloggningssystem som fungerar bra. Eftersom jag ska använda detta system på en sida så överförde jag koden till denna sidan (i en annan mapp). Det fungerade inte riktigt som det skulle (blir felmeddelandet under). Okej tänkte jag, efter ett tags pillande med samma felmeddelande gjorde jag en helt ny mapp och drog över alla filerna från den fungerande mappen. Men det blir detta felmeddelande hela tiden, snälla hjälp! Varför?

Feltyp:
Microsoft JET Database Engine (0x80004005)
Operationen måste använda en fråga som kan uppdateras.
/asp/testing/checklogin.asp, line 25

Syftar på denna sql-sats:

strSQL = "UPDATE tblUsers SET fldCount = fldCount -- 1, fldLastVisit = Now WHERE fldUser= '" & strName & "' AND fldPass= '" & strPass & "'"
objConn.Execute strSQL,,128
Medlem sedan juni 2001206 inlägg
#2

Sök-funktionen, just det. Kollade där och hittade lite om rättighetsfel på databasen. Man ska alltså ändra rättigheter på databasen genom att högerklicka och välja alla rättigheter va? Konstigt är det iallafall eftersom jag inte har gjort det någon gång innan på databasen. Jaja, ska testa det.

Medlem sedan feb. 20012 412 inlägg
#3

Hej!

Den ser rätt ut, så du får nog bifoga mer kod.

varför skriver du -- istället för + :q

objConn.Execute(strSQL)

Vet att man kan använda ,,128 till SELECT men är osäker på UPDATE. Men LarsG vet säkert :e

mvh Jörgen

Medlem sedan dec. 200012 464 inlägg
#4

Att skriva -- i en sql-sats är inte att rekommendera, för det betyder kommentar i en del DBMS (och enligt SQL-standard.)

Att en del använder -- i VB-script beror på att + tolkas som strängkonkatenering om inte addenderna är typade.

Att använda ,,128 i en select är inte så bra. Det betyder att man inte skapar något recordset. Det är alltså för allt annat än select och anrop till en stored procedure som man skall använda det.

red: stavfel

Medlem sedan feb. 20012 412 inlägg
#5

Aha, det var allt utom SELECT man kunde använda ,,128, visste väl att det fanns ett undantag :OO

Vad vinner man på att skriva

objConn.Execute strSQL,,128

istället för

objConn.Execute(strSQL)

skapas det inget recset "i bakgrunden" heller när man skriver ,,128 ?

Om jag hade 1/10-del av dina SQL kunskaper LarsG, då skulle jag le så här :e brett.

mvh Jörgen

Medlem sedan dec. 200012 464 inlägg
#6

skapas det inget recset "i bakgrunden" heller när man skriver ,,128 ?

Ja precis.

Medlem sedan juni 2001206 inlägg
#7

Fick det att fungera nu efter att jag satt att alla hade alla rättigheter till mappen.

En fråga till, vad menar du med:

...om inte addenderna är typade.

Vad är en addend och är dom typade som standard eller? Är det helt smärtfritt att använda + i alla sammanhang?

Medlem sedan dec. 200012 464 inlägg
#8

Ja, vad menar jag?

I uttrycket a + b så är a och b addender.

Egentligen så finns det bara en typ i VB-script som heter variant. En variabel kan dock ha en subtyp t.ex. string eller int. Ett sätt att sätta en subtyp för ett uttryck är att använda någon av de konverteringsrutiner som finns, cstr, clng, cdate mfl. T.ex. så är allt data i ett recordset av subtypen string (tror jag). Man kan ta reda på subtypen för ett uttryck med hjälp av funktionen typename.

Operatorn + kan tolkas olika beroende på vilka subtyper som addenderna har. Om minst en är numerisk så blir det addition annars blir det strängkonkatenering.

Det är därför bättre att använda & för strängkonkatenering då man slipper dessa tvetydigheter.

253 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)