Wolfgang hat sich hier ja richtig ausgelassen, aber es gibt auch einen
einfachen weg...

Etwa so:

'Innerhalb vom Main-Objekt, wenn Du eine andere Klasse definierst:
Set k5 = new Klasse5
K5.ADOConn = myADOConnection

D.h. Du machst einfachder Klasse die Connection bekannt...

Optional w�rde sowas gehen:
Set k5 = new Klasse5
K5.mainClass = me

D.h. Du machst dem Objekt die Main-Klasse bekannt und das Objekt kann
dann selbst sowas machen:
Set dbConn = mainClass.ADOConn

Claudius

> -----Original Message-----
> From: Wolfgang Kluge [mailto:[EMAIL PROTECTED]] 
> Sent: Mittwoch, 13. M�rz 2002 15:02
> To: AspGerman Kaffeehaus
> Subject: [aspdecoffeehouse] RE: vb-frage zu klassenmodulen
> 
> 
> ein paar m�glichkeiten bieten sich da schon an..
> 
> nunja,. �ber sinn und unsinn einer jeden m�glichkeit l�sst 
> sich wahrlich
> streiten... deswegen liste ich dir die vermeintlich "besten" mal auf
> 
> 
> 1.: der einfachste weg
> 
> wie in der antwort von rene angesprochen:
> du definierts deine ado-funktionen in einem modul (kein klassenmodul).
> damit kannst du dann von jeder klasse aus, auf diese zugreifen.
> 
> leichteste �bung dabei ist ein globales conn-object im modul 
> zu definieren
> 
> Public conn As New ADODB.Connection
> 
> nachteile liegen aber ganz klar auf der hand. 
> ressourcensparend oder gar
> objektorientiert(orientiert wohlgemerkt) ist dieser weg nicht 
> unbedingt.
> 
> 
> 2.: etwas anders
> 
> du definierst eine neue klasse, die nur f�r den datenzugriff 
> zust�ndig ist.
> nach aussen gibt es kein connection-objekt. alle abfragen 
> werden �ber daf�r
> erstellte funktionen(sowas geht nat. auch im modul)
> in den einzelnen klassen, die auf diese zugriff haben sorgst du per
> eigenschaft(set) daf�r, dass diese auch zugriff auf diese bekommen.
> 
> beispiel:
> 
> clsDB ist deine datenbank-zugriffsklasse
> 
> in deiner klasse 2 steht sowas in der art
> 
> Private m_dbObject as clsDB
> 
> Public Property Set dbObject(Value As clsDB)
>       Set m_dbObject = Value
> End Property
> 
> Private Sub Class_Terminate()
>       set dbObject  = Nothing
>       'darf in diesem Fall auf keinen Fall vergessen werden. ;)
>       'die aufr�umarbeiten(Class_Terminate) gehen in der klasse clsDB
>       'erst dann los, wenn keine einzige Referenz mehr auf ein Objekt
>       'dieser klasse da ist!!
> End Sub
> 
> 
> 
> beim erstellen deines "haupt"-objekts, musst du ein db-objekt 
> erstellen.
> beim erstellen der anderen klassen musst du dieses erstellte 
> objekt �ber die
> eigenschaft dbObject weitergeben(nat. nur f�r die klassen, in 
> denen dies
> gebraucht wird)
> 
> 
> 3.: ganz anders, aber gleich
> 
> der letzte weg ist dem 2. sehr �hnlich aber weitaus komplexer und
> umfangreicher.
> allerdings w�rde ich, wenn du deine objekte ab und zu 
> weitergibst/verkaufst,
> und sich dadurch auch die datenbank und damit die
> abfragen/zugriffstechniken(oledb(provider?), odbc) �ndern, 
> dein db-objekt
> extern setzten.
> 
> das klappt im eigentlichen auch so, wie ichs gerade 
> vorgestellt habe. nur
> wenn diese dann auch noch unterschiedlich hei�en sollen(zb 
> clsDBAccess,
> clsDBSQLServer..), dann wirds zeit f�r ein interface namens IclsDB.
> ein Interface ist eine "leere" klasse, die nur aus den 
> r�mpfen der anwendung
> besteht.
> 
> also zb sowas
> 
> Klasse IclsDB in externem activex-dll-Projekt namens 
> MeinInterface. (das I
> steht f�r Interface,. sollte man einhalten, sonst wirds schnell
> un�bersichtlich)
> 
> Public Function Connect(ByVal UserName As String, ByVal 
> Password As String)
> As Boolean
> '
> End Function
> 
> das anf�hrungsstrichchen ist nur dazu gut, dass der Compiler 
> diese Funktion
> auch ber�cksichtigt..
> 
> 
> nun machst du ein neues (activex-dll)Projekt und nennst die 
> darin enthaltene
> klasse clsSQLServer(alles nur vorschl�ge*g*)
> in den projektverweisen musst du nun auf die oben genannte
> dll(MeinInterface) verweisen(theoretisch geht auch das 
> projekt, aber vb6
> h�ngt dann manchmal)
> als erstes Statement kommt in die klasse das inherits-statement vor.
> 
> Inherits MeinInterface.IclsDB
> 
> nun erscheint in deinem codefenster in der ersten combobox 
> unter "Class"
> auch "IclsDB".
> dies ausgew�hlt erscheinen in der 2. combobox alle funktionen und
> eigenschaften, die du im interface definiert hast.
> Diese m�ssen alle(!!) in dieser dll vorkommen(also minimum ein
> kommentarzeichen), damits kompiliert werden kann.
> 
> 
> 
> letztendlich kommen wir zum schluss.
> da nun alle deine db-klassen (also clsDBAccess, clsDBSQLServer) zum
> Interface IclsDB konform sind(und dies auch durch inherits 
> sichergestellt
> ist), kannst du perfekt damit arbeiten.
> 
> dein projekt,welches nun auf die ganzen db-zugriffs-klassen 
> zugreifen will,
> muss auch einen verweis auf die interface-dll(MeinInterface) haben.
> 
> und nun zur�ck zu beispiel 2:
> 
> statt clsDB schreibst du nun eben MeinInterface.IclsDB
> 
> 
> der rest ist late-bindung �ber createobject(nur in deiner 
> "haupt"-klasse)
> du l�dst deine spezielle klasse(zb clsSQLServer) dann mittels
> 
> Dim m_dbObject as MeinInterface.IclsDB
> Set m_dbObject = CreateObject("Projektname.clsSQLServer")
> 
> 
> 
> du kannst nat. zuvor sicherstellen, dass die klasse auch 
> registriert wird
> und vorhanden ist. du kannst auch nachschauen, welche dll 
> vorhanden ist, und
> diese nehmen, oder nat. auch die spezielle klasse in deine 
> projektverweise
> aufnehmen(und das createobjekt dadurch weglassen).
> mit letzterer variante m�sstest du aber wieder f�r jedes db-system neu
> kompilieren.. mit createobject m�sstest du "einfach" die zugriffsdll�s
> weitergeben
> 
> ein fehler wird ausgel�st, wenn 1. die klasse nicht 
> registriert ist, und 2.
> die klasse nichts mit dem Interface gemein hat, also nicht von diesem
> abgeleitet ist.
> 
> wenns mal mehrere versionen geben soll ist eine ableitung von min. 2
> interfacesd sinnvoll(IclsDBInfo), wobei die 2. nur die versionsnummer
> tr�gt(oder so)
> 
> auch wenn es sich nicht unbedingt so anh�rt. es funktioniert ;)
> 
> wolfgang
> http://www.vbwelt.de/
> 
> 
> 
> 
> | [aspdecoffeehouse] als [EMAIL PROTECTED] subscribed
> | http://www.aspgerman.com/archiv/aspdecoffeehouse/ = Listenarchiv
> | Sie k�nnen sich unter folgender URL an- und abmelden:
> | 
> http://www.aspgerman.com/aspgerman/listen/anmelden/aspdecoffee
house.asp


| [aspdecoffeehouse] als [email protected] subscribed
| http://www.aspgerman.com/archiv/aspdecoffeehouse/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdecoffeehouse.asp

Antwort per Email an