Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Klasse aus eingebundener Bibliothek instanzieren
zurück: AUS GESCHLOSSENEN TABELEN AUSLESEN weiter: Abfrage-Fehler #Name! Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Stefffano
Dazugelernt


Verfasst am:
23. Mai 2012, 22:41
Rufname:
Wohnort: Chemnitz

Klasse aus eingebundener Bibliothek instanzieren - Klasse aus eingebundener Bibliothek instanzieren

Nach oben
       Version: Office XP (2002)

Hallo,

wie kann ich denn eine Klasse instanzieren, die in einer Bibliotheks-Datenbank ausgelagert ist, die über Extras/Verweise eingebunden wurde? Confused

Im Anhang habe ich ein Beispiel angehängt.
Das Beispiel enthält zwei DB's. Die eine DB enthält die Klasse ("BibliothekMitKlasse" - BMK), die andere hat diese DB als Bibliothek eingebunden und will ein Objekt der Klasse erstellen.
Beide DB's enthalten das gleiche Formular, das in der Form_Load-Prozedur die Klasse instanzieren soll. In der BMK funktioniert es.
Wenn die BMK eingebunden wird, funktioniert es leider nicht. Crying or Very sad

Was muß ich denn tun, damit es geht?

Vielen Dank für Eure Hilfen oder Tips Razz

_________________
Schöne Grüße,

Stefan



BibliothekMitKlasse.zip
 Beschreibung:

Download
 Dateiname:  BibliothekMitKlasse.zip
 Dateigröße:  24.09 KB
 Heruntergeladen:  18 mal

Josef P.
Gast


Verfasst am:
23. Mai 2012, 23:48
Rufname:


AW: Klasse aus eingebundener Bibliothek instanzieren - AW: Klasse aus eingebundener Bibliothek instanzieren

Nach oben
       Version: Office XP (2002)

Hallo!

Damit die Deklaration mit einer Klasse aus der Bibliothek in der Anwendung möglich ist, muss die Bibliotheksklasse als "2-PublicNotCreatAble" deklariert werden.
Mit dieser Konfiguration ist allerdings das Erstellen einer Instanz mit New nicht möglich.

Der "übliche Weg" ist in der Bibliothek eine Factory-Prozedur in einem Standardmodul zu erstellen und diese Prozedur in der Anwendung zu verwenden.

Der "etwas andere Weg" wäre die Klasse "PublicCreateable" zu gestalten.
Dazu exportierst du die Klasse als Text, änderst in der Textdatei die Einstellung "Attribute VB_Creatable = False" auf "Attribute VB_Creatable = True" und importierst die Textdatei wieder in die Bibltiotheks-mdb.
Dann ist den der Klasseneigenschaft "Instancing" zwar kein Eintrag mehr sichtbar, aber die Klasse kann nun auch in der Anwendung mit New instanziert werden.

mfg
Josef
Stefffano
Dazugelernt


Verfasst am:
24. Mai 2012, 22:00
Rufname:
Wohnort: Chemnitz

AW: Klasse aus eingebundener Bibliothek instanzieren - AW: Klasse aus eingebundener Bibliothek instanzieren

Nach oben
       Version: Office XP (2002)

Hallo Josef,

vielen Dank für Deine Tips, ich bin damit schon etwas weitergekommen Smile

Das Attribut "VB_Creatable" auf TRUE zu ändern, schlug leider fehl, obwohl ich Deiner Beschreibung gefolgt bin. Ein nochmaliger Export zeigte, daß das Attribut wieder auf "false" zurückgesetzt wurde. Das Speichern der Änderungen in der Textdatei hatte ich auch nicht vergessen Sad Dieser Ansatz war eigentlich mein Favorit, da es ja so fix zu machen ist.

Als nächstes habe ich in der BMK ein normales Modul - mdl_Factory - erstellt für den Factory-Ansatz:
Code:
Private mInstance As cls_BeispielForm

Public Property Get Instance(Optional ByRef rForm As Access.Form) As cls_BeispielForm
    If rForm Is Nothing Then
        Set mInstance = New cls_BeispielForm
    End If
    Set Instance = mInstance
End Property
Public Sub Unload()
    Set mInstance = Nothing
End Sub

So funktioniert es schonmal, wenn die BMK als Verweis eingebunden ist, ohne daß ich im Klassenmodul des Formulars eine Objektvariable vom Typ cls_BeispielForm deklarieren muß. Razz
Code:
Private Sub BtnWerBinIch_Click()
    MsgBox BibliothekMitKlasse.mdl_Factory.Instance(Me).Form.Name
End Sub
Private Sub Form_Load()
    Set BibliothekMitKlasse.mdl_Factory.Instance.Form = Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
    BibliothekMitKlasse.mdl_Factory.Unload
End Sub

Wie sähe denn bei Dir das Factory-Modul aus?
Und wie könnte ich auf diese Art ein RaiseEvent empfangen, das in der Klasse deklariert und ausgelöst wurde? Ich brauche doch dafür im Formular-Klassenmodul ein konkretes Objekt, das ich mit "WithEvents" versehen kann Rolling Eyes
Idea Oder könnte ich die Factory-Methoden statt in ein Standartmodul in ein Klassenmodul packen und dort das Objekt mit "WithEvents" ausstatten? - ist mir grade eingefallen.

Deinen erstgenannten Ansatz habe ich leider nicht verstanden Embarassed
Wie kann man denn eine Bibliotheksklasse als "2-PublicNotCreatAble" deklarieren?

Ich würde mich sehr freuen, wenn Du mir nochmal über die Schulter schauen könntest Razz

_________________
Schöne Grüße,

Stefan



BibliothekMitKlasse_02.zip
 Beschreibung:

Download
 Dateiname:  BibliothekMitKlasse_02.zip
 Dateigröße:  25.87 KB
 Heruntergeladen:  16 mal

Josef P.
Gast


Verfasst am:
24. Mai 2012, 22:51
Rufname:

AW: Klasse aus eingebundener Bibliothek instanzieren - AW: Klasse aus eingebundener Bibliothek instanzieren

Nach oben
       Version: Office XP (2002)

Gast am 24. Mai 2012 um 22:35 hat folgendes geschrieben:
Hallo!

Wie hast du die Datei importiert?
Du darfst nicht über "Datei importieren" vom Kontextmenü des Projekt-Explorers gehen, sondern musst über im Menü "Einfügen" den Eintrag "Datei" verwenden.

mfg
Josef

Nachtrag:
Zitat:
Wie kann man denn eine Bibliotheksklasse als "2-PublicNotCreatAble" deklarieren?
Den Wert kannst du in den Eigenschaften der Klasse auswählen.
(Eigenschaftsfenster einblenden, falls es nicht geöffnet ist: {F4})

mfg
Josef
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
25. Mai 2012, 08:12
Rufname:

AW: Klasse aus eingebundener Bibliothek instanzieren - AW: Klasse aus eingebundener Bibliothek instanzieren

Nach oben
       Version: Office XP (2002)

Hallo,

aus Deinem Code wird nicht wirklich klar, was Du eigentlich erreichen möchtest?

Josef hat Dir ja schon gezeigt, wie man die Klasse auf "PublicNotCreatable" setzen muß, dann kannst Du Deine Beispielklasse in der Datenbank z.B. so verwenden:
Code:
Private WithEvents objClsBeispiel As cls_BeispielForm
Der Event "CloseForm", den Du in der Beispielklasse hast, kann dann so verwendet werden:
Code:
Private Sub objClsBeispiel_CloseForm()
    '...
End Sub
Bei einem selbstdefinierten Event genügt es allerdings nicht, eine Eventklasse und den Event zu definieren, Du benötigst auch einen Auslöser, das geht nur mit RaiseEvent. Das wiederum muß in der Beispielklasse enthalten sein, denn ein Event kann nur von der Klasse aus ausgelöst werden, die ihn definiert. Also brauchst Du eine Hilfsprozedur, die z.B. so aussieht:
Code:
Public Sub RaiseCloseForm()
    RaiseEvent CloseForm
End Sub
Jetzt kannst Du den Event von außen auslösen.

Um die Formularevents des Formulars "Frm_Test" nach außen weiterzugeben, kannst Du von außen die Formularreferenz der Beispielklasse verwenden, für die Du ja bereits eine Property angelegt hast:
Code:
Private WithEvents objFrmTest As Access.Form
Nun kannst Du die Standard-Events des Formulars auch in dem Modul aus "Zugriffauf.." einfügen und Code hinterlegen.

Leider kann man Formulare nicht als "PublicNotCreatable" deklarieren, daher geht das Folgende nicht:
Code:
Private WithEvents objFrmTest As Form_Frm_Test
Das ist aber nicht so schlimm, denn wenn man im Formular weiteres als "Public" definiert hat, kann man es über die Formularreferenz trotzdem aufrufen, man erhält lediglich keine IntelliSense-Unterstützung und der Compiler kann die Public-Eigenschaften/Methoden nicht prüfen, Schreibfehler fallen also erst zur Laufzeit auf.

Da Du aber schon eine Wrapper-Klasse für das Formular hast, kannst Du hier einfach ansetzen: Statt Public-Methoden/Eigenschaften direkt im Formular Frm_Test zu definieren, definierst Du sie einfach in der Klasse.

Gruß

Christian
Stefffano
Dazugelernt


Verfasst am:
25. Mai 2012, 13:58
Rufname:
Wohnort: Chemnitz


AW: Klasse aus eingebundener Bibliothek instanzieren - AW: Klasse aus eingebundener Bibliothek instanzieren

Nach oben
       Version: Office XP (2002)

Hallo Josef,

vielen Dank, das hab ich hingekriegt.
Die Einstellung auf "PublicNotCreatAble" hat eigentlich mein ganzes Problem auf einen Schlag gelöst.
Denn dadurch läßt sich ja dann beinahe wie gewohnt arbeiten, (auch mit auf die Klasse bezogenen WithEvents), denn ich kann jetzt wieder formular-modulweit ein Klassenobjekt deklarieren, auch wenn die Klasse sich nicht in der DB befindet, sondern nur eingebunden ist. Lediglich die Instanzierung muß noch die Factory-Methode übernehmen.

Das fertige Beispiel habe ich wieder angehängt. Darin sind die Klasse auf "PublicNotCreatAble" eingestellt, und die RaiseEvents werden ausgelöst und vom Formular auch empfangen. Außerdem konnte ich das Factory-Modul wieder etwas abspecken. Ich denke auch, daß das wohl dem entspricht, was Christian dazu noch sagte - vielen Dank auch an Dich Razz

_________________
Schöne Grüße,

Stefan



BibliothekMitKlasse_04.zip
 Beschreibung:

Download
 Dateiname:  BibliothekMitKlasse_04.zip
 Dateigröße:  29.52 KB
 Heruntergeladen:  24 mal

Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Programmierung / VBA: CurrentProject.Connection - "Klasse nicht registriert 5 Tobias.R. 184 20. Nov 2013, 09:37
Tobias.R. CurrentProject.Connection - "Klasse nicht registriert
Keine neuen Beiträge Access Programmierung / VBA: Auf andere Klasse zugreifen 2 thomaswolf 88 23. Sep 2013, 22:15
Bitsqueezer Auf andere Klasse zugreifen
Keine neuen Beiträge Access Programmierung / VBA: Probleme mit Zugriff auf Klasse (Objekt nicht vorhanden) 0 LukasTal 82 24. Feb 2013, 18:30
LukasTal Probleme mit Zugriff auf Klasse (Objekt nicht vorhanden)
Keine neuen Beiträge Access Formulare: Umschaltfläche fehlende Bibliothek und Verweis? 2 intersoft 268 25. Okt 2012, 05:26
Gast Umschaltfläche fehlende Bibliothek und Verweis?
Keine neuen Beiträge Access Programmierung / VBA: Objekt oder Klasse unterstützt diese Ereignismenge nicht 2 sirthid 1388 17. Aug 2012, 12:33
sirthid Objekt oder Klasse unterstützt diese Ereignismenge nicht
Keine neuen Beiträge Access Programmierung / VBA: Event-Bündelung in Klasse mit Problemen behaftet.... 4 tradeiteasy 269 21. Mai 2012, 11:57
tradeiteasy Event-Bündelung in Klasse mit Problemen behaftet....
Keine neuen Beiträge Access Programmierung / VBA: Übergabe einer Klasse an eine sub 1 Jan Maier 259 25. März 2011, 01:10
Bitsqueezer Übergabe einer Klasse an eine sub
Keine neuen Beiträge Access Programmierung / VBA: Verweise auf Bibliothek per VBA setzen? 11 mr.martin 4760 27. Okt 2010, 23:15
Gast Verweise auf Bibliothek per VBA setzen?
Keine neuen Beiträge Access Programmierung / VBA: Von Klasse eine sub in einem Formular starten 2 beat78 288 14. Jun 2010, 08:42
beat78 Von Klasse eine sub in einem Formular starten
Keine neuen Beiträge Access Programmierung / VBA: Formular als Klasse öffnen 2 joschwenk 995 28. Apr 2010, 16:30
joschwenk Formular als Klasse öffnen
Keine neuen Beiträge Access Programmierung / VBA: Fehlende Bibliothek 4 r3v0 775 26. Apr 2010, 15:58
r3v0 Fehlende Bibliothek
Keine neuen Beiträge Access Programmierung / VBA: Kopierschutz Klasse 1 VBAY 697 26. Feb 2010, 20:06
steffen0815 Kopierschutz Klasse
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: CSS Forum