Avatar billede websam Nybegynder
19. februar 2004 - 11:34 Der er 12 kommentarer og
2 løsninger

Class der ikke helt vil som jeg gerne vil have den til ?

Hejsa

Jeg har følgende class der skal lave database forbindelse sql forspørgelse og lukning af object's men mit array ser ikke helt ud til at virke her kommer kode :

<%
Class DataBaseFunctions
    '--- Declare variabler.
    Public Rs
    Public Conn
   
    '--- Sub til at åbne database.
    Public Sub Init
        If isobject(Conn) = False Then
            Set Conn = Server.CreateObject("ADODB.Connection")
            Set Rs = Server.CreateObject("ADODB.Recordset")
            Conn.ConnectionString = "DSN=xxx; UID=xxx; PWD=xxx"
            Conn.Open
        End If
        Response.Write "Database Åbnet<br>"
    End Sub

    '--- Sub til at lukke database og recordset.
    Public Sub Destroy
        If isobject(Rs) = True then
            Rs.Close
            Set Rs = nothing
        End If
 
        If isObject(Conn) = true then
            Conn.Close
            Set Conn = nothing
        End If
        Response.Write "Lukker for databsae og recordset<br>"
    End Sub

    '--- Function der eksikvere sql forspørgelse.
    Public Function SQL(strSQL)
        Dim strArray
        Set Rs = Conn.Execute(strSQL)
        strArray = Rs.GetRows()
        Response.Write "Viser træk fra database<br>"
    End Function
End Class
%>

På min side laver jeg så følgende :

<%Option Explicit%>
<HTML>
<HEAD>
<!-- #INCLUDE File="DbClass.asp" -->
</HEAD>
<BODY>
<%
Dim db, strArray
Set db = new DataBaseFunctions
db.Init
db.SQL "SELECT Top 10 * FROM tblCount"

intLastRow = Ubound(strArray, 2)
intLastCol = Ubound(strArray, 1)
For IntRow = 0 To intLastRow
    For IntCol = 0 To intLastCol
        Response.Write strArray(intCol, intRow)&" "
    Next
    Response.Write"<br>"
Next

db.Destroy
Set db = Nothing
%>
</BODY>
</HTML>

Men jeg får denne fejl hvilket antyder at jeg ikke får mit array med ud af functionen i min class ?

Error Type:
Microsoft VBScript runtime (0x800A000D)
Type mismatch: 'Ubound'

Hvilket er i denne linie :

intLastRow = Ubound(strArray, 2)

Er der en venlig sjæl der vil/kan hjælpe med det ?

/Websam
Avatar billede Spotgun Seniormester
19. februar 2004 - 11:43 #1
Umiddelbart tror jeg problemet ligger i din SQL-function...

    Public Function SQL(strSQL)
        Dim strArray
        Set Rs = Conn.Execute(strSQL)
        strArray = Rs.GetRows()
        Response.Write "Viser træk fra database<br>"
    End Function

Den returnerer jo aldrig noget, burde den ikke returnere dit array?
Prøv at rette den til:

    Public Function SQL(strSQL)
        Dim strArray
        Set Rs = Conn.Execute(strSQL)
        strArray = Rs.GetRows()
        Response.Write "Viser træk fra database<br>"
        SQL = strArray
    End Function

Og så skal du nok også rette dit kald til funktionen. Kunne forestille mig at det var noget ala det her:

strArray = db.SQL "SELECT Top 10 * FROM tblCount"
Avatar billede steen Nybegynder
19. februar 2004 - 11:44 #2
Mangler du ikke at erklære din strArray uden for funktion men inde i klasse?

<%
Class DataBaseFunctions
    '--- Declare variabler.
    Public Rs
    Public Conn
    Public strArray
   
    '--- Sub til at åbne database.
    Public Sub Init
        If isobject(Conn) = False Then
            Set Conn = Server.CreateObject("ADODB.Connection")
            Set Rs = Server.CreateObject("ADODB.Recordset")
            Conn.ConnectionString = "DSN=xxx; UID=xxx; PWD=xxx"
            Conn.Open
        End If
        Response.Write "Database Åbnet<br>"
    End Sub

    '--- Sub til at lukke database og recordset.
    Public Sub Destroy
        If isobject(Rs) = True then
            Rs.Close
            Set Rs = nothing
        End If
 
        If isObject(Conn) = true then
            Conn.Close
            Set Conn = nothing
        End If
        Response.Write "Lukker for databsae og recordset<br>"
    End Sub

    '--- Function der eksikvere sql forspørgelse.
    Public Function SQL(strSQL)
        Dim strArray
        Set Rs = Conn.Execute(strSQL)
        strArray = Rs.GetRows()
        Response.Write "Viser træk fra database<br>"
    End Function
End Class
%>

På min side laver jeg så følgende :

<%Option Explicit%>
<HTML>
<HEAD>
<!-- #INCLUDE File="DbClass.asp" -->
</HEAD>
<BODY>
<%
Dim db, strArray
Set db = new DataBaseFunctions
db.Init
db.SQL "SELECT Top 10 * FROM tblCount"

intLastRow = Ubound(strArray, 2)
intLastCol = Ubound(strArray, 1)
For IntRow = 0 To intLastRow
    For IntCol = 0 To intLastCol
        Response.Write strArray(intCol, intRow)&" "
    Next
    Response.Write"<br>"
Next

db.Destroy
Set db = Nothing
%>
</BODY>
</HTML>
Avatar billede nmh Nybegynder
19. februar 2004 - 11:44 #3
Kune det ikke tænkes, at du ikke får noget indlæst i strArray
med din getrows-ordre?
Avatar billede nmh Nybegynder
19. februar 2004 - 11:48 #4
Ubound vil kun virke, hvis du faktisk har et array af den rigtige type.
Det er også den fejlmeddelelse, du får.
Avatar billede websam Nybegynder
19. februar 2004 - 11:53 #5
Spotgun >>
Med det du skriver får jeg denne fejl :
Error Type:
Microsoft VBScript compilation (0x800A0401)
Expected end of statement
/ClassTest/DbClassTest.asp, line 11, column 18
strArray = db.SQL "SELECT Top 10 * FROM tblCount"

steen >>
Din ide giver den samme fejl :
Error Type:
Microsoft VBScript runtime (0x800A000D)
Type mismatch: 'Ubound'
/ClassTest/DbClassTest.asp, line 15

nmh >>
Du tænker sikkert på om der er noget i min tabel men det er der for hvis jeg bare laver en rs.movefirst istedet for et array så viser den første record fra databasen
Avatar billede steen Nybegynder
19. februar 2004 - 12:00 #6
Lige et forsøg mere...
<%Option Explicit%>
<HTML>
<HEAD>
<!-- #INCLUDE File="DbClass.asp" -->
</HEAD>
<BODY>
<%
Dim db, strArray
Set db = new DataBaseFunctions
db.Init
db.SQL "SELECT Top 10 * FROM tblCount"
strArray = db.strArray
intLastRow = Ubound(strArray, 2)
intLastCol = Ubound(strArray, 1)
For IntRow = 0 To intLastRow
    For IntCol = 0 To intLastCol
        Response.Write strArray(intCol, intRow)&" "
    Next
    Response.Write"<br>"
Next

db.Destroy
Set db = Nothing
%>
</BODY>
</HTML>
Avatar billede websam Nybegynder
19. februar 2004 - 12:03 #7
steen >> Så får jeg denne :
Error Type:
Microsoft VBScript runtime (0x800A01B6)
Object doesn't support this property or method: 'strArray'
/ClassTest/DbClassTest.asp, line 14
Avatar billede websam Nybegynder
19. februar 2004 - 12:08 #8
Ok jeg tager den i mig igen spotgun den virker når der kommer () rundt om min sql forspørgelse :

strArray = db.SQL("SELECT Top 10 * FROM tblCount")

/websam
Avatar billede steen Nybegynder
19. februar 2004 - 12:18 #9
En gang til:

<%
Class DataBaseFunctions
    '--- Declare variabler.
    Public Rs
    Public Conn
    Public strArray
   
    '--- Sub til at åbne database.
    Public Sub Init
        If isobject(Conn) = False Then
            Set Conn = Server.CreateObject("ADODB.Connection")
            Set Rs = Server.CreateObject("ADODB.Recordset")
            Conn.ConnectionString = "DSN=xxx; UID=xxx; PWD=xxx"
            Conn.Open
        End If
        Response.Write "Database Åbnet<br>"
    End Sub

    '--- Sub til at lukke database og recordset.
    Public Sub Destroy
        If isobject(Rs) = True then
            Rs.Close
            Set Rs = nothing
        End If
 
        If isObject(Conn) = true then
            Conn.Close
            Set Conn = nothing
        End If
        Response.Write "Lukker for databsae og recordset<br>"
    End Sub

    '--- Function der eksikvere sql forspørgelse.
    Public Sub SQL(strSQL)
        Set Rs = Conn.Execute(strSQL)
        strArray = Rs.GetRows()
        Response.Write "Viser træk fra database<br>"
    End Sub
End Class
%>

På min side laver jeg så følgende :

<%Option Explicit%>
<HTML>
<HEAD>
<!-- #INCLUDE File="DbClass.asp" -->
</HEAD>
<BODY>
<%
Dim db, strArray
Set db = new DataBaseFunctions
db.Init
db.SQL "SELECT Top 10 * FROM tblCount"
strArray = db.strArray

intLastRow = Ubound(strArray, 2)
intLastCol = Ubound(strArray, 1)
For IntRow = 0 To intLastRow
    For IntCol = 0 To intLastCol
        Response.Write strArray(intCol, intRow)&" "
    Next
    Response.Write"<br>"
Next

db.Destroy
Set db = Nothing
%>
Avatar billede Spotgun Seniormester
19. februar 2004 - 12:19 #10
Virker det hele som det skal så, med mit forslag?
Avatar billede websam Nybegynder
19. februar 2004 - 12:31 #11
Jeps og hvilke muligheder det giver i forhold til objekt orienteret programmering det er for fedt :o) så du må gerne lige ligge et svar så er der point på vej :o)
Avatar billede Spotgun Seniormester
19. februar 2004 - 12:42 #12
Det var så lidt :)
Avatar billede websam Nybegynder
19. februar 2004 - 13:43 #13
Steen du får lige 20 point for din ihærdighed :o)

/Websam
Avatar billede steen Nybegynder
19. februar 2004 - 13:48 #14
Takker mange gange :)
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