Det är ett flertal personer som har funderat på hur man kan gruppera ett gäng poster ifrån en databas och skriva ut en rubik över varje grupp. Proceduren är egentligen ganska enkel.
Vi hämtar ut vår information ifrån databasen med en vanlig SQL-sats, vi låtsas att vi vill ha rubrik på varje enskild ort i vår telefonlista. Kod:
Set RecSet = Connect.Execute("SELECT fldNamn, fldTelefon, fldOrt FROM tblTelefonbok ORDER BY fldOrt, fldNamn")
Vi kollar så att vi inte får problem med tomma poster och vi startar våran loop: Kod:
If RecSet.EOF then Response.Write "Det fanns ingenting i telefonboken..." Else Do Until RecSet.EOF ' Här komme koden som skal skrivas ut... RecSet.MoveNext Loop End If
Vi börjar att tilldela en variabel som heter strOrt som får hålla koll på vilken aktuell ort vi är på och kollar om den är annorlunda mot orten som hämtas ifrån databsen. Kod:
If strOrt <> RecSet("fldOrt") then
När vi kör vårat script så är alla strängar "tomma" så länge vi inte har tilldelat dessa något värde och eftersom vi vill ha en rubrik utskriven så komemr våran IF-sats nu att utfalla.
Vi skriver ut rubriken och tilldelar strOrt samma värde som orten ifrån databsen... och avslutar våran IF-sats. Kod:
Response.Write "<div style=""font-weight: bold;"">" & RecSet("fldOrt") & "</div>" strOrt = RecSet("fldOrt") End If
Nu kan vi börja skriva ut våran telefonlista. Kod:
Response.Write "<div>" & RecSet("fldNamn") & - & RecSet("fldTelefon") & "</div>"
Under varje loop-varv så kommer vi att kolla om variabeln strOrt är något annat än RecSet("fldOrt"), har vi bytt ort så skriver vi ut rubriken och tilldelar strOrt det nya ortsnamnet.
Vips så har vi en enkel metod att skriva ut en rubrik till våran telefonbok... och den färdiga koden kan se ut så här. Kod:
Set RecSet = Connect.Execute("SELECT fldNamn, fldTelfon, fldOrt FROM tblTelefonbok ORDER BY fldOrt, fldNamn") If RecSet.EOF then Response.Write "Det fanns ingenting i telefonboken..." Else Do Until RecSet.EOF If strOrt <> RecSet("fldOrt") then   Response.Write "<div style=""font-weight: bold;"">" & RecSet("fldOrt") & "</div>"   strOrt = RecSet("fldOrt") End If Response.Write "<div>" & RecSet("fldNamn") & - & RecSet("fldTelefon") & "</div>" RecSet.MoveNext Loop End If RecSet.Close
Vi kan även använda oss utav GetRows för att hämta ut all data ifrån databasen och göra en likadan utskrift, här tänker jag bara på att visa principen så får ni undersöka scriptet vidare om hur det funkar med GetRows och arrayer. Kod:
Set RecSet = Connect.Execute("SELECT fldNamn, fldTelfon, fldOrt FROM tblTelefonbok ORDER BY fldOrt, fldNamn") If RecSet.EOF then Response.Write "Det fanns ingenting i telefonboken..." Else arrTelefonbok = RecSet.GetRows bolTelefonbok = True End If RecSet.Close
' Här skriver vi ut telefonboken... If bolTelefonbok = True then For intCounter = 0 to UBound(arrTelefonbok.2) If strOrt <> arrTelefonbok(2,intCounter) Then   Response.Write "<div style=""font-weight: bold;"">" & arrTelefonbok(2,intCounter) & "</div>"   strOrt = arrTelefonbok(2,intCounter) End If Response.Write "<div>" & arrTelefonbok(0,intCounter) & - & arrTelefonbok(1,intCounter) & "</div>" Next End If
Fördelen som jag ser det med GetRows är att man hämtar ut all information till en array för att kunna skriva ut den var som helst på sidan, genom att man hämtar ut informationen så tidigt som möjligt gör att databsen kan stängas direkt och inte när sidan har laddats klart. |