05. marts 2004 - 08:12Der er
18 kommentarer og 1 løsning
Class der skal bruges i en anden Class ?
Hey,
Jeg sider med 2 klasser hvoraf den ene indeholde diverse functions/subs til database brug, den anden indeholder functions/subs til visning af diverse indhold på en asp side.
Men hvordan laver jeg forbindelsen imellem de to klasser så jeg kan åbne min database klasse i min anden klasse ?
hmm ... bliver lidt usikker på hvad du egentlig er på jagt efter. Du skriver godt nok i VB kategorien, men du nævner også asp. Dine klasser ligger i en dll ? eller er det "asp klasser"
Mine klasser ligger i en dll den ene klasse indeholder database ting som connect, select, update osv. I den anden klasse har jeg lavet nogle functioner der skal generere html tabeller disse skal så vises på en asp side med udtræk fra database men jeg kan ikke finde ud af at åbne min database klasse i min tabel klasse ?
------------------------------------------------------------------------------------- Database Klasse : ------------------------------------------------------------------------------------- '--- Declare variabler med private for at sikre '--- at disse kun er tilgængelige i klassen. Private Rs As ADODB.Recordset Private Conn As ADODB.Connection Private strSql Private strDate Private Language
'--- Sub til at åbne database denne sættes til '--- Public så den kan nåes udefra. Public Sub DbConnect() Set Conn = New ADODB.Connection Conn.Open "DSN=xxx; UID=xxx; PWD=xxx;" End Sub
'--- Sub til at lukke database. Public Sub DestroyConn() If IsObject(Conn) = True Then Conn.Close Set Conn = Nothing End If End Sub
'--- Sub til at lukke recordset. Public Sub DestroyRs() If IsObject(Rs) = True Then Rs.Close Set Rs = Nothing End If End Sub
'--- Function der eksikvere sql select forspørgelser. Public Function SqlGet(ByVal strSql As String) On Error GoTo ErrorHandle Dim strArray As Variant Set Rs = Conn.Execute(strSql) If Not (Rs.BOF Or Rs.EOF) Then strArray = Rs.GetRows() SqlGet = strArray Else SqlGet = "Der er intet at vise på denne side !" End If Exit Function ErrorHandle: SqlGet = "Der opstod en fejl på siden, prøv igen senere !" End Function
'--- Function der eksikvere sql Insert, Update, Delete forspørgelse. Public Function SqlPut(ByVal strSql As String) Dim TransGood As String Dim TransBad As String Conn.BeginTrans On Error GoTo ErrorHandle Conn.Execute (strSql) Conn.CommitTrans TransGood = "Database operationen gik igennem !" SqlPut = TransGood Exit Function ErrorHandle: Conn.RollbackTrans TransBad = "Database operationen gik ikke igennem !<br>Beskrivelse : " & Err.Description & "" SqlPut = TransBad End Function
------------------------------------------------------------------------------------- Tabel klasse : ------------------------------------------------------------------------------------- Public Function genTableShow(TableWidth As Variant, TableSpacing As Integer, TableClass As String, td1Class As String, td2Class As String, AspPage As String, FormButton As String, rec_CustomerId As String, rec_Firm As String, rec_Contact As String, rec_Email As String, rec_Phone As String, rec_Action As String) Dim Show As String Show = "" Show = Show & "<table width=""" & TableWidth & """ cellspacing=""" & TableSpacing & """ class=""" & TableClass & """>" Show = Show & "<tr>" Show = Show & "<td bgcolor=""#CCCCCC"" class=""" & td1Class & """>" & rec_CustomerId & "</td>" Show = Show & "<td bgcolor=""#CCCCCC"" class=""" & td1Class & """>" & rec_Firm & "</td>" Show = Show & "<td bgcolor=""#CCCCCC"" class=""" & td1Class & """>" & rec_Contact & "</td>" Show = Show & "<td bgcolor=""#CCCCCC"" class=""" & td1Class & """>" & rec_Email & "</td>" Show = Show & "<td bgcolor=""#CCCCCC"" class=""" & td1Class & """>" & rec_Phone & "</td>" Show = Show & "<td bgcolor=""#CCCCCC"" class=""" & td1Class & """>" & rec_Action & "</td>" Show = Show & "</tr>" Show = Show & "<form method=""POST"" action=""" & AspPage & """>" Show = Show & "<tr>" Show = Show & "<td class=""" & td2Class & """></td>" Show = Show & "<td class=""" & td2Class & """></td>" Show = Show & "<td class=""" & td2Class & """></td>" Show = Show & "<td class=""" & td2Class & """></td>" Show = Show & "<td class=""" & td2Class & """></td>" Show = Show & "<td class=""" & td2Class & """>" Show = Show & "<input type=""button"" value=""Vis"" name=""Show"" class=""" & FormButton & """> " Show = Show & "<input type=""button"" value=""Ret"" name=""Edit"" class=""" & FormButton & """> " Show = Show & "<input type=""button"" value=""Slet"" name=""Delete"" class=""" & FormButton & """>" Show = Show & "</td>" Show = Show & "</tr>" Show = Show & "</form>" Show = Show & "</table>"
Ka' du ikke bare oprette et objekt fra den første klasse? Det er sådan jeg plejer at gøre; f.eks. hvis klasserne hedder Class1 og Class2, og du ønsker at bruge Class1 i Class2: Private NytObjektFraClass1 as Class1 .... Set NytObjektFraClass1 = New Class1
Jeg håber ovenstående gi'r dig en ide om hvordan du kan gøre. Det er ikke anderledes end hvis du bruger andre objekter i dine klasser.
Dim objMyClass : Set objMyClass = Server.CreateObject( "MyDLL.Class1" ) Dim strMyFunction : strMyFunction = objMyClass.myFunction() Response.Write( strMyFunction )
Class1:
Public Function myFunction() As String Dim objMyOtherClass: Set objMyOtherClass = New Class2 myFunction = objMyOtherClass.myOtherFunction() End Function
Class2:
Function myOtherFunction() As String myOtherFunction = "dette er en tekst" End Function
Ok jeg har tilføjet følgende til min tabel klasse :
Public Function genTableShow(TableWidth As Variant, TableSpacing As Integer, TableClass As String, td1Class As String, td2Class As String, AspPage As String, FormButton As String, rec_CustomerId As String, rec_Firm As String, rec_Contact As String, rec_Email As String, rec_Phone As String, rec_Action As String) Dim Show As String Show = "" Show = Show & "<table width=""" & TableWidth & """ cellspacing=""" & TableSpacing & """ class=""" & TableClass & """>" Show = Show & "<tr>" Show = Show & "<td class=""" & td1Class & """>" & rec_CustomerId & "</td>" Show = Show & "<td class=""" & td1Class & """>" & rec_Firm & "</td>" Show = Show & "<td class=""" & td1Class & """>" & rec_Contact & "</td>" Show = Show & "<td class=""" & td1Class & """>" & rec_Email & "</td>" Show = Show & "<td class=""" & td1Class & """>" & rec_Phone & "</td>" Show = Show & "<td class=""" & td1Class & """>" & rec_Action & "</td>" Show = Show & "</tr>" Show = Show & "<form method=""POST"" action=""" & AspPage & """>" Dim varTableArray As String varTableArray = objConn.SqlGet("Select CustomerId, Firm, Contact, Email, Phone From tbl_Customer Order By CustomerId Desc") Dim iRecFirst As String Dim iRecLast As String iRecFirst = LBound(varTableArray, 2) iRecLast = UBound(varTableArray, 2) Dim Record For Record = iRecFirst To iRecLast Show = Show & "<input type=""hidden"" name=""CustomerId"" value=""" & varTableArray(0, Record) & """>" Show = Show & "<tr>" Show = Show & "<td class=""" & td2Class & """>" & varTableArray(0, Record) & "</td>" Show = Show & "<td class=""" & td2Class & """>" & varTableArray(1, Record) & "</td>" Show = Show & "<td class=""" & td2Class & """>" & varTableArray(2, Record) & "</td>" Show = Show & "<td class=""" & td2Class & """>" & varTableArray(3, Record) & "</td>" Show = Show & "<td class=""" & td2Class & """>" & varTableArray(4, Record) & "</td>" Show = Show & "<td class=""" & td2Class & """>" Show = Show & "<input type=""button"" value=""Vis"" name=""Show"" class=""" & FormButton & """> " Show = Show & "<input type=""button"" value=""Ret"" name=""Edit"" class=""" & FormButton & """> " Show = Show & "<input type=""button"" value=""Slet"" name=""Delete"" class=""" & FormButton & """>" Show = Show & "</td>" Show = Show & "</tr>" Next Show = Show & "</form>" Show = Show & "</table>"
genTableShow = Show End Function
Altså vil jeg nu lave et træk fra databasen kan i fortælle mig hvad jeg skal til føje for at få det til at virke ?
slo>> dit eksempel giver følgende fejl : Compile Error: Invalid Outside Sub
nute>> Hvis jeg tilføjer denne :
Public Function getConn() As String Dim objConn Set objConn = New DbConn getConn = objConn End Function
Får jeg denne fejl : Compile Error: Expected Array
er det din 'DbConn' klasse returnere ? Det lyder lidt usandsynligt at den returnere en String ... er det ikke en Connection den skal returnere ??
Public Function getConn() As Connection Dim objConn Set objConn = New DbConn getConn = objConn End Function
desuden er det meget svært at kunne gennemskue dine compile errors når vi ikke har fuld kildekode (som jeg hellere ikke vil have her inde)
Du stiller et specifikt spm angående at kalde en klasse fra en anden. jeg har postet et forslag til hvad du kan gøre. Har du testet dette ? Kører det ikke ?
Du har den fulde kilde kode ovenfor både til min database klasse og til min tabel klasse har jeg lige postet og hvis det er for lidt point får du blot flere :o)
Men jeg skal jo bruge alle functions subs fra da klassen og ikke kun en af dem ?
Håber ikke jeg stiller for mange dumme spørgsmål for så må du endelig sige til :o)
Ok så langt så godt nu brokker den sig ikke over min function med import af database klassen men så får jeg den fejl med Expected Array og det er i denne line :
iRecFirst = LBound(varTableArray, 2)
Er det så ikke fordi den ikke har fat i databasen og den derfor ikke kan lave arrayet ?
Den forsøger jeg at trække fra denne sql forspørgelse :
varTableArray = objConn.SqlGet("Select CustomerId, Firm, Contact, Email, Phone From tbl_Customer Order By CustomerId Desc")
Hvor SqlGet er en function fra min database klasse.
Og dermed må den jo ikke få fat i min database ? Jeg har testet det på en almindelig asp side og der skriver den fint ud på siden så der er noget databasen.
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.