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
