23. juli 2002 - 10:12Der 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 %>
Brug af AI afslører de svagheder, virksomheder allerede har opbygget gennem års cloud-transformation, nye SaaS-løsninger og fragmenterede sikkerhedssystemer.
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!)
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.
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!
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
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?
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.
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.
Synes godt om
Ny brugerNybegynder
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.