Avatar billede plexx Nybegynder
25. maj 2004 - 01:17 Der er 24 kommentarer og
2 løsninger

Opret databaseforbindelse fra function eller sub

Hej eksperter.
Er det muligt at oprette en databaseforbindelse fra en function eller sub?

f.eks:
Function aabendatabaseforbindelse()
    Set db_noget = Server.CreateObject("ADODB.Connection")
    db_noget.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & databasemappe & "database.mdb"
End function

Hvis ja hvordan?
Avatar billede thesurfer Nybegynder
25. maj 2004 - 01:20 #1
funtion opendb()
Set Conn = Server.CreateObject("ADODB.Connection")
' Husk at angive den rigtige sti til din database
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/cgi-bin/database.mdb")
' Åben databaseforbindelsen
Conn.Open DSN
end function

function closedb()
' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
end function

<%
' noget kode...
opendb

' noget mere kode...

closedb

' osv
%>


asp kode taget fra: http://html.dk/tutorials/asp/lektion18.asp
Avatar billede plexx Nybegynder
25. maj 2004 - 01:24 #2
Det virker ikke
Avatar billede plexx Nybegynder
25. maj 2004 - 01:26 #3
Jeg får følgende fejlmeddelelse når jeg prøver at åbne et recordset:
Der opstod en Microsoft VBScript-kørselsfejl fejl '800a01a8'

Et objekt er obligatorisk: 'db_noget'

/kalender.asp, line 4
Avatar billede thesurfer Nybegynder
25. maj 2004 - 01:28 #4
smid din kode herind..
Avatar billede plexx Nybegynder
25. maj 2004 - 01:34 #5
---allesider.asp
<%
Databasemappe = "ER RIGTIG!!!"

Function aabendatabaseforbindelse()
    Set db_fjordnet = Server.CreateObject("ADODB.Connection")
    db_fjordnet.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & databasemappe & "database.mdb"
End Function

Function lukdatabaseforbindelse()
    On Error Resume Next
    db_fjordnet.close
    set db_fjordnet = Nothing
    if Err.Number > 0 then
        lukdatabaseforbindelse = "fejl: " & Err.Description
    else
        lukdatabaseforbindelse = "ok"
    end if
    Err.Clear
End Function
%>

---kalender.asp
<!--#include file="allesider.asp"-->
<%
aabendatabaseforbindelse()
db_fjordnet.close '<<<DENNE LINIE GIVER FEJLEN
response.write lukdatabaseforbindelse()
%>
Avatar billede thesurfer Nybegynder
25. maj 2004 - 01:43 #6
hvordan kan du få fejl, når du overhovedet ikke har "db_noget" nogen steder..?
Avatar billede thesurfer Nybegynder
25. maj 2004 - 01:44 #7
.og jeg forstår ikke helt logikken, i at åbne forbindelsen, og derefter lukke den med det samme..?
Avatar billede plexx Nybegynder
25. maj 2004 - 01:47 #8
1. Bemærk "Set db_fjordnet" ikke "Set db_noget" længere
2. Det er for at vise at der opstår en fejl så snart jeg prøver at gøre noget med objektet db_fjordnet
Avatar billede thesurfer Nybegynder
25. maj 2004 - 01:51 #9
Der er vel ingen grund til at have denne linien: db_fjordnet.close '<<<DENNE LINIE GIVER FEJLEN

når du lige efter har denne (som også lukker forbindelsen): response.write lukdatabaseforbindelse()

Det kunne jo være, at du lukker forbindelsen for hurtigt..
Avatar billede thesurfer Nybegynder
25. maj 2004 - 01:53 #10
..hvilken fejl får du nu, efter rettelserne?
Avatar billede plexx Nybegynder
25. maj 2004 - 01:55 #11
Fejl: Et objekt er obligatorisk: 'db_fjordnet'
/kalender.asp, line 4
Avatar billede thesurfer Nybegynder
25. maj 2004 - 01:56 #12
hmm.. prøv med "call" før funktionens navn:

call aabendatabaseforbindelse()
Avatar billede plexx Nybegynder
25. maj 2004 - 01:57 #13
hjælper ikke!
Avatar billede thesurfer Nybegynder
25. maj 2004 - 01:58 #14
prøv at erstatte "function" med "sub"..
Avatar billede plexx Nybegynder
25. maj 2004 - 01:59 #15
Har jeg prøvet, virker heller ikke!
Avatar billede thesurfer Nybegynder
25. maj 2004 - 02:04 #16
Her er noget fra et loginscript, jeg engang lavede:

<%
function dbopen()

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath(db_file)
Conn.Open DSN
end function

function dbclose()
Conn.Close
set rs = nothing
Set Conn = Nothing
end function
%>

funktionerne afvikles:
dbopen
dbclose
Avatar billede thesurfer Nybegynder
25. maj 2004 - 02:05 #17
eller, så du kan se, at jeg ikke lukker med det samme:

dbopen
strSQL = "select * xxxxxxxxxxxxxxxx" ' (censoreret)
set rs = conn.execute(strSQL)
Avatar billede vbcoder Nybegynder
25. maj 2004 - 08:00 #18
Det er ikke til at se det når det er mørkt og man er træt ;-)

jeg er sikker på at dine allesider.asp bruger databaseforbindelsen og derfor får du fejlen med objektet der mangler.

Du skal åbne dbforbindelse før du inkluderer alle sider. Desuden ser det ud som om du lukker db_fjordnet 2 gange. Anden gang er dog en response.write så ok

---allesider.asp
<%
Databasemappe = "ER RIGTIG!!!"

Function aabendatabaseforbindelse()
    Set db_fjordnet = Server.CreateObject("ADODB.Connection")
    db_fjordnet.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & databasemappe & "database.mdb"
End Function

Function lukdatabaseforbindelse()
    On Error Resume Next
    db_fjordnet.close
    set db_fjordnet = Nothing
    if Err.Number > 0 then
        lukdatabaseforbindelse = "fejl: " & Err.Description
    else
        lukdatabaseforbindelse = "ok"
    end if
    Err.Clear
End Function
%>

---kalender.asp
<%
aabendatabaseforbindelse()
%>
<!--#include file="allesider.asp"-->
<%
lukdatabaseforbindelse()
%>
Avatar billede vbcoder Nybegynder
25. maj 2004 - 08:02 #19
du behøver ikke at checke for fejl ved lukning af db

Function lukdatabaseforbindelse()
    'luk databasen
    db_fjordnet.close
    set db_fjordnet = Nothing

End Function
Avatar billede vbcoder Nybegynder
25. maj 2004 - 08:02 #20
et svar hvis det løste dit problem

//vbcoder
Avatar billede plexx Nybegynder
25. maj 2004 - 10:51 #21
Jeg fik det til at virke ved at bruge "Option Explicit":
---allesider.asp
<%
Option Explicit
Dim databasemappe, db_fjordnet
Databasemappe = "ER RIGTIG!!!"

Function aabendatabaseforbindelse()
    Set db_fjordnet = Server.CreateObject("ADODB.Connection")
    db_fjordnet.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & databasemappe & "database.mdb"
End Function

Function lukdatabaseforbindelse()
    On Error Resume Next
    db_fjordnet.close
    set db_fjordnet = Nothing
    if Err.Number > 0 then
        lukdatabaseforbindelse = "fejl: " & Err.Description
    else
        lukdatabaseforbindelse = "ok"
    end if
    Err.Clear
End Function
%>

---kalender.asp
<!--#include file="allesider.asp"-->
<%
aabendatabaseforbindelse()
response.write lukdatabaseforbindelse()
%>
Avatar billede plasmon Nybegynder
25. maj 2004 - 19:58 #22
kigger lige med
Avatar billede thesurfer Nybegynder
25. maj 2004 - 21:12 #23
plexx> hmm.. dvs, fejlen var at "db_fjordnet" ikke var dimmet..? Virker højst usandsynligt..

plasmon> Læs http://expfaq.1go.dk/?id=72#lytte_med -- ingen grund til "kigger lige med".. :-)
Avatar billede thesurfer Nybegynder
25. maj 2004 - 22:22 #24
plexx> Se lige starten af mit indlæg (indtil "Til tabellen er brugt:"): http://www.eksperten.dk/spm/502058#rid4625654
Avatar billede plexx Nybegynder
27. maj 2004 - 17:30 #25
Altså jeg fik først scriptet til at virke da jeg brugte Option Explicit og (dimmede)? db_fjordnet. Om det så kan have noget at gøre med at jeg brugte Server.Createobject("MSXML2.ServerXMLHTTP") til at fremkalde siden ved jeg ikke.
Avatar billede plexx Nybegynder
06. august 2004 - 22:27 #26
Da jeg selv fandt løsningen, snupper jeg selv pointene.
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