webForumDet fria alternativet

Klass-problem

4 svar · 245 visningar · startad av Skarre

SkarreMedlem sedan apr. 20012 427 inlägg
#1
<%
Class HitsDisplay

	Private Function GetConnection()
		Set conn = Server.CreateObject("ADODB.Connection")
		conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\test.mdb;"
		GetConnection = conn
	End Function

	Private Sub Class_Initialize()
		Set objConn = GetConnection()
		objConn.Open()
		objConn.Close()
	End Sub
	
End Class
%>

Kan man inte tilldela en öppen databaskoppling till en instans av en klass, eller gör jag fel någonstans?

Feltyp:
Körningsfel i Microsoft VBScript (0x800A01A8)
Objekt krävs.: '[string: "Provider=Microsoft.J"]'
/counter/counter/test.asp, line 12

@ndersMedlem sedan juni 200032 969 inlägg
#2

Är det inte ett objekt du ska returnera från GetConnection()? Använd då Set.

PatrikBMedlem sedan mars 20002 836 inlägg
#3

Ser lite "bökig" ut och rätt stel ut för att vara en class.

Beroende på vad du vill göra skulle jag börja med att bygga en db-wrapper class som sedan skickas in som en referens i varje klass i applikationen man utvecklar.

En enkel dbwrapper klass som kan byggas ut mer för bättre funktionalitet:

Class ADOWrapper

	Private m_cnn		' As ADODB.Connection
	Private m_connString	' As String

	Public Property Let ConnectionString(ByVal sConnString)
		m_connString = sConnString
	End Property
	Public Property Get ConnectionString()
		ConnectionString = m_connString
	End Property

	Public Sub OpenConnection()
		m_cnn.Open ConnectionString
	End Sub

	Public Sub CloseConnection()
		m_cnn.Close
	End Sub

	Public Function GetRecordset(ByVal query) ' As Recordset
		Set GetRecordset = GetConnection().Execute(query)
	End Function

	Public Function GetDbRows(ByVal query) ' As Variant
		Dim rst
		Set rst = GetRecordset(query)
			If rst.EOF Then
				GetDbRows = null
			Else
				GetDbRows = rst.GetRows(-1)
			End If
		Set rst = Nothing
	End Function

	Private Sub Class_Initialize()
		Set m_cnn = Server.CreateObject("ADODB.Connection")
	End Sub

	Private Function GetConnection() ' As ADODB.Connection
		Set Getconnection = m_cnn
	End Function

	Private Sub Class_Terminate()
		Set m_cnn = Nothing
	End Sub
End Class

En annan klass:

Class HitDisplay

	Private m_wrapper	' As ADOWrapper

	Public Sub SetWrapper(ByRef oWrapper)
		Set m_wrapper = oWrapper
	End Sub

	Public Function GetSomething() ' As Recordset
		Dim querySomething	' As String

		querySomething = "SELECT * FROM SomeTable"

		Set GetSomething = GetWrapper().GetRecordset(querySomething)
	End Function

	Public Function GetOther() ' As Variant
		Dim queryOther	' As String

		queryOther = "SELECT * FROM OtherTable"

		GetOther = GetWrapper().GetDbRows(queryOther)
	End Function

	Private Sub Class_Initialize()
		Set m_wrapper = New ADOWrapper
	End Sub

	Private Function GetWrapper() ' As ADOWrapper
		Set GetWrapper = m_wrapper
	End Function

	Private Sub Class_Terminate()
		Set m_wrapper = Nothing
	End Sub
End Class

sedan i din asp sida:

Dim objWrapper		' As ADOWrapper
Dim objHD		' as HitDisplay

Set objWrapper = New ADOWrapper
	objWrapper.ConnectionString = "MyConnectionString"
	Call objWrapper.OpenConnection()

	Set objHD = new HitDisplay
		Call objHD.SetWrapper(objWrapper)

		varyHD = objHD.GetOther()
	Set objHD = Nothing

	Call objWrapper.CloseConnection()
Set objWrapper = Nothing

typ, ngt sådant ......

självklart måste du inkludera klasserna i asp-sidan :e

cya,
PatrikB

SkarreMedlem sedan apr. 20012 427 inlägg
#4

@nders skrev:

Är det inte ett objekt du ska returnera från GetConnection()? Använd då Set.

Självklart. Tack så mycket! :)

SkarreMedlem sedan apr. 20012 427 inlägg
#5

PatrikB skrev:

Ser lite "bökig" ut och rätt stel ut för att vara en class.

Syftet var naturligtvis inte att skapa den ultimata databasklassen utan att ta reda på vad jag gjorde för fel. När jag postar om ett problem underlättar jag gärna för folk som eventuellt kan hjälpa mig, genom att bara posta den kod som är absolut relevant.

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