Hej,
Jag har en länkad databas (Btrieve) via odbc. I mitt asp-skript kopplar jag via ett DSN-namn som finns på servern. Problemet kommer när jag ska plocka artiklar av en viss typ (~5500 st) i en select-box. Vad jag än testar med för tricks, vanligt recordset eller getrows, så tar det ca 20 s. Vilket jag tycker är för mycket. Om jag testar direkt i Access (Btrieve-db länkas med samma DSN) så går det blixtsnabbt.
Finns det någon som har något bra tips på förändring som jag borde göra?
con1.Open "DSN=PULAGER"
artikelTyp="KK"
' SELECT Artikel -------------------------------
rs.open "SELECT D1001_Artikelkod FROM PULAGER WHERE D1011_Artikeltyp='"& artikelTyp &"'", con1
f = rs.GetRows()
set rs=nothing
rader= ubound(f,2)
'response.Write rader
'response.Flush
artS = "<select name='artnummer'>"
For kol=0 to rader
nr = f(0,kol)
artS = artS & "<option>"& nr &"</option>" &vbcrlf
next
artS = artS &"</select>"
Detta är koden (med getrows) tar ca 20 s. Kan ni utveckla det där med cacha och indexera.
1. Försök att deklarera alla dina variabler som du använder.
2. Indexera din databas (då främst på D1011_Artikeltyp)
3. Använd cache vid andra hämtningen och förstör cachen när innehållet i PULAGER ändras. Du kan exempelvis spara hela din dropdown i application(), eller en textfil eller liknande.
Jag har inte jobbat med Btrieve så jag kan inte säga hur du skapar ett index eller om det ens går, men sök i din manual så hittar du det säkert.
Tack Brimba för svar men...
1. tror inte det hjälper men jag ska testa
2. Indexera en affärssystemsdatabas känner jag inte för att göra. Men jag ska undersöka det.
3. Cachning, var gör man detta? I Btrieve eller i webservern? Det är väl svårt att få webservern att känna ifall tabellen har ändrats (flera gånger per dag) eller inte.
Om du lagrar innehåller i exempelvis application("arts") så när du sedan uppdaterar innehåller i databasen så sätter du application("arts") till tomt. Och när du skall hämta från databasen kontrollerar du först om application("arts") är tom eller inte. Om den är tom så fyller du på den (tar 20 sekunder), om den inte är tom så hämtar du den från application("arts") vilket borde gå betydligt fortare.
Detta förutsätter naturligtvis att du uppdaterar din tabell via webben där du kommer åt application().
Om du inte gör det så kanske det inte är jättenoga att det sker på sekunden och därför kan du exempelvis cacha den delen i exempelvis 60 minuter. Då sker det en uppdatering en gång per timma.
Tiden kan du kontrollera på samma sätt, så när du sätter application("arts") så sätter du även application("artsLastUpdate") och om den är större än 60 minuter jämfört med vad klockan är nu så uppdaterar du, annars låter du den vara.
Lycka till!
275 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25