Har gjort en class innehållandes en mängd funktioner. Eftersom flera av dessa funktioner ansluter till en databas gjorde jag en separat funktion för där databaskopplingen görs och öppnas samt en där den stängs. Fast det vill inte fungera. Vad gör jag för fel?
Class RecAdmin
Public Function OpenDB
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("database/rec.mdb")
objConn.Open strConnectionString
End Function
Public Function CloseDB
objConn.Close
Set objConn = Nothing
End Function
Public Function GetInfo(intID)
strSQL = "SELECT ProdID, Quantity, Color, Size FROM RecNr WHERE ProdID="& intID
OpenDB
Set objRS = objConn.Execute(strSQL)
If objRS.Eof Then
Set objRS = Nothing
CloseDB
Else
'skriver ut resultatet
End If
End Function
End Class
Felmeddelandet jag får när jag anropar GetInfo blir då:
Error Type:
Microsoft VBScript runtime (0x800A01A8)
Object required: 'objConn'
functions.asp, line 80
Du har dimmat objConn inne i functionen. Det innebär att den variabeln endast "lever" inne i den functionen
Själv gör jag på detta vis:
Class clsConn
Private m_objconn
Private m_strConnString
'## -- read/write properties starts here --
Public Property Let ConnectionString(ByVal sConnString)
m_strConnString = sConnString
End Property
Public Property Get ConnectionString
ConnectionString = m_strConnString
End Property
'## -- class methods starts here --
Public Sub Class_Initialize
'## -- create a db-connection object --
Set m_objConn = Server.CreateObject("ADODB.Connection")
End Sub
'## -- get a recordset --
Public Function GetInfo(intID) ' As Recordset
strSQL = "SELECT ProdID, Quantity, Color, Size FROM RecNr WHERE ProdID="& intID
Open
Set objRS = objConn.Execute(strSQL)
Set GetInfo = objRS
Set objRS = Nothing
Close
End Function
'## -- open connection --
Private Sub Open
m_objConn.Open ConnectionString
End Sub
'## -- close connection --
Private Sub Close
m_objConn.Close
End Sub
'## -- clean up --
Public Sub Class_Terminate
Set m_objConn = Nothing
End Sub
End Class
[r]
du skapar allt så här sedan:
Set objConnClass = New clsConn
objConnClass.ConnectionString = "din_connection_string"
Set objRS = objConn.GetInfo
If objRS.EOF Then
'visa ngt
Else
'skriv ut infon
End If
Set objRS = nothing
Set objConnClass = Nothing
Fick till fast jag gjorde bara så att jag la till "Public objConn" överst i klassen.
Class RecAdmin
Public objConn
Public Function OpenDB
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("database/rec.mdb")
End Function
Public Function CloseDB
objConn.Close
Set objConn = Nothing
End Function
Public Function GetInfo(intID)
strSQL = "SELECT ProdID, Quantity, Color, Size FROM RecNr WHERE ProdID="& intID
OpenDB
Set objRS = objConn.Execute(strSQL)
If objRS.Eof Then
Set objRS = Nothing
CloseDB
Else
'skriver ut resultatet
End If
End Function
End Class
Är det dumt att göra på detta sättet? Hängde inte med i din kod till 100%.
Aldrig använt klasser tidigare, håller på och lär mej så alla tips e välkommna =)
Hur som helst ska du ha stort tack för hjälpen PatrikB!
jo, visst kan man väl göra så som du gjort fast det blir ju lite mer dynamiskt med att ange ConnectionString i som en egenskap istället för att hårdkoda den =P
[r]
sedan så är din funktion GetInfo egentligen en sub och ingen funktion eftersom det inte "kommer" ut ett värde från den.
[/r]
ConnectionStringen vill jag faktiskt ha hårdkodad. Enklare att ändra på enbart ett ställe än på alla sidor som
använder klassen, lr?
Det jag inte riktigt hängde med på är denna del:
'## -- read/write properties starts here --
Public Property Let ConnectionString(ByVal sConnString)
m_strConnString = sConnString
End Property
Public Property Get ConnectionString
ConnectionString = m_strConnString
End Property
Antar att det har och göra med att du skickade med en ConnectionString. Fast vad koden gör har jag noll koll på hehe.
dvs, du tilldelar/skriver ConnectionString variabeln ett värde.
I class exemplet ovan så betyder:
Property Let betyder att du kan tilldela egenskapen (skriva) ett visst värde. Property Get hämtar detta värde åt dig vid ett senare tillfälle när du behöver det.
Exempel: