webForumDet fria alternativet

Fråga angående connections

ASP

12 svar · 264 visningar · startad av Melitta

Medlem sedan sep. 2003448 inlägg
Frågan#1

Har en liten fråga angående access databaser och connections till dessa.
Använde fram tills i fredags detta:

"Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../mp_foto.mdb") & ";"

Som fungerade alldeles utmärkt och då kunde jag även öppna fler än en anslutning till databasen. I fredags sa denna connectionstring uppsig och jag får bara ett felmedelande där det står att databasen reda används.

Nu har jag bytt connectionstring till följande:

"Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& Server.MapPath("../mp_foto.mdb") & ";"

Problemet nu är bara det att jag inte kan öppna fler än en anslutning till databasen itaget. Nån som vet vad som gäller med dom olika stringarna och om det är möjligt att öppna fler än en anslutning med Jet.OLEDb eller om detta enbart går med den tidigare nämda stringen?

Har sökt i forumet men inte hittat svar på detta och ni får ursäckta min taskiga stavning, är lite dålig på den biten :)
Tacksam för svar.

Medlem sedan juni 20003 076 inlägg
#2

Kan bara inte förstå varför du vill öppna fler gånger än 1 i taget.
Är detta av nån speciell anledning?
Det går bra att använda en connection till flera saker samtidigt.

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& Server.MapPath("../mp_foto.mdb") & ";"

Set objRs1 = objConn.execute("select ...")
Set objRs2 = objConn.execute("select ...")
objConn.execute("Insert Into ...")
...
Medlem sedan dec. 20003 887 inlägg
#3

Melitta skrev:

Problemet nu är bara det att jag inte kan öppna fler än en anslutning till databasen itaget. Nån som vet vad som gäller med dom olika stringarna och om det är möjligt att öppna fler än en anslutning med Jet.OLEDb eller om detta enbart går med den tidigare nämda stringen?

Skillnaden mellan dessa två är att den övre är ODBC och den undre är Ole Db. Det är rekommenderat att använda sig utav OleDb, eftersom inget stöd längre ges för ODBC även om det fungerar att använda den. Ole Db är däremot bättre och normalt snabbare. Ditt problem kan dock bero på att du öppnar databasen i fel mode. Det kan kanske lösa sig om du gör så här

Provider=Microsoft.Jet.OleDb.4.0; Data Source=" & Server.MapPath("../mp_foto.mdb") & "; Mode=Share Deny None;"
Medlem sedan sep. 2003448 inlägg
#4

Engine^
När jag kör med det du föreslog får jag bara ett felmedelande som säger:

Microsoft JET Database Engine error '80004005'

Could not lock file.

/statistik.asp, line 9

Nån aning om vad som menas?

Medlem sedan juni 20003 076 inlägg
#5

Lite nyfiken bara, men varför öppna flera gånger? :)

Medlem sedan dec. 20003 887 inlägg
#6

Hmm... ett sånt däringa otrevligt fel (80004005).

Det jag kommer att tänka på såhär är att du kan ju öppna databasen i Access och gå in under Tools -> Options -> Advanced och kontrollera att Shared är markerad som Default open mode. Jag är lite tveksam till att det skulle vara felet, men kolla för säkerhets skull ;)

Medan du ändå har Access öppet så kan du passa på att köra Tools -> Database Utilities -> Compact and Repair Database...

Medlem sedan sep. 2003448 inlägg
#7

jo för att jag har en loop i en annan loop som (jag tror) kräver två öppningar eftersom att jag hämtar information ifår samma databas på 2 olika ställen samtidigt, jag är alltså helt ny på asp så tills jag lärt mig mer fungerade detta utmärkt tills i fredags och då gav det bara upp, sidan har legat upp orörd med den kod som finns nu i ca 1 månad.
Jäklarns så rörigt det vart nu *s*

Medlem sedan sep. 2003448 inlägg
#8

Engine^
Gjorde det aldeles nyss och där i är shared markerad.. Körde en Compact and Repair men når samma resultat iaf, mappen som databaserna ligger i har skrivbehörighet och liknande så där finns det inget problem som jag kan se heller..

Medlem sedan juni 20003 076 inlägg
#9

Melitta, du behöver inte öppna mer än 1 gång i så fall.
Så fort du har öppnat databasen 1 gång så har du tillgång till alla tabeller.
Skapa bara flera recordsets. :)

Medlem sedan sep. 2003448 inlägg
#10

doggelito
men hur gör jag då? Med risk för att verka dum :)

Det som ligger i Connections/action_mpfoto.asp

<%
' FileName="Connection_ado_conn_string.htm"
' Type="ADO" 
' DesigntimeType="ADO"
' HTTP="false"
' Catalog=""
' Schema=""
Dim MM_action_mpfoto_STRING
MM_action_mpfoto_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../../mp_foto.mdb") & "; Mode=Share Deny None;"
%>

och resten :)

<!--#include file="../Connections/action_mpfoto.asp" -->
<!--#include file="encode.asp" -->
<%
Dim senaste__MMColParam
senaste__MMColParam = "1"
If (Request.querystring("id") <> "") Then 
  senaste__MMColParam = request.querystring("id")
End If
%>
<%
Dim senaste
Dim senaste_numRows

Set senaste = Server.CreateObject("ADODB.Recordset")
senaste.ActiveConnection = MM_action_mpfoto_STRING
senaste.Source = "SELECT * FROM dagbok WHERE refid = " + Replace(senaste__MMColParam, "'", "''") + " ORDER BY datumtid DESC"
senaste.CursorType = 3
senaste.CursorLocation = 3
senaste.LockType = 1
senaste.Open()

senaste_numRows = 0
%>
<%
Dim kolla__MMColParam
kolla__MMColParam = "1"
If (Request.querystring("id") <> "") Then 
  kolla__MMColParam = Request.querystring("id")
End If
%>
<%
Dim kolla__MMColParam1
kolla__MMColParam1 = "1"
If (request.querystring("visa") <> "") Then 
  kolla__MMColParam1 = request.querystring("visa")
End If
%>
<%
Dim kolla
Dim kolla_numRows

Set kolla = Server.CreateObject("ADODB.Recordset")
kolla.ActiveConnection = MM_action_mpfoto_STRING
kolla.Source = "SELECT *  FROM dagbok  WHERE refid = " + Replace(kolla__MMColParam, "'", "''") + " AND id = " + Replace(kolla__MMColParam1, "'", "''") + "  ORDER BY datumtid DESC"
kolla.CursorType = 0
kolla.CursorLocation = 2
kolla.LockType = 1
kolla.Open()

kolla_numRows = 0
%>
<%
Dim user__MMColParam
user__MMColParam = "1"
If (Request.QueryString("id") <> "") Then 
  user__MMColParam = Request.QueryString("id")
End If
%>
<%
Dim user
Dim user_numRows

Set user = Server.CreateObject("ADODB.Recordset")
user.ActiveConnection = MM_action_mpfoto_STRING
user.Source = "SELECT * FROM user WHERE id = " + Replace(user__MMColParam, "'", "''") + ""
user.CursorType = 0
user.CursorLocation = 2
user.LockType = 1
user.Open()

user_numRows = 0
%>
<%
senaste.pagesize = 20
page = request.QueryString("sida")

if page = "" then 
page = 1
end if %>

Om nån orkar kan ni väll visa det här för jag gersnart upp och kastar data f*n genom nått genomskinligt :) Nä men ärligt, jag bli tossig snart juh

Medlem sedan dec. 20003 887 inlägg
#11

Prova använda dig av

Set senaste.ActiveConnection = MM_action_mpfoto_STRING
Set kolla.ActiveConnection = MM_action_mpfoto_STRING
Set user.ActiveConnection = MM_action_mpfoto_STRING

Jag ser då inget annat i din kod, som skulle vara felaktigt.

Medlem sedan juni 20003 076 inlägg
#12

Hm, automatiskt genererad dreamweaver-kod, va trevligt! :)
Jag vill inte ändra i din befintliga kod för då kan dw flippa ur,
men så här gör jag för att ge ett exempel:

inc_database.asp
-------------------------------------------------------

' Öppning av databas =============================================
Public Function get_connection()
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.CursorLocation = 3
objConn.CommandTimeout = 180
objConn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../../mp_foto.mdb") & "; Mode=Share Deny None;"
Set get_connection = objConn
Set objConn = Nothing
End Function

' Skapa ett recordset =============================================
Public Function get_recordset(strSql)
	Dim objConn, objRs
	Set objConn = get_connection()
	Set objRs = Server.CreateObject("ADODB.Recordset")
	objRs.CursorLocation = 3
	objRs.Open strSql, objConn, 3, 1
	objRs.ActiveConnection = Nothing
	Set get_recordset = objRs
	Set objRs = Nothing
	Set objConn = Nothing
End Function

dinsida.asp
----------------------------------------------------------------
<!--#include virtual="/scripts/inc_database.asp" -->

<%
Dim objRs

Set objRs = get_recordset("select * from tabell")
response.write objRs(0)
Set objRs = Nothing

Set objRs = get_recordset("select * from tabell2")
response.write objRs(0)
Set objRs = Nothing

%>

rent och snyggt samt minimalt med kod, förstår du? :)

Medlem sedan sep. 2003448 inlägg
#13

super, tack så hemskt mycket :)
Sa ju att jag var ny på detta :)

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)