Hmmmm... konstig fråga, men om jag har fattat dig rätt så ska PatrikB:s zPaging II göra det du begär, dvs läsa in allt genom getRows().
http://script.webforum.nu/wf/Forum1/HTML/000063.html
------------------
Peter D
16 svar · 277 visningar · startad av Lukaspojken
Hur skulle man kunna strukturera upp alla databashämtningar på en viss del i koden, dvs att man samlar alla databashämtningar på en plats och använder variabler sen?
------------------
Alltid lär man sig något nytt varje dag...
Hmmmm... konstig fråga, men om jag har fattat dig rätt så ska PatrikB:s zPaging II göra det du begär, dvs läsa in allt genom getRows().
http://script.webforum.nu/wf/Forum1/HTML/000063.html
------------------
Peter D
Känner att jag är lite otydlig men det känns lite som databasavdelning i koden är en ny sak kanske. Ska försöka exemplifiera vad jag menar.
Jag har 5 databashämtningar/SQL-frågor på en sida.
Databasavdelning
Set Connect = Server.CreateObject("ADODB.Connection")
SQL-fråga 1
Array1
SQL-fråga 2
Array 2
...
SQL-fråga 5
Array 5
Connect.Close
Set Connect = nothing
Efter att jag gjort alla hämtningar i databasavdelningen så kan jag bara nu använda mig av arrays. En databasavdelning borde öka prestandan.
Ska försöka exemplifiera hur jag gör idag:
Html-kod
Set Connect = Server.CreateObject("ADODB.Connection")
SQL-fråga 1
array1
Connect.Close
Set Connect = nothing
HTML-kod och använda array1
Set Connect = Server.CreateObject("ADODB.Connection")
SQL-fråga 2
array2
Connect.Close
Set Connect = nothing
etc.
När man arbetar på ett sådant här sätt utan en databasavdelning så förlorar man väldigt mycket prestanda eftersom man får återskapa connect 5 gånger. Med en databasavdelning så räcker det med att skapa connect 1 gång och sen behöver man den inte mer. Förstår du hur jag menar?
------------------
Alltid lär man sig något nytt varje dag...
Japp, jag förstår ... men vad var frågan (du tycks ju ha besvarat den själv) ??
------------------
Peter D
jag vet inte, men det känns lite som att du vill gå över ån för vatten. mitt förslag är som följer:
skapa ditt connection-objekt så sent som möjligt innan första användning. låt sedan det objekt vara levande, och förstör det så fort som möjligt efter sista användning.
det känns väldigt onödigt att skapa och förstöra objekt i onödan på detta sätt.
du kan visserligen baka ihop allt högst upp på sidan om du vill, och därmed vinna en del i struktur på sidan. jag, till exempel, blir gääälen när jag går igenom kod som är huller om buller.
dock får man tänka på att det kan ju faktiskt vara lättare att förstå vad man håller på med om sql-frågor ställs i anslutning till dess användning.
det är inte nu du ska veta vad du håller på med, utan sedan, när du glömt vad du hållt på med nu.
endast en amatörs synpunkter.
mvh,
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
can i borrow your goat?
</A>
Man kan ju kommentera array längre ner där den används likt
array1 'strSQL = "Select * blabla"
Anledningen för att jag tänker på en databasavdelning är att jag vill baka in så mycket på en sida som möjligt. Men det kan nog ligga något i det du säger @nders att en sådant databasavdelning skulle göra andra helt gällna när de såg en sådan....:)
Pace: Jag tänkte lite mer programmeringsmässigt hur den översta skulle se ut. Skulle nån liknande main variant fungera med case-satser?
------------------
Alltid lär man sig något nytt varje dag...
Om du förklarar exakt vad du vill plocka ut så är det nog lättare för oss/mig att förstå.
------------------
Peter D
Håller med @nders.
Skapa ett connection objekt precis innan du öppnar databasen för första hämtningen och stäng det direkt efter sista hämtningen.
Svaret har du från Emission i ditt inlägg: http://cgi.webforum.nu/wf/Forum11/HTML/005366.html
en funktion som kan inkluderas på alla sidor som behöver komma åt dbn.
cya,
PatrikB
------------------
*Det tar sig sa han som hade eld i håret*
Jag förstår dock inte skillnaden på min sub och funktionen...vad är det för bra att ha en funktion så som emission har. varför inte ha en sub som jag? förstår inte riktigt...:)
------------------
Alltid lär man sig något nytt varje dag...
Tack vare dig gick jag igenom mina db-kopplingar och såg att jag kunde göra två av dessa kopplingar till statiska. Det var enormt smart att bygga upp statiska include-variabler (för tex dagens citat).
------------------
Alltid lär man sig något nytt varje dag...
Jag förstår dock inte skillnaden på min sub och funktionen...vad är det för bra att ha en funktion så som emission har. varför inte ha en sub som jag? förstår inte riktigt...:)
Fördelen är att man kan hämta in kopplingen precis när den behövs, och få den lokalt i den subrutin som anropar den. Med en sub måste man göra db-kopplingen global (alt. skapa kopplingen lokalt och låta subben öppna den), vilket också gör att man måste hålla reda på vad det är för koppling, och vad den heter. Måhända inget större problem, kan tyckas, men för mig är function-varianten den bästa.
Det bror väl lite på vad man skall ha ut. Angående ursprungsfrågan alltså...
Jag använder en liknande teknik i länksamlingen på bengan.com.
Öppnar connection
- Kör ut ett recordset till array (Getrows) med alla länkar i för den kategorin.
- Stänger recordsetet
- Kör ut ett recordset (ny tabell) till ny array med alla undermappar i den mapp man är i.
- Återanvänder samma recordset i en rekursiv funktion för att loopa ut navigeringen till en tredje array
- Stänger recordsetet.
Stänger connection
Loopar ut arrayen baklänges för navigeringen.
Loopar ut arrayen med undermappar.
Loopar ut arrayen med länkar.
För mig gjorde det här rätt mycket för prestandan. Om det sen är rätt eller inte vetefan :)
Men helt klart får man vara noga med att skriva lite förklaringar här o var. Jag tar även ut värdet i arrayen till en variabel innan utskrift så ser man lättare vad som är vad.
------------------
MvH
/Bengan
www.bengan.com | Brossans Räjser
"Better to be hated for who you are than loved for who you're not."
[Redigerat av Bengan den 24 jul 2001]
Behöver man inte göra en funktion global? Min sub ser ut så här:
Sub DB_koppling 'Databas-kopplingen istället för include
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=minDB.mdb"
End Sub
Hur skulle jag göra med en funktion om jag inte gör den global? Var sätter jag funktionen?
------------------
Alltid lär man sig något nytt varje dag...
Bengan: Det finns ett ställe i koden på ungefär 200 kodrader som db-kopplingen är öppen. Det är ett forum, när man klickar på ett huvudinlägg så ska det visas (en hämtning), huvudinlägget ska visas som länk (en annan hämtning), underinläggen ska visas (ytterligare en hämtning). Jag tror jag skulle kunna tjäna in lite prestanda där om jag gjorde alla tre hämtningar först och sen använde mig av variablerna.
------------------
Alltid lär man sig något nytt varje dag...
Ja, man får ju alltid väga in hur mycket effekt en optimering gör och i ditt fall skulle det nog kunna göra en del.
För mig gjorde det mycket. Tidigare användes gamla hederliga sättet att loopa och skriva ut recordseten direkt. Trots att jag hade databasen öppen så kort tid som möjligt så blev det en del kod att köra innan den stängdes...
När jag gick över till att använda getrows mm så minskade exekveringstiden med typ 300%, ännu mer vid rusningstrafik.
Gick iofs över till MySQL med sen så lite svårt att veta vilken skillnaden skulle vara nu.
------------------
MvH
/Bengan
www.bengan.com | Brossans Räjser
"Better to be hated for who you are than loved for who you're not."
Behöver man inte göra en funktion global?
Jo, en Function är alltid global (om den inte är en metod i en Class), men det resultat man får från den hamnar ju i det scope som den används i, dvs. om jag hämtar in kopplingen i en sub, så finns den bara där (om man inte dimmat kopplingen utanför subbarna). Prestandamässigt är det en försumbar vinst, men det ger mer kontroll.
Den stora prestandaförlusten är den ständigt uppkopplade databasen, och det löser man genom getrows, eller ännu smidigare med CursorLocation=adUseClient.
Så med en sub har jag connection öppen hela filen rakt igenom?
Jag förstår fortfarande inte riktigt men jag litar på dig emission. Ska använda mig av en sådan funktion istället.
------------------
Alltid lär man sig något nytt varje dag...