Artiklar » SQL » 3 olika LOOP-alternativ

 
 

3 olika LOOP-alternativ

Författare: mactommy
Datum: den 12 mars 2007
Antal lästa: 5882
Ej stjärnmärkt

Jag kommer starta med att visa en enkel SQL-fråga. Vi börjar med att hitta på ett variabelnamn på vår SQL-fråga, som gör det enklarare att komma ihåg vad vi gjorde för några månader sen. I mitt fall göra jag det enkelt för mig och döper den  till strSQL. Varför? "str" skriver jag dit för att komma ihåg att min variabel innehåller text och "SQL" för att det är min  SQL-sats. Det förekommer ett variabelnamn som heter "addera" i diverse script m.m. och detta är inte ett lämpligt namn på en  SQL-fråga som hämtar poster ifrån en databas.

Så vi börjar med: Kod:
strSQL = "SELECT * FROM tblAdressbok"

Denna rad gör så att vi hämtar ut alla fälten i databasen oavsett om vi kommer använda dessa eller ej, detta markeras utav stjärnan. Men, vi kan vara snäll mot våran databas och bara ange vilka fält vi vill använda oss utav: Kod:
strSQL = "SELECT fldID, fldNamn, fldEpost FROM tblAdressbok"

och här kan vi låtsas att vi har fältnamn som "fldAdress" och kanske "fldTelefon" oxå, som vi inte vill använda oss utav nu. Eftersom jag inte tänkte skriva ut dessa så hoppar jag över de i min SQL-fråga. Det blir mer att skriva - men snällare mot databasen om man har många anslutningar mot databasen varje dag.

Om ni var lite uppmärksamma på mitt tabell-namn och mina fält-namn så kallade jag dessa för "tblAdressbok" och "fldID"... "fldNamn"... m.m. Jag har alltså satt på extra ord (röda) på varje tabell och fält för att slippa hamna i en sådan situation att jag använder mig utav ett reserverat ord som kan ställa till oreda. Sen vet jag oxå att "tbl" är tabellen och "fld" är mina fält i databasen.

Jag förutsätter att ni har gjort kopplingar till databasen och använder er utav variablarna "Connect" och "RecSet"... Dessa kan oxå vara vad som helst, bara ni använder dessa rakt igenom i eran kod och inte byter namn p.g.a. att ni läst en artikel eller klistrat och klippt ifrån något kul script. Bestämmer er för något och håll fast vid det, byt inte mellan sidorna p.g.a. att gästboken ni hämtade heter variabeln "RecSet" och BLOG-scriptet heter "rst", utan skriv om dessa så de heter samma sak. Det tjänar ni på om det börjar strula, var det rst eller recset på bloggen?

Vi börjar med att titta på olika alternativ för att köra SQL-frågan mot databasen. Kod:
    strSQL = "SELECT * FROM tblAdressbok"
    RecSet.Open strSQL, Connect, adOpenStatic, adLockOptimistic

Det man ser här är att man har med variablar som heter "adOpenStatic" och "adLockOptimistic" och kräver att vi inkluderar filen "adovbs.inc" på sidan... "adovbs.inc" är en samling variabelnamn med olika värden. Denna är egentligen helt onödig att inkludera för om man öppnar filen och söker reda på dessa variablar, tar dessa siffror och sätter ersätter variablarna i våran RecSet.Open-sats så kan vi då istället skriva: Kod:
    strSQL = "SELECT * FROM tblAdressbok"
    RecSet.Open strSQL, Connect, 3, 3

Vi slipper ett gäng olika variablar i serverns minne på detta sätt. Vi kan även använda oss utav denna variant, såvida vi inte ska hålla på med paging: Kod:
    strSQL = "SELECT * FROM tblAdressbok"
    Set RecSet = Connect.Execute(strSql)

eller då sätta ihop allt på en rad: Kod:
    Set RecSet = Connect.Execute("SELECT * FROM tblAdressbok")



Nu tror jag att vi kan gå på olika alternativ för att hämta information och loopa ut dessa på sidan...

Alternativ 1, den mest vanligt förekommande om man kollar på gamla script... Kod:
    strSQL = "SELECT * FROM tblAdressbok"
    Set RecSet = Connect.Execute(strSQL)
    Do Until RecSet.EOF
        Response.Write RecSet("fldNamn") & " - " & RecSet("fldEpost") & "<br/>"
        RecSet.MoveNext
    Loop
    RecSet.Close



Alternativ 2... Kod:
    strSQL = "SELECT * FROM tblAdressbok"
    Set RecSet = Connect.Execute(strSQL)
    While Not RecSet.EOF
        Response.Write RecSet("fldNamn") & " - " & RecSet("fldEpost") & "<br/>"
        RecSet.MoveNext
    Wend
    RecSet.Close



Alternativ 3... Kod:
    Dim arrPoster, intCounter
    strSQL = "SELECT fldID, fldNamn, fldEpost FROM tblAdressbok"
    Set RecSet = Connect.Execute(strSQL)
        arrPoster = RecSet.GetRows
    RecSet.Close : Set RecSet = Nothing
    Connect.Close : Set Connect = Nothing

    For intCounter = 0 to UBound(arrPoster,2)
        Response.Write arrPoster(1,intCounter)  & " - " & arrPoster(2,intCounter) & "<br/>"        
    Next
    


Alla dessa tre alternativ gör precis likadant, skriver ut namn och epost på skärmen... Men vilken ska man använda? Mellan alt 1 och 2 är det ingen större skillnad, båda håller databasen öppen medan man skriver ut informationen, när allt är utskrivet så stänger man kopplingen och har man en lista på flera hundra namn så kommer databsen att vara öppen länge. Jag skulle nog rekomendera alla att börja använda alt. 3 istället.

Varför alterantiv 3? Man kan "klumpa" ihop alla databashämtningar överst på sin ASP-sida så att man kan stänga sin koppling till databas så fort som möjligt. Användning utav en FOR-sats tillsammans med arrayen är utmärkt alterantiv i stället för en "vanlig" databas loop. Prova på ert nästa script... jag har hittils inte ångrat mig...

Tänk bara på arrayerna alltid börjar räkna ifrån 0...

 
     

  » Logga in  
 
Användarnamn

Lösenord

 
     

  » Bli medlem  
  Bli medlem på ASPsidan!  
     

     
  Microsoft  
     

  » Partners  
  Comsolvia  
     
  » ANNONS  
  ingen annons än  
     

  » Senast online  
  Endast för inloggade  
  Antal inloggade: 1  
     

Copyright © 2007 www.ASPsidan.se
ingen sponsrar längre ASPsidan med Dedikerad Server
ASPsidan RSS
   
 XHTML / CSS
Det tog 0,0625 sekunder att ladda sidan