Avatar billede puppetmaster Nybegynder
23. juli 2002 - 10:12 Der er 11 kommentarer og
1 løsning

RecordSet vs. Array

Jeg har hørt det godt kan betale sig at åbne databaseforbindelsen, hente records ind i et array og lukke forbindelsen, i stedet for at loope gennem recordset'et og så lukke forbindelsen. It makes sense, men hvordan virker det i den virkelige verden?

Jeg tænker på noget a la

<%
Select Case RS.eof
    Case False
        tempRSCount = RS.getrows
        Set RS = Nothing
        Actual_Record_Count = Cdbl(UBound(tempRSCount, 2)) + 1
        Response.Write "<br>Record Count UBound=(" & Actual_Record_Count & ")<br>"
    Case True
        Response.Write "No Records were found"
End Select
%>

I stedet for

<%
Do While Not RS.eof
    Response.Write RS(“Field name”) & “<br>”
    RS.movenext
Loop
%>
Avatar billede tmceu Praktikant
23. juli 2002 - 10:17 #1
Mine erfaringer siger at der ikke er nogen mærkbar forskel, heller ikke efter devisen "mange bække små..."
Avatar billede puppetmaster Nybegynder
23. juli 2002 - 10:18 #2
Hmmm.....det tror jeg jeg vil godtage......vi sidder ca. 7-8 bruger på databasen, i et 100Mbit. Ethernet LAN............(dog aggerer webserveren også filserver samtidig, men du ved hvordan det er i det offentlige!)
Avatar billede tmceu Praktikant
23. juli 2002 - 11:01 #3
Er der noget symbolik i dit navn ift. det offentlige? Jeg tænker på noget med marionet dukker :-)
Avatar billede kichian Nybegynder
23. juli 2002 - 11:45 #4
Microsoft anbefaler at man bruger disconnetede recordsets. Dvs. alle rækker læses over i recordsættet hvorefter connection sættes = nothing.
Det sparer indlæsningen til Array og bruger min. databasetid samt låser evt. data kortest muligt tid.
Derudover kan recordsættet smides rundt i mellem flere funktioner, og derved virke som en logisk datastruktur.
Det er min erfaring at Access 2000 virkeligt kan spurte af sted, selv med "mange" samtidige brugere, når forbindelsen lukkes så hurtigt som muligt.
Avatar billede puppetmaster Nybegynder
23. juli 2002 - 12:32 #5
>tmceu
:)
Avatar billede puppetmaster Nybegynder
23. juli 2002 - 12:34 #6
kichian, lyder godt, det ER nemlig en Access 2000 database jeg bruger.......men hvordan skal det helt nøjagtig gøres, for jeg synes jeg har prøvet, men får ofte lukket forbindelsen FOR hurtigt, så jeg ikke kan loope gennem recordset'et!
Avatar billede puppetmaster Nybegynder
23. juli 2002 - 12:37 #7
Eksempel på kode:
(når der engang er over 1000 artikler i databasen, kommer det jo til at tage en del tid, så hvordan ville man lave Disconnected RecordSet her?)

SQL1 = "SELECT Artikler.artikler_id, Artikler.opdateret_d, Artikler.titel, Artikler.resume FROM Artikler ORDER BY opdateret_d DESC"
SQL2 = "SELECT COUNT(artikler_id) AS Antal FROM Artikler"
Set RS2 = Con.Execute( SQL2 )
Set RS = Con.Execute( SQL1 )
Response.Write "<font face='Times New Roman' size='3'>Der er "
Response.Write RS2("Antal")
Response.Write " artikler i databasen.<p></font><table width='100%' border=0 cellspacing=0 cellpadding=2>"
While Not RS.EOF
  Response.Write "<tr><td><ul><li><font face='Times New Roman' size='3'><a href='visartikel.asp?artikler_id="
  Response.Write RS("artikler_id") & "'>" & RS("titel") & "</a> " & RS("opdateret_d") & "<face='Times New Roman' size='2'><br>" & RS("resume")
    RS.MoveNext
  WEND
  Response.Write "</li></ul></td></tr>"
  RS.Close
  set RS = Nothing 
  RS2.Close
  set RS2 = Nothing 
  Con.Close
  Set Con = Nothing
Avatar billede puppetmaster Nybegynder
23. juli 2002 - 12:38 #8
Hov, der var jo lige én der, RS2 kan jo lukkes hurtigere end jeg der gør det...
Avatar billede puppetmaster Nybegynder
23. juli 2002 - 12:40 #9
Men jeg skal stadigvæk loope gennem recordset'et før det lukkes... :(
Avatar billede tmceu Praktikant
23. juli 2002 - 13:27 #10
Nu vi er ved Microsoft's anbefalinger, har de også gennem flere år anbefalet at man ikke anvender Access på nettet overhovedet. Så hvorfor lægge større betydning i den ene anbefaling fremfor andre?

Men der er en god artikel om disconnectede recordsets her: http://www.4guysfromrolla.com/webtech/080101-1.shtml

Der er nogle ulemper ved denne fremgangsmåde, specielt ift. opdatering, som også berøres i 2. del af artiklen.
Avatar billede kichian Nybegynder
23. juli 2002 - 15:12 #11
Selvfølgelig vil Microsoft da helst have at man bruger SQL Server. Access er jo licensfri.. Og kan kun håndtere 30? samtidige brugere.
Ved at bruge server-side cursore sammen med Access falder performence gevaldigt.
Derfor læs data og disconnect. Ret data, forbind og opdater.

Men. Alle nyere demo-applikationer fra Microsoft (Durmawish? bookstore og andre) der skal vise "best-practice" bruger disconnectede recordsets. Så det er et anvendt programerings-mønster.
Udover det giver god performence.
Avatar billede tmceu Praktikant
23. juli 2002 - 15:47 #12
Access er bestemt ikke licensfri og at mange tager sig den frihed at betragte den som dette, er en helt anden sag.

Jeg mener bare at det er lidt pudsigt at fremhæve sit argument med at Microsoft anbefaler det og samtidig give et eksempel der anvender Access som samme Microsoft direkte anbefaler ikke at bruge.

Jeg kender også godt de nye demo applikationer og har deltaget i stort set samtlige MSDN arrangementer helt tilbage fra man næsten ikke kunne stave til .NET, ligesom jeg også deltog i Developer Days i februar.

Vi kan alle blive enige om disconnectede recordsets performance fordele, men det største problem med denne fremgangsmåde som også er blevet nævnt ved alle disse events, er at håndtere flere samtidige opdateringer. Jeg ved godt at dette spørgsmål går på performance, men jeg synes at man skylder at nævne en væsentlig ting som dette.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester