webForumDet fria alternativet

Connection Function lr ngt...

5 svar · 184 visningar · startad av JE

JEMedlem sedan juni 2000144 inlägg
#1

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

Rad 80:

OpenDB

------------------
/JE

[Redigerat av JE den 16 maj 2001]

PatrikBMedlem sedan mars 20002 836 inlägg
#2

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

[/r]

cya,
PatrikB

------------------
*Det tar sig sa han som hade eld i håret*

[Redigerat av PatrikB den 16 maj 2001]

JEMedlem sedan juni 2000144 inlägg
#3

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!

------------------
/JE

[Redigerat av JE den 16 maj 2001]

PatrikBMedlem sedan mars 20002 836 inlägg
#4

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]

Vad var det du inte hängde med på?

cya,
PatrikB

------------------
*Det tar sig sa han som hade eld i håret*

[Redigerat av PatrikB den 16 maj 2001]

JEMedlem sedan juni 2000144 inlägg
#5

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.

Ska exprimentera vidare =)

------------------
/JE

PatrikBMedlem sedan mars 20002 836 inlägg
#6

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 är bara att i global.asa lägga in connectionstringen i en application variabel =P

Sub Applicatio_OnStart
Application("minConnString") = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=x:\db-dir\db-file.mdb"
End Sub

Nästa fråga:
Det med properties har du kanske använt dig av mot andra object, tex connection objectet:

....
objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=x:\db-dir\db-file.mdb"
objConn.Open
....

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:

'## -- tilldela egenskapen connectionstring ett värde --
objConnClass.ConnectionString = Application("minConnString")

När jag sedan behöver använda mig av connection strängen inne i min klass så behöver jag bara anropa den med:

ConnectionString

eller ute på asp sidan:

objConnClass.ConnectionString

tills nästa ggn,

cya all l8er
PatrikB

------------------
*Det tar sig sa han som hade eld i håret*

[Redigerat av PatrikB den 16 maj 2001]

134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)