Avatar billede kimlarsen1978 Nybegynder
21. januar 2003 - 13:48 Der er 8 kommentarer og
2 løsninger

Åbning af flere RecordSet

Hej jeg har et problem med nogle RecordSets. Hvorfor får jeg en "File Allready in use" fejl når jeg forsøger at åbne 2 RecordSet i på den samme side?
Det ser sådan her ud:
---------------
Dim conn
conn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=d:\Inetpub\wwwroot\xxxx\xxx.mdb" '; uid=; pw=;"

  set rs = Server.CreateObject("ADODB.Recordset")
  Sql = "Select count(*) as Found from Billeder Where Lillebillede <> null"
  rs.Open Sql, conn, adLockOptimistic
  Session("Ialt") = rs("found")

********Noget kode***************

  Set rs2 = Server.CreateObject("ADODB.Recordset")
  Sql2 = "Select * FROM Billeder Where Lillebillede <> null"
  rs2.Open Sql2, conn, adLockOptimistic

********Noget kode***************

  Set rs3 = Server.CreateObject("ADODB.Recordset")
  Sql3 = "Select * FROM Varer Where ID=" & id & " ORDER BY ID DESC"
  rs3.Open Sql2, connStr, adOpenKeyset, adLockOptimistic
-------------
Jeg får så omtalte fejl på linien der begynder med "rs2.Open"... Og udkommentere jeg det så får jeg den på  "rs3.Open"... HVORFOR ????????
Avatar billede keysersoze Ekspert
21. januar 2003 - 13:51 #1
du skal ikke create flere connections på en side - kun én

gør sådan i stedet (bare tilpasset dig selvfølgelig);

Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("database.mdb")

SQL = "SELECT ....;"
Set rs = Conn.Execute(SQL)

SQL2 = "SELECT ....;"
Set rs2 = Conn.Execute(SQL2)

SQL3 = "SELECT ....;"
Set rs3 = Conn.Execute(SQL3)
Avatar billede kimlarsen1978 Nybegynder
21. januar 2003 - 14:12 #2
Ja, men giver det ikke en masse problemer med alle de connections? Jeg "reloader" siden pr. 8 sekund for at får et nyt billede frem. og der er 3 sider ved siden af hinaden i nogle rammer, så det giver jo en del connections - og hvad nu hvis fx. 5 brugere sidder på siden samtidig så er det jo 5*3 sider der reloader hvert 8 sekund. Vil det ikke give problemer?
Avatar billede keysersoze Ekspert
21. januar 2003 - 14:30 #3
alt hvad du laver på en hjemmeside vil jo belaste....

bruger du ovenstående kode - eller bare generelt alt med database-conn - skal du jo huske at lukke forbindelsen bagefter med;

conn.Close
Set conn = Nothing

så vil det selvfølgelig belaste at du skal lave 3 sql'er, men husker du at lukke din forbindelse vil det hjælpe noget på det. Endelig _kan_ det jo være at man kan nøjes med to eller én sql
Avatar billede kimlarsen1978 Nybegynder
21. januar 2003 - 14:43 #4
Ja, det kan godt være jeg kan korte én af, men hvordan tæller jeg poster i DB'en hvis ikke det er på denne måde?:
------------
*******noget kode*********
Sql = "Select count(*) as Found from Billeder Where Lillebillede <> null"
Set rs = Conn.Execute(Sql)
Session("Ialt") = rs("found")
*******Mere kode*********
--------------
Avatar billede kimlarsen1978 Nybegynder
21. januar 2003 - 14:49 #5
Jeg er lidt "bange" for at bruge:
----
SQL = "SELECT ....;"
Set rs = Conn.Execute(SQL2)
----
For jeg ved ikke om man ikke blokerer for hinanden? Kan kan "Conn.Execute(SQL2)" med adOpenKeyset, adLockOptimistic bagefter?
Avatar billede keysersoze Ekspert
21. januar 2003 - 14:55 #6
du kan sagtens counte - det var bare en hurtigt eksempel på at du ikke behøver at bruge Server.CreateObject hver gang
Avatar billede kimlarsen1978 Nybegynder
21. januar 2003 - 16:21 #7
Nu kan jeg se du bruger denne:
--------
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("database.mdb")
---------
er den bedre end den jeg bruger som er:
--------
<!--#include file="adovbs.inc" -->
<%
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=d:\Inetpub\wwwroot\xxxxx.dk\xxxx.mdb; uid=; pw=;"
Set Conn = Server.CreateObject("ADODB.Connection")

Conn.Open strDSN, adLockReadOnly, adLockOptimistic
%>
-----------
eller har det ingen betydning?
Avatar billede keysersoze Ekspert
21. januar 2003 - 16:28 #8
det er bedre at bruge jet-provideren end access-driveren

jet er den egentlige database hvorimod access kun er en frontend til databasen jet, så bruger du accessdriveren går du først til access og så i jet - på den anden måde går du direkte i jet
Avatar billede kimlarsen1978 Nybegynder
21. januar 2003 - 16:56 #9
Fedt nok :-)
Men jeg har forsøgt at bruge den sådan her men det går ikke ....
-------
strDSN = "Provider={Microsoft.Jet.OLEDB.4.0;} DBQ=d:\Inetpub\wwwroot\xxxx\xxxx.mdb; uid=; pw=;"
-------
PS. ang det oprindelige spørgsmål, så har jeg rettet hele sitet til Conn nu vil jeg lige prøve at køre sitet på en række maskiner samtidig og se hvordan det går. Det kører fint på denne maskine med fx. 5 browservinduer åbne, men det gjorde det gamle også *g*
Avatar billede kimlarsen1978 Nybegynder
14. maj 2003 - 16:28 #10
Det virker nu delvis med din løsning
Vi deler OK?
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