Hej jag har precis börjat med ASP. Nu håller jag på med en sida som ska visa information i en ACCESS Databas. Problemet jag har är att det verkar Loopa ut samma fält i Databasen hela tiden. Jag har aldrig använt Set när jag lägger in värden i variabler från RS. Det har fungerat problemfritt för mig, men är det fel sätt att göra? Vad är vanlig att göra är:Loopar ut samma information hela tiden
Min kod ser ut så här.
Dim sqlfraga
Dim sqlsvar
Dim datum
Dim handelse
Dim anmarkning
sqlfraga="SELECT * FROM aktuellt;"
Set sqlsvar=connect.Execute(sqlfraga)
datum=sqlsvar("Datum")
handelse=sqlsvar("Händelse")
anmarkning=sqlsvar("Anmärkning")
Response.Write("<table>")
Do until sqlsvar.EOF
Response.Write("<tr>")
Response.Write("<td>")
if datum = "" Then
Response.Write(" ")
Else
Response.Write(datum)
End if
Response.Write("</td>")
Response.Write("</tr>")
sqlsvar.MoveNext
Loop
Jag har försökt att lägga in en variabel som räknar upp men inte fått det att fungera. Kan någon hjälpa mig.Sv: Loopar ut samma information hela tiden
Dim connect
Dim Recordset
Dim DatumFält
Dim HändelseFält
Dim AnmärkningsFält
Const SQL = "SELECT * FROM aktuellt;"
Set connect = CreateObject("ADODB.Connection")
connect.Open "..."
Set Recordset = CreateObject("ADODB.Recordset")
Recordset.Open SQL, connect
Set DatumFält = Recordset("Datum")
Set HändelseFält = Recordset("Händelse")
Set AnmärkningsFält = Recordset("Anmärkning")
Response.Write("<table>")
Do until Recordset.EOF
Response.Write "<tr><td>"
If IsDate(DatumFält) Then
Response.Write(datum)
Else
Response.Write(" ")
End if
Response.Write "</td></tr>"
Recordset.MoveNext
Loop
Recordset.Close
connect.Close
Vad är skillnaden? Set framför tilldelningen.
Vad du gör är att du tilldelar variablen objektet istälet för värdet.
Sv:Loopar ut samma information hela tiden
ThomasSv: Loopar ut samma information hela tiden
Do Until rs.EOF
Response.Write rs("X")
rs.MoveNext
Loop
Eller:
Do Until rs.EOF
X = rs("X")
Response.Write X
rs.MoveNext
Loop
Låt oss titta närmare på rs("X").
Vilket igentligen kan skrivas ut som:
<code>
rs.Fields.Item("X").Value
</code>
Detta för att Fields är defaultegenskapen på recordset klassen.
Item default egenskapen på Fields klassen.
Value default egenskapen på Field klassen.
Den kostsamaste är att anropa Item på Fields klassen, vilket måste kolla igenom fälten tills den hitta en med samma namn. Tror inte det är en hash tabell. Item tar även index vilket är snabbare. Skillnaden hade inte varit lika tydlig med en hashtabell.
Vad du gör när du använder Set är att du håller en referens tilll fältobjektet:
Set X = rs("X")
Do Until rs.EOF
Response.Write X
rs.MoveNext
Loop
Så slipper vb att slå upp fältet i samlineng för varje loop. Den behöver bara göra det en gång.
Det blir alltså snabbare.
Ett annat sätt att använda denna optimering är att skicka fält objekten som parametrar till en subrutin:
<select name="user">
<%
Sub WriteOptions(rs, IdField, TextField)
Do Until rs.EOF
Response.Write "<option value=""" & IdField & """>" & Server.HTMLEncode(TextField) & "</option>"
rs.MoveNext
Loop
End Sub
Dim con
Dim rsUsers
Set con = CreateObject("ADODB.Connection")
con.Open Application("ConnectionString")
Set rsUsers = con.Execute("SELECT UserId, UserName FROM Users ORDER BY UserName")
WriteOptions rsUsers, rsUsers("UserId"), rsUsers("UserName")
rsUsers.Close
con.Close
%>
</select>