SkarreMedlem sedan apr. 20012 427 inlägg <%
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 Är det inte ett objekt du ska returnera från GetConnection()? Använd då Set.
PatrikBMedlem sedan mars 20002 836 inlägg 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
@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
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.