webForumDet fria alternativet
Logga in / Bli medlem

Optimering: Visa db rad med poster...

ASP

14 svar · 255 visningar · startad av Lukaspojken

Medlem sedan maj 20011 312 inlägg
Trådstart#1

Så här lärde man sig på webstudio att man skulle göra:

Set RecSet = Server.CreateObject("ADODB.Recordset")

Visa = "SELECT * FROM forum WHERE msgID=" & msg
RecSet.Open Visa, Connect, 3, 3

Men jag vet att man kan göra på något bättre sätt också

Visa = "SELECT * FROM forum WHERE msgID=" & msg
Connect.Execute(Connect)

Men hur skriver jag ut posterna egentligen. Det är bara en rad jag ska ha i tabellen...och där det står Select *...blir det en optimering om man skriver fältnamnen där?

Medlem sedan maj 20011 312 inlägg
#2

Connect.Execute(Visa)

Ska det stå...

Medlem sedan juni 200032 967 inlägg
#3

det borde t.o.m. stå

Visa = "SELECT * FROM forum WHERE msgID=" & msg
set RecSet = Connect.Execute(visa)

du skriver ut posterna på exakt samma sätt som du gör när du fyller ditt recordset med recset.open.

prestandafrågan kan jag inte ge något bra svar på. den lämnar vi så länge.

Medlem sedan maj 20011 312 inlägg
#4

Om jag hämtar data från en specifik rad och sen direkt efter det ska hämta från en annan. Måste jag stänga ner RecSet-objektet och skapa det igen med "Set Recset"?

Medlem sedan juni 200032 967 inlägg
#5

du skall inte använda

Set RecSet = Server.CreateObject("ADODB.Recordset")

om du väljer att skapa recordsetet genom connectionobjektets executemetod (som jag gjorde ovan, som jag alltid gör).

det räcker alldeles utmärkt då med de två raderna kod jag slängde med (under förutsättning givetvis att ditt connectionobjekt är skapat).

Medlem sedan juni 200032 967 inlägg
#6

eller, öh, vad menar du med din andra fråga?

du kan givetvis återanvända ditt RecSet-objekt.

Medlem sedan maj 20011 312 inlägg
#7

Jag var lite otydlig där...ska försöka visa i ett exempel...

strSQL = "SELECT * FROM forum WHERE msgID=" & Msg
Set RecSet = Connect.Execute(strSQL)

RecSet.Close
Set RecSet = nothing

strSQL = "SELECT * FROM forum WHERE msgID=" & Msg2
Set RecSet = Connect.Execute(strSQL)

RecSet.Close
Set RecSet = nothing

Jag antar att jag inte behöver stänga ner RecSetet för att i sin tur skapa det igen i nästa hämtning...eller? Du nämnde nåt om återanvändning...ska jag bara ta bort set på andra hämntningen kanske?

Medlem sedan juni 200032 967 inlägg
#8

nej, behåll set, men du behöver inte stänga och förstöra objektet innan du kör nästa fråga.

Medlem sedan maj 20011 312 inlägg
#9

När jag skriver ut inläggen till ett huvudinlägg skriver jag gör jag hämtningen så här:

Set RecSet = Server.CreateObject("ADODB.Recordset")

Visa = "SELECT * FROM forum WHERE Thread_ID=" & Mail & " ORDER BY Thread_ReplyOrder"
RecSet.Open Visa, Connect, 3, 3 

Do While Not RecSet.EOF 

response.write "<TD class=text2 width=" & RecSet("Thread_Level") & 0 & " nowrap> etc etc....:)

RecSet.MoveNext
Loop

Jag antar att jag ska använda mig av en array istället för det är en del response.write eller? Ser det annars bra ut?

Medlem sedan maj 20011 312 inlägg
#10

Märker att jag inte ens kan bygga upp de svenska meningarna korrekt...puh...:)

Medlem sedan juni 200032 967 inlägg
#11

array istället för vadå :q

Medlem sedan maj 20011 312 inlägg
#12

Att jag hämtar in alla värden in i en array så att jag kan stänga ner db-kopplingen så snabbt som möjligt...och använda mig av array-värdena när jag gör mina response-write rader...eller tänker jag helt fel?

Medlem sedan juni 200032 967 inlägg
#13

tja, getrows() är ju smidigt att använda, så om du kör en getrows direkt så kan du ju stänga direkt. :)

Medlem sedan maj 20011 312 inlägg
#14

Ska göra det tror jag...men annars såg hämtning bra ut eller...jättetack @nders...

Medlem sedan mars 20002 836 inlägg
#15

Nä, finns ett fel, om du inte ska lägga till nya poster med detta recordset.

Om du inte behöver lägga till poster utan bara hämta ut alla poster ska du inte använda dig av:

RecSet.Open Visa, Connect, 3, 3

Utan av:

RecSet.Open Visa, Connect, 3, 1

[r]
och behöver du inte räkna posterna så räcker denna öppning:

RecSet.Open Visa, Connect, 0, 1

fast det bästa är att skapa recsetet genom conn objektet och sedan hämta ut med getrows()

Visa = "SELECT * FROM forum WHERE msgID=" & msg
Set objRS = Connect.Execute(Visa)
If Not objRS.EOF Then
arrRecords = objRS.GetRows()
End If
Set objRS = Nothing

cya,
PatrikB

268 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)