set objRS=objConn.execute("SELECT * FROM tabell")
Men du borde verkligen inte använda dig av något av dessa, använd en SQL INSERT INTO istället för det du försöker göra nu.
30 svar · 1 353 visningar · startad av dareknowak
Tänkte förenkla min kodstruktur lite men har nu fastnat.
Men hur förenklar man detta?
Set objConn = Server.CreateObject("ADODB.Connection")
Set objRS = Server.CreateObject("ADODB.RecordSet")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sDatabasePath
SQL = "SELECT * FROM tabell"
objConn.Execute SQL
objRS.Open SQL, objConn, adOpenStatic, adLockOptimistic
objRS.AddNew
objRS("user") = strUser
objRS.Update
objRS.Close
objConn.Close
Testade med detta men funkade inte och fick error
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sDatabasePath
set objRS=objConn.execute("SELECT * FROM tabell",adOpenStatic, adLockOptimistic)
objRS.AddNew
objRS("user") = strUser
objRS.Update
objRS.Close
objConn.Close
Felmeddelande:
"ADODB.Connection fel '800a0bb9'
Parametrarna är felaktiga, ligger utanför tillåtet intervall eller skapar en inbördes konflikt.
/test/index.asp, rad 14"
Rad 14: "set objRS=objConn.execute("SELECT * FROM tabell",adOpenStatic, adLockOptimistic)"
set objRS=objConn.execute("SELECT * FROM tabell")
Men du borde verkligen inte använda dig av något av dessa, använd en SQL INSERT INTO istället för det du försöker göra nu.
set objRS=objConn.execute("SELECT * FROM tabell")
Men du borde verkligen inte använda dig av något av dessa, använd en SQL INSERT INTO istället för det du försöker göra nu.
Använder jag mig av den så får jag fram följande felmeddelande:
"ADODB.Recordset fel '800a0cb3'
Aktuellt Recordset kan inte uppdateras. Det kan bero på en begränsning av providern eller den valda låstypen.
/nowakit/kundvagn.asp, rad 16"
Rad 16: "objRS.AddNew"
Vad är det egentligen för skillnad att använda SELECT och lägga in information med objrs("test") = värde än att använda INSERT INTO och lägga in det direkt i sql satsen?
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sDatabasePath
objConn.Execute("INSERT INTO tabell (user) Values('"& strUser &"')")
objConn.Close : Set objConn = nothing
Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sDatabasePath objConn.Execute("INSERT INTO tabell (user) Values('"& strUser &"')") objConn.Close : Set objConn = nothing
Jo jag vet hur man gör men menade på vad det är för skillnad rent tekniskt?
Att du använder ett Recordset för att uppdatera, medans med Connection ojbektet så kör du en riktigt SQL insert.
SELECT * FROM tabell hämtar ALLT från tabell, och du behöver inte detta till något. Att köra en INSERT TO blir därmed enormt mycket bättre sett till prestandan, då du inte skapar några onödiga objekt som du inte behöver.
Men INSERT TO kan inte användas i det här sammanhanget? Då måste jag använda mig av ett recordset?
strUser = objRS("user")
If objRS("user") = strUser Then
objRS("antal") = objRS("antal") +1
End If
Något i stil med "UPDATE tabell SET antal = antal + 1 WHERE user = '" & strUser "'" borde fungera!
strUser = objRS("user")
If objRS("user") = strUser Then
objRS("antal") = objRS("antal") +1
End If
Det där ser ut som en UPDATE.
Det finns tre grundkommandon i SQL.
1 ) INSERT INTO table, vilket lägger in en ny post med data i en tabell.
2 ) UPDATE table , vilket uppdaterar en befintlig post med ny data.
3 ) SELECT , vilket hämtar rader med data från en tabell baserad på vilkor.
Kan väl säga så, det är lite skillnad på ADORecordset objekt insättning och connection objekt insättning.
Connection objektet är snabbare och kräver mindre resurser av servern, medans recordset objektet är mer resurskrävande.
Connection objektet är vanligtvis det man brukar föredra. Dock är det i slutändan upp till var och en vad man väljer.
Mycket beror också på hur pass mycket belastning scripten har. :)
Okej, skulle det vara bättre att göra såhär?
If objRS("user") = strUser Then
sqlupdate
Else
sqlinsertto
End If
I detta läge måste jag ju skapa ett recordset i vilket fall och kanske lika bra att updatera direkt via det?
varför går det inte köra den if satsen bara för objrs("user") är tom? (När tabellen i databasen är tömd)
Hur löser man det?
If objRS.EOF
'INSERT
Else
'UPDATE
End If
Om en SQL inte retunera någon data så har den inte några fält att arbeta med. så du får använda dig av End Of File (EOF) för att se om den innehåller någon data efter SQL frågan.
Så det ska alltså bli såhär då?
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sDatabasePath
Set objRS=objConn.execute("SELECT * FROM [tabell] WHERE user = '" & strUser & "' AND usertype = '" & strUsertype & "'")
If objRS.EOF Then
objConn.Execute("INSERT INTO tabell (user,usertype,antal) Values('"& strUser &"','"& strUsertype &"','"& strAntal &"')")
Else
objConn.Execute("UPDATE tabell SET antal = antal + 1 WHERE user = '" & strUser & "'")
End If
objRS.Close
objConn.Close
Blir det då inte lättare och mindre prestanda krävande att göra detta direkt med ett recordset?
Ett ja eller nej skulle sitta fint? :)
Set objRS=objConn.execute("SELECT * FROM [tabell] WHERE user = '" & strUser & "' AND usertype = '" & strUsertype & "'")
Om du inte skall använda recordsetet mer än att se att användaren finns så behöver du inte hämta ut all data med *, räcker med exempelvis användarnamn eller select 1 .... för att retunera 1(och inte EOF).
Men för att få svar på min huvudsakliga fråga så kan vi ta ett annat exempel hur får man detta
SQL = "DELETE FROM tabell WHERE user = '" & strUser "'"
objConn.Execute SQL,,128
till denna formen
objConn.execute("DELETE FROM tabell WHERE user = '" & strUser "'")
Hur man alltså får in ",,128" i sql satsen?
Gissning, men:
objConn.execute("DELETE FROM tabell WHERE user = '" & strUser "'",,128)
borde fungera.
Gissning, men:
objConn.execute("DELETE FROM tabell WHERE user = '" & strUser "'",,128)borde fungera.
Japp det trodde jag osså men då får jag felmeddelande:
Kompileringsfel i Microsoft VBScript fel '800a0414'
Det går inte att använda parenteser när en Sub anropas.
/test/index.asp, rad 29
objConn.execute("DELETE FROM tabell WHERE user = '" & strUser & "'",,128)
Bort med parenteserna. Maken till tydligt felmeddelande... ;)