Tips: byt drivern mot microsoft.jet-providern i stället.
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("databas.mdb")
21 svar · 442 visningar · startad av Meng
Tjena jag håller på med en meny som också visar hur många poster det finns under varje meny, har nog byggt det hela rättså korkat men det verkar fungera i alla fall. Innan körde jag hela menyn som en include och nu när jag tog bort detta slutatde det hela fungera.. fick detta fel messet:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x1390 Thread 0x148c DBC 0x15ccffc Jet'.
/afd/afd-it/kategorimeny.asp, line 14
Koden för att räkna posterna är denna:
<%Set cn = Server.CreateObject("ADODB.Connection")
Cn.Open "driver={Microsoft Access Driver (*.mdb)};DBQ=" & server.mappath("db/opgave.mdb")
set rs = cn.execute("SELECT count(*) as antal FROM opgave WHERE kategori = '2' AND status <> '4' ")
Response.Write rs("antal")
rs.Close
Set rs = nothing
cn.close
Set cn=nothing%>
Den förekommer 7 ggr i varje meny och menyn finns i 7 olika versioner på kategorimeny.asp skilda med en if sats, kanske det som skapar problem?
Rad 14 är:
Cn.Open "driver={Microsoft Access Driver (*.mdb)};DBQ=" & server.mappath("db/opgave.mdb")
Tips: byt drivern mot microsoft.jet-providern i stället.
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("databas.mdb")
Plus att du saknar en '(' här: Cn.Open("drive...
Ja nu verkar det funka..
varje meny ser ut så här kan man inte göra det annorlunda?
<tr height="24">
<td background="../../include/images/meny_inaktive.gif" height="24"> </td>
<td background="../../include/images/meny_inaktive.gif" align="center" width="147" valign="middle" height="24" onmouseover="this.style.backgroundImage='url(../../include/images/meny_aktive_h.gif)'" onmouseout="this.style.backgroundImage='url(../../include/images/meny_inaktive.gif)'">
<a target="sgr2" href="opgave2.asp?do=inne&kat=2"><b>Software Install
<%Set cn = Server.CreateObject("ADODB.Connection")
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/opgave.mdb")
set rs = cn.execute("SELECT count(*) as antal FROM opgave WHERE kategori = '2' AND status <> '4' ")
Response.Write rs("antal")
rs.Close
Set rs = nothing
cn.close
Set cn=nothing%>
</b></a></td>
<td background="../../include/images/meny_inaktive.gif" height="24"> </td>
<td background="../../include/images/meny_inaktive.gif" align="center" valign="middle" width="147" height="24" onmouseover="this.style.backgroundImage='url(../../include/images/meny_aktive_h.gif)'" onmouseout="this.style.backgroundImage='url(../../include/images/meny_inaktive.gif)'">
<a target="sgr2" href="opgave2.asp?do=inne&kat=3"><b>Hardware Install
<%Set cn = Server.CreateObject("ADODB.Connection")
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/opgave.mdb")
set rs = cn.execute("SELECT count(*) as antal FROM opgave WHERE kategori = '3' AND status <> '4' ")
Response.Write rs("antal")
rs.Close
Set rs = nothing
cn.close
Set cn=nothing%>
</b></a></td>
<td background="../../include/images/meny_inaktive.gif" height="24"> </td>
<td background="../../include/images/meny_inaktive.gif" align="center" valign="middle" width="147" height="24" onmouseover="this.style.backgroundImage='url(../../include/images/meny_aktive_h.gif)'" onmouseout="this.style.backgroundImage='url(../../include/images/meny_inaktive.gif)'">
<a target="sgr2" href="opgave2.asp?do=inne&kat=4"><b>Software problem
<%Set cn = Server.CreateObject("ADODB.Connection")
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/opgave.mdb")
set rs = cn.execute("SELECT count(*) as antal FROM opgave WHERE kategori = '4' AND status <> '4' ")
Response.Write rs("antal")
rs.Close
Set rs = nothing
cn.close
Set cn=nothing%>
</b></a></td>
<td background="../../include/images/meny_inaktive.gif" height="24"> </td>
<td background="../../include/images/meny_inaktive.gif" align="center" width="60" valign="middle" height="24" onmouseover="this.style.backgroundImage='url(../../include/images/meny_aktive_ss.gif)'" onmouseout="this.style.backgroundImage='url(../../include/images/meny_inaktive.gif)'">
<a target="sgr2" href="opgave2.asp?do=inne&kat=5"><b>Virus
<%Set cn = Server.CreateObject("ADODB.Connection")
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/opgave.mdb")
set rs = cn.execute("SELECT count(*) as antal FROM opgave WHERE kategori = '5' AND status <> '4' ")
Response.Write rs("antal")
rs.Close
Set rs = nothing
cn.close
Set cn=nothing%>
</b></a></td>
<td background="../../include/images/meny_inaktive.gif" height="24"> </td>
<td background="../../include/images/meny_inaktive.gif" align="center" width="93" valign="middle" height="24" onmouseover="this.style.backgroundImage='url(../../include/images/meny_aktive_s.gif)'" onmouseout="this.style.backgroundImage='url(../../include/images/meny_inaktive.gif)'">
<a target="sgr2" href="opgave2.asp?do=inne&kat=6"><b>Oversigter
<%Set cn = Server.CreateObject("ADODB.Connection")
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/opgave.mdb")
set rs = cn.execute("SELECT count(*) as antal FROM opgave WHERE kategori = '6' AND status <> '4' ")
Response.Write rs("antal")
rs.Close
Set rs = nothing
cn.close
Set cn=nothing%>
</a></b></td>
<td background="../../include/images/meny_inaktive.gif" height="24"> </td>
<td background="../../include/images/meny_inaktive.gif" align="center" width="147" valign="middle" height="24" onmouseover="this.style.backgroundImage='url(../../include/images/meny_aktive_h.gif)'" onmouseout="this.style.backgroundImage='url(../../include/images/meny_inaktive.gif)'">
<a target="sgr2" href="opgave2.asp?do=inne&kat=7"><b>Lager & Oprydning
<%Set cn = Server.CreateObject("ADODB.Connection")
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/opgave.mdb")
set rs = cn.execute("SELECT count(*) as antal FROM opgave WHERE kategori = '7' AND status <> '4' ")
Response.Write rs("antal")
rs.Close
Set rs = nothing
cn.close
Set cn=nothing%>
</b></a></td>
<td background="../../include/images/meny_inaktive.gif" height="24"> </td>
<td background="../../include/images/meny_aktive_ss.gif" align="center" width="60" valign="middle" height="24" onmouseover="this.style.backgroundImage='url(../../include/images/meny_aktive_ss.gif)'" onmouseout="this.style.backgroundImage='url(../../include/images/meny_aktive_ss.gif)'">
<font color="#9E0056"><b>Alle
<%Set cn = Server.CreateObject("ADODB.Connection")
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/opgave.mdb")
set rs = cn.execute("SELECT count(*) as antal FROM opgave WHERE kategori = '1' AND status <> '4' ")
Response.Write rs("antal")
rs.Close
Set rs = nothing
cn.close
Set cn=nothing%>
</b></font></td>
<td background="../../include/images/meny_inaktive.gif" height="24"> </td>
</tr>
Allså så man bara öppnar databasen en gång och sen bara anger att det ska vara karegori = '1,2 osv.. ' på varje?
Hur ska det se ut?
Till att börja med kan du ju återanvända connectionobjektet. Det är himskans onödigt, och dumt, att stänga, destruera, skapa och öppna det hela tiden.
Jo det var ju det jag tänkte :e men hur gör man?
<%Set cn = Server.CreateObject("ADODB.Connection")
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/opgave.mdb")%>
I toppen och
<%set rs = cn.execute("SELECT count(*) as antal FROM opgave WHERE kategori = '2' AND status <> '4' ")
Response.Write rs("antal")
rs.Close
Set rs = nothing%>
på varje jag vill ha räknad och i botten:
<% cn.close
Set cn=nothing%>
Funkar detta?
Rättså ofta när jag uppdaterar, alltså inte varje gång får jag fel:
Microsoft JET Database Engine error '80004005'
The Microsoft Jet database engine cannot open the file 'c:\inetpub\wwwroot\afd\afd-it\db\opgave.mdb'. It is already opened exclusively by another user, or you need permission to view its data.
/afd/afd-it/kategorimeny.asp, line 52
Du har en tabell öppen i designläge i Access förmodligen
Nä den gör så bara man uppdaterar ibland.. finns det inget smartare sätt att räkna posterna?
Du kan plocka fram allt i en select-fråga.
SELECT Kategori, COUNT(*) AS Antal FROM opgave GROUP BY Kategori ORDER BY Kategori
hur skriver jag ut det då på sidan? RS(antal) ?
edit: Vad menar du med " SELECT Kategori, " de fältet har väl inget med saken att göra?
Ja, gör en vanlig loop och skriv ut kategorinummer och antal.
edit: Vad menar du med " SELECT Kategori, " de fältet har väl inget med saken att göra?
Hur ska du annars veta vilket antal som hör till vilken kategori :q
hum förstår inte riktigt hur du menar, i vilket fall måste jag ju göra en ny select 7 ggr på varje sida.
Va?
Varför då?
Med den SQL-fråga jag gav dig får du ett recordset som innehåller lika många poster som det finns kategorier.
Kategori Antal
--------------------
1 5
2 9
3 0
4 2
5 8
6 3
7 12
Vad är du ute efter?
förstår bara inte hur jag ska använda detta i min kod.. jag har 2 olka sidor också en som visar allt som inte har status<>"4" och en som visar status="4" och den ska ju räkna posterna på varje. kan du inte beskriva mer hur du tänkt att jag ska använda koden?
<%Set cn = Server.CreateObject("ADODB.Connection")
Cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/opgave.mdb"))
set rs = cn.execute("SELECT Kategori, COUNT(*) AS Antal FROM opgave GROUP BY Kategori ORDER BY Kategori")
Response.Write rs("antal")
rs.Close
Set rs = nothing
cn.close
Set cn=nothing%>
<%Set cn = Server.CreateObject("ADODB.Connection")
Cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/opgave.mdb"))
set rs = cn.execute("SELECT Kategori, COUNT(*) AS Antal FROM opgave GROUP BY Kategori [b]WHERE status <> '4'[/b] ORDER BY Kategori")
Det är ju bara att loopa precis som vanligt?
while not rs.eof
response.write "Kategori " & rs("Kategori") & ": " & rs("Antal") & "<br>"
rs.movenext
wend
Men varför kommer den upp o säger att databasen redan är öppen hela tiden? vi är 2 st som använder denna sidan men det borde väl inte vara några problem? Databasen är inte öppen i Access heller..
Microsoft JET Database Engine error '80004005'
The Microsoft Jet database engine cannot open the file 'c:\inetpub\wwwroot\afd\afd-it\db\opgave.mdb'. It is already opened exclusively by another user, or you need permission to view its data.
/afd/afd-it/kategorimeny.asp, line 8
Gjorde såhär nu:
<%Set cn = Server.CreateObject("ADODB.Connection")
Cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/opgave.mdb"))
set rs = cn.execute("SELECT Kategori, COUNT(*) AS Antal FROM opgave GROUP BY Kategori WHERE status <> '4' ORDER BY Kategori")%>
<a target="sgr2" href="opgave2.asp?do=inne&kat=2"><b>Software Install </b></a>
<%while not rs.eof
response.write "Kategori " & rs("Kategori") & ": " & rs("Antal") & "<br>"
rs.movenext
wend%>
<a target="sgr2" href="opgave2.asp?do=inne&kat=3"><b>Hardware Install</b></a>
<%while not rs.eof
response.write "Kategori " & rs("Kategori") & ": " & rs("Antal") & "<br>"
rs.movenext
wend%>
<% rs.Close
Set rs = nothing
cn.close
Set cn=nothing%>
som vanligt?
Jag har aldrig gjort något liknande innan... därför det är lite svårt.
Tog en print screen så kanske det blir tydligare hur jag vill göra.. :)
Nä, det blev inte direkt tydligare.
Jag har aldrig gjort något liknande innan...
Du har väl loopat data ur ett recordset förut?
WHERE skall dock vara före GROUP BY, det var jag som skrev fel. Varför du får felmeddelandet har jag ingen aning om dock.