lenizMedlem sedan aug. 2001676 inlägg Hej!
När jag kör en sql sats på följande sätt:
set rs = databas.execute(sql)
så stänger jag ju efter mig:
rs.close
set rs=nothing
Men om jag kör en sql sats på följande sätt:
databas.execute(sql)
då har jag ju inget att stänga (annat än databasen i slutet av filen).
Min fråga är hur en sida påverkas av många sql satser med t.ex. insert och update som körs med databas.execute(Sql)?
Är nämligen så att jag har en enkel statistik funktion som uppdaterar en sidas statistik varje gång den besöks. Det blir alltså en update eller en insert för varje besökare på varje sida. Det kanske inte låter som något problem men det finns över 800 sidor som har var sin statistik som ligger i samma access databas och det är många som tittar på dessa sidor (exakt hur många som tittar på sidorna exakt samtidigt vet jag inte). Är detta en rimlig förklaring till varför olika sidor ibland inte går att visa?
Mvh Lena
J.N.Medlem sedan apr. 20031 660 inlägg HEJ!
Detta är faktiskt enkelt, om man tänker efter. Vilket innebär att det tog några år även för mig att lista ut det.
När du kör INSERT, UPDATE, DELETE blir det inget rs, dvs då är set rs = databas.execute(sql) fel och databas.execute(sql) rätt.
Testa kör INSERT, och sedan stänga rs, då ska du få 'Operation is not allowed when the object is closed.'
Använd endast 'Databas.Close: Set Databas=nothing' alltså!
När ska man stänga rs då? När det finns. När finns det? Jo!
När du kör SELECT! Då är 'set rs = databas.execute(sql)' helt rätt, och rs och db-close helt rätt.
Eftersom jag inte vet om den koden du skriver är den du använder nämner bifogar jag lite finurliga funktioner:
Function open_db
Dim databas, rs, dbconn, sql
Set Databas = Server.Createobject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
dbconn = "driver=SQL Server; server=localhost; Database=aknet;UID=akql;PWD=akPCrM" 'utv
'dbconn = "driver=SQL Server; server=localhost; Database=wcom;UID=aksql;PWD=aWSl" 'live
Databas.Open dbconn
End Function
Function close_rs_db()
RS.close
Set RS=nothing
Databas.Close
Set Databas=nothing
End Function
Function Close_rs(byRef RS)
RS.Close
Set RS = Nothing
End Function
Function Close_db()
databas.Close
Set databas = Nothing
End Function
Detta läggs i lämplig includefil som du säkert redan har db-kopplingen i.
Den första kallas via 'Call open_db' överst i sidan, den 2:a och 4:e via 'Call close_rs_db()' resp 'Call close_db()' om man har standard-rs resp endast en db-koppling.
Den 3:e slutligen använder man till 'Call close_rs(RS3)', dvs den tar det som står inom () och stänger det.
Ang sidräknaren hade jag nog lagt det i en txt-fil istället, dock har du ju en del sidor att hålla reda på = många filer...
I vilket fall tror jag inte det ska påverka databasen.