Avatar billede mrjowns Novice
20. december 2006 - 12:44 Der er 11 kommentarer og
1 løsning

Nemt - kalde sub i en function

Ihhh, hvor irriterende! Jeg har 2 sider:

default.asp indeholder
-----
<!--#include file="functions.asp" -->
<% call getBlogs() %>
-----

functions.asp indeholder
-----
<%
Public Sub openDB()
  If Not IsObject(objConn) Then
    Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "min connection string"
  End If
End Sub

Function getBlogs()
call openDB()
set rs = objConn.Execute("SELECT ...")
End Function
%>
-----

Når jeg så kører min default.asp så får jeg denne fejl:

Microsoft VBScript runtime error '800a01a8'
Object required: 'objConn'
/functions.asp, line 16

og min linie 16 indeholder:

set rs = objConn.Execute("SELECT ...")

så det er som om den slet ikke opfatter sub'en... Hvad gør jeg galt her?
Avatar billede softspot Forsker
20. december 2006 - 12:51 #1
Har du erklæret objConn udenfor funktionen openDB, for ellers findes den ikke i scopet for funktionen getBlogs.
Avatar billede fennec Nybegynder
20. december 2006 - 12:53 #2
Har du dim'et objConn globalt??

dim objConn '<-- Global

function enFunk()
dim objConn '<-- lokal

Hvis du slet ikke har <% Option Explicit %> med på din side, tilhører variabler kun lokalt i funktionerne.
Avatar billede softspot Forsker
20. december 2006 - 12:53 #3
Husk at lukke forbindelsen igen efter brug... :)

<%
dim objConn

Public Sub openDB()
  If Not IsObject(objConn) Then
    Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "min connection string"
  End If
End Sub

Function getBlogs()
call openDB()
set rs = objConn.Execute("SELECT ...")
End Function
%>
Avatar billede mrjowns Novice
20. december 2006 - 12:55 #4
DOH! ;)

Softspot - lægger du et svar!!?

Tak for hjælpen! :D
Avatar billede fennec Nybegynder
20. december 2006 - 12:55 #5
Og det bringer os så til at det anbefales altid at have <% Option Explicit %> med på dine sider, da det afsløre alle mulige småproblemer.
Avatar billede softspot Forsker
20. december 2006 - 12:55 #6
fennec >> "Hvis du slet ikke har <% Option Explicit %> med på din side, tilhører variabler kun lokalt i funktionerne.". Jeg er ikke enig i din definition, da option explicit blot kræver at du erklærer dine vaiable inden du kan bruge dem. Det tvinger dig så til at tage stilling til hvor de skal erklæres, men det kan også være fint nok at erklære dem lokalt i funktionen... :)
Avatar billede softspot Forsker
20. december 2006 - 12:56 #7
Velbekomme :)
Avatar billede softspot Forsker
20. december 2006 - 12:57 #8
Tak for point :)
Avatar billede fennec Nybegynder
20. december 2006 - 13:01 #9
softspot >>
Det har du ret i, men folk som ikke har Option Explicit med, dim'er generelt ikke deres variabler, og derfor bliver de lokale (som i dette tilfælde). Man kan selvfølgelig stadig overstyre det ver at erklære dem. I sidste sende anbefaler jeg stadig at have Option Explicit, da den fanger problemer som disse, samt stavefejl osv...
Avatar billede softspot Forsker
20. december 2006 - 13:05 #10
fennec >> Jeg er slet ikke uenig i at man bør benytte option explicit (ud over dine gode argumenter, giver det også en bedre performance), det var bare din definition jeg ikke kunne forliges med :)
Avatar billede fennec Nybegynder
20. december 2006 - 13:12 #11
softspot >>
Det var også en generalisering over for folk, som ikke bruger Option Explicit, og derfor præget heraf. Definitionen er derfor også misvisende. Men vi er enige :o)
Avatar billede softspot Forsker
20. december 2006 - 13:14 #12
fennec >> Det mente jeg også nok vi var - det plejer vi jo at være :)
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