Avatar billede websam Nybegynder
05. marts 2004 - 08:12 Der 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 ?

/Websam
Avatar billede nute Nybegynder
05. marts 2004 - 09:14 #1
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"

/nute
Avatar billede websam Nybegynder
05. marts 2004 - 09:21 #2
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 ?

Håber det hjælper lidt på forklaringen :o)

/Websam
Avatar billede websam Nybegynder
05. marts 2004 - 09:27 #3
Her følger udpluk af mine klasser :o)

-------------------------------------------------------------------------------------
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>"
   
    genTableShow = Show
End Function

Så er der lidt kode at kigge på

/Websam
Avatar billede slo Nybegynder
05. marts 2004 - 09:35 #4
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.
Avatar billede nute Nybegynder
05. marts 2004 - 09:36 #5
det er jo nemt nok:

asp side:

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

/nute
Avatar billede websam Nybegynder
05. marts 2004 - 09:48 #6
Ok jeg prøver lige at kigge på det vender tilbage efter test af dette.

/Websam
Avatar billede websam Nybegynder
05. marts 2004 - 09:58 #7
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

Hvad gør jeg forkert ?

/Websam
Avatar billede nute Nybegynder
05. marts 2004 - 10:09 #8
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 ?

hvordan ser din DbConn funktion ud ?

/nute
Avatar billede websam Nybegynder
05. marts 2004 - 10:26 #9
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)

/Websam
Avatar billede websam Nybegynder
05. marts 2004 - 10:29 #10
Og ja jeg er i fuld gang med at teste dit forslag ovenfor :o)

/Websam
Avatar billede nute Nybegynder
05. marts 2004 - 10:43 #11
undskyld ... denne linje:

Public Function getConn() As Connection

skal jo være:

Public Function getConn() As DbConn
Avatar billede websam Nybegynder
05. marts 2004 - 10:49 #12
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 ?

/Websam
Avatar billede nute Nybegynder
05. marts 2004 - 10:53 #13
jeg kender jo ikke indholdet af 'varTableArray', så det aner jeg da ikke ?!

fejlen går jo på at 'varTableArray' ikke er en array. hvor får du den fra ?

/nute
Avatar billede websam Nybegynder
05. marts 2004 - 10:56 #14
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.

/Websam
Avatar billede websam Nybegynder
05. marts 2004 - 11:02 #15
Nå jeg må smutte for nu jeg kigger ind senere :o)

/Websam
Avatar billede nute Nybegynder
05. marts 2004 - 11:10 #16
hmm ... du må passe på hvad du sender med tilbage. i din SQLGet har du denne linje:

SqlGet = "Der er intet at vise på denne side !"

hvis:

If Not (Rs.BOF Or Rs.EOF) Then

er false

(Den vil vel altid være false (i mit hovede). ). Du kan derfor ikke lave en LBound() på denne streng du sender med tilbage.

Men hvis du ved at din SQL skal returnere noget, så er det nok din if der driller. jeg ville ha skrevet den:

If ( Not Rs.EOF ) Then

/nute
Avatar billede websam Nybegynder
07. marts 2004 - 08:36 #17
Så så jeg langt om længe lyset i dette :o)

/Websam
Avatar billede websam Nybegynder
07. marts 2004 - 08:37 #18
Smid et svar nute så er der point på vej :o)

/Websam
Avatar billede nute Nybegynder
07. marts 2004 - 11:15 #19
fino :-)

svar
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester