/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
dbConnection
Fra : Andreas Slot-Henriks~


Dato : 19-05-03 21:38

Hej.

Jeg har lavet en sep. include-fil, som ser sådan ud:
-------- start --------
Function DBconnect()
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.Open "DSN=TestDB"
End Function

Function DBdisconnect()
MyConn.Close
Set MyConn = Nothing
End Function
-------- slut --------

Hvis jeg så i en anden asp-fil laver en "include file" eller "include
virtual" og
dernæst kalder funktionen sådan:

-------- start --------
Call DBconnect()

strSQL = "SELECT * FROM tblTestInfo;"

Set rsMyTest = Server.CreateObject("ADODB.Recordset")
rsMyTest.Open strSQL, MyConn, adOpenKeyset

rsMyTest.Close
Set rsMyTest = Nothing

Call DBdisconnect()

-------- slut --------

....så virker det ikke, og jeg får at vide, at argumenterne når jeg
åbner rsMyTest er ugyldige. Derimod hvis jeg skriver samme
kode ind i stedet for at hente den via en funktion - så virker det
perfekt:

-------- start --------
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.Open "DSN=TestDB"

strSQL = "SELECT * FROM tblTestInfo;"

'Her defineres og åbnes et Recordset
Set rsMyTest = Server.CreateObject("ADODB.Recordset")
rsMyTest.Open strSQL, MyConn, adOpenKeyset

rsMyTest.Close
Set rsMyTest = Nothing

MyConn.Close
Set MyConn = Nothing
-------- slut --------

- hvad er der galt?

Det skal lige bemærkes, at jeg ganske få gange har fået min
funktion til at virke - men det skulle jo helst virke HVER gang.


mvh.
Andreas



 
 
Jens Gyldenkærne Cla~ (19-05-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 19-05-03 21:55

Andreas Slot-Henriksen skrev:

> rsMyTest.Open strSQL, MyConn, adOpenKeyset

Den er linjen herover der fejler, ikke?

Har du inkluderet en fil der definerer konstanten adOpenKeyset?
(adovbs.inc eller noget lignende)


> ...så virker det ikke, og jeg får at vide, at argumenterne når
> jeg åbner rsMyTest er ugyldige.

Virker koden (eller fejler den et andet sted) hvis du fjerner
", adOpenKeyset" fra linjen?

NB: Prøv at læse <http://asp-faq.dk/article/?id=41> om hvordan man
bedst får hjælp i gruppen her. En præcis fejlmeddelelse er blandt
andet ret vigtig (giv evt. et link til siden).

Artiklen om Option Explicit er også værd at læse:
<http://asp-faq.dk/article/?id=9>
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Andreas Slot-Henriks~ (24-05-2003)
Kommentar
Fra : Andreas Slot-Henriks~


Dato : 24-05-03 06:25

Hej Jens.

Du må undskyld mit sene svar, men jeg kom lige akut en tur på "Krankenhaus"
med en ret alvorlig borelia-infektion... Så nu har jeg rigtig tid til at
ligge med den bærbare og skrive lidt asp.

> > rsMyTest.Open strSQL, MyConn, adOpenKeyset
>
> Den er linjen herover der fejler, ikke?
Ja, det er det! Helt præcist får jeg følgende fejl:
Microsoft OLE DB Provider for ODBC Drivers fejl '80004005'

[Microsoft][ODBC Microsoft Access-driver] Microsoft Jet-databasemotoren kan
ikke åbne filen "(ukendt)". Den er allerede åbnet med udelt adgang af en
anden bruger, eller du skal have tilladelse til at vise dataene.

/banner_funktion.asp, line 37

(Hvor linie 37 er den linie, du spørger til...)

Jeg filmæssigt er der midlertidig fuld adgang til alle. Databasen er ikke
åbnet af andre, og jeg har heller ikke åbnet det i et andet script uden at
lukke det igen.

Det underlige af det hele er, at jeg pludselig i går heller ikke kunne åbne
databaseadgangen (samme fejl) ved at skrive koden direkte ind i scriptet,
det har ellers virket upåklageligt i lang tid, men ikke længere:
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.Open "DSN=TestDB"
......kode.....
MyConn.Close
Set MyConn = Nothing


> Har du inkluderet en fil der definerer konstanten adOpenKeyset?
> (adovbs.inc eller noget lignende)
Ja, jeg har både prøvet med og uden "adovbs" - men den skal inkluderes
for at resten af scriptet virker.

> Virker koden (eller fejler den et andet sted) hvis du fjerner
> ", adOpenKeyset" fra linjen?
Nej, desværre. Jeg har også forsøgt med adOpenDynamic osv.
- men det hjælper ikke!

Jeg har også forsøgt med "Option Explicit" og har "naturligvis" også
erklæret mine variabler.


> NB: Prøv at læse <http://asp-faq.dk/article/?id=41> om hvordan man
> bedst får hjælp i gruppen her. En præcis fejlmeddelelse er blandt
> andet ret vigtig (giv evt. et link til siden).
....ganske gode hints...! Jeg har desværre ikke et link endnu - jeg tester
siden på min egen win2k-server.


mvh.
Andreas



Jens Gyldenkærne Cla~ (24-05-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 24-05-03 10:12

Andreas Slot-Henriksen skrev:

> Du må undskyld mit sene svar, men jeg kom lige akut en tur på
> "Krankenhaus" med en ret alvorlig borelia-infektion...

Alt forladt - der er ingen tidsfrist på hvornår man skal/bør/må
svare på et indlæg.


> [Microsoft][ODBC Microsoft Access-driver] Microsoft
> Jet-databasemotoren kan ikke åbne filen "(ukendt)".

Noget tyder på at din connection ikke er i orden. Hvordan ser den
linje ud der etablerer forbindelsen til MyConn?

(Hvis der indgår variable i sætningen, så udskriv den samlede
connectionstreng med response.write)
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Voller (20-05-2003)
Kommentar
Fra : Voller


Dato : 20-05-03 06:49

"Andreas Slot-Henriksen" <andreas.s-h@mail.dk> skrev...
> Function DBconnect()
> Function DBdisconnect()

Jeg ved ikke om et gør nogen forskel i dit tilfælde, men jeg ville ikke
bruge en funktion til at åbne en DB med. Så vidt jeg ved, så er det
meningen, at funktioner skal behandle noget input og returnere en værdi. Det
skal Sub's til gengæld ikke:

Sub OpenDB()
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.Open "DSN=TestDB"
End Sub

Sub CloseDB()
MyConn.Close
Set MyConn = Nothing
End Sub

Som sagt: Jeg ved ikke om det gør den store forskel, men ifølge mit hoved
ville det være mere korrekt at bruge sub's. Ret mig, hvis jeg tager fejl.




Mvh. Voller.



Jens Gyldenkærne Cla~ (20-05-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 20-05-03 10:56

Voller skrev:

> Som sagt: Jeg ved ikke om det gør den store forskel, men
> ifølge mit hoved ville det være mere korrekt at bruge sub's.

Du har helt ret. En funktion er beregnet til at returnere en værdi
- det er ikke tilfældet her.

Men det gør - som du selv er inde på - ingen forskel i praksis.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jens Gyldenkærne Cla~ (20-05-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 20-05-03 11:00

Andreas Slot-Henriksen skrev:

> Function DBconnect()
> Set MyConn = Server.CreateObject("ADODB.Connection")
> MyConn.Open "DSN=TestDB"
> End Function


Jeg kom lige til at tænke på: Du bruger ikke Option Explicit, vel?
Muligvis er problemet at de variable du erklærer inde i din
funktion er lokale variable - derfor kan de ikke ses uden for
funktionen (eller proceduren hvis det var sådan en).

Bruger man Option Explicit er man tvunget til at erklære alle
variable - her bliver det tydeligt hvilket scope en variabel har.
Prøv at starte med at skrive "Dim MyConn", ovenover din funktion.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Andreas Slot-Henriks~ (08-06-2003)
Kommentar
Fra : Andreas Slot-Henriks~


Dato : 08-06-03 21:33

Hejsa...

> Jeg kom lige til at tænke på: Du bruger ikke Option Explicit, vel?
Jo, det gør jeg. Ellers er det ikke til at holde styr på sine variabler.

Jeg har i mellemtiden fundet ud af, at koden virker perfekt, hvis jeg
flytter den over på en anden PC. Jeg tror, den PC, jeg brugte til det i
starten
har noget i udu, når man laver en connection til db'en. Det er lige meget,
om jeg laver en DSN-less forbindelse eller ej. Det vil bare ikke virke.
Jeg har win2k pro - og har nu geninstalleret sp3 samt mdac 2.6sp1 og
efterfølgende mdac 2.7 - men jeg kan ikke få den til at virke igen.

Jeg får følgende fejl når jeg åbner db forbindelsen:

Microsoft OLE DB Provider for ODBC Drivers fejl '80040e21'
ODBC-driver understøtter ikke de ønskede egenskaber.
/artikler.asp, line 69

---- CLIP -----
63 strDSN = "DRIVER={Microsoft Access Driver
(*.mdb)};DBQ="&Server.MapPath("db/MyTestDb.mdb")
64 Set myConn = Server.CreateObject("ADODB.Connection")
65 myConn.Open strDSN
66
67 ' Skaber et recordset udfra SQL strengen
68 Set rs = Server.CreateObject("ADODB.Recordset")
69 rs.Open strSQL, myConn, adOpenKeyset
---- CLIP ----

Nogle idéer om, hvad der er gået galt på maskinen? Som nævt virker det
fint på andre maskiner. Jeg har også forsøgt med andre velfungerende sites,
men
det giver desværre samme fejl på denne ene PC.


mvh.
Andreas



Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408946
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste