none
Referenz zu eigener mde

    Frage

  • Hallo zusammen

    Ich habe ein FE, welches diverse Module enthält, welche allgemein, d.h. auch in anderen Datenbanken eingesetzt werden kann. u.a. auch einige Klassenmodule.
    Jetzt habe ich mir überlegt, das ich diese Module in eine separate mdb/mde auslagern kann, um sie dann jeweils einfach in eine andere DB einbinden zu können.

    Soweit so einfach. Unter Verweise habe ich die neue Library.mde in meine Datenbank verlinkt. Die darin enthaltenen Klassenmodule werden aber nicht erkannt. Auch im ObjectBrowser sehe ich sie nicht. Ist dem so oder mache ich etwas falsch?

    Gruss
    Thomas


    Danke und Gruss Thomas
    Donnerstag, 6. Januar 2011 08:49

Antworten

  • Hallo!

    Alphawolfi schrieb:

    Jetzt habe ich mir überlegt, das ich diese Module in eine separate mdb/mde auslagern kann,
    [...]
    Die darin enthaltenen Klassenmodule werden aber nicht erkannt. Auch im ObjectBrowser sehe ich sie nicht. Ist dem so oder mache ich etwas falsch?

    Sind die Klassen auf "Private" eingestellt? Das musst du mindestens auf "PublicNotCreateable" ändern.
    Falls du die Klassen ohne Factory-Prozedur instanzieren willst, müsstest du noch zusätzlich das Attribut VB_Creatable auf true einstellen. (Klasse mit SaveAsText exportieren, Wert mit Text-Editor ändern und Klasse mit LoadFromText importieren.)

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    • Als Antwort markiert Alphawolfi Donnerstag, 6. Januar 2011 13:03
    Donnerstag, 6. Januar 2011 09:51

Alle Antworten

  • Hallo!

    Alphawolfi schrieb:

    Jetzt habe ich mir überlegt, das ich diese Module in eine separate mdb/mde auslagern kann,
    [...]
    Die darin enthaltenen Klassenmodule werden aber nicht erkannt. Auch im ObjectBrowser sehe ich sie nicht. Ist dem so oder mache ich etwas falsch?

    Sind die Klassen auf "Private" eingestellt? Das musst du mindestens auf "PublicNotCreateable" ändern.
    Falls du die Klassen ohne Factory-Prozedur instanzieren willst, müsstest du noch zusätzlich das Attribut VB_Creatable auf true einstellen. (Klasse mit SaveAsText exportieren, Wert mit Text-Editor ändern und Klasse mit LoadFromText importieren.)

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    • Als Antwort markiert Alphawolfi Donnerstag, 6. Januar 2011 13:03
    Donnerstag, 6. Januar 2011 09:51
  • Alphawolfi wrote:
    > Ich habe ein FE, welches diverse Module enthält, welche allgemein,
    > d.h. auch in anderen Datenbanken eingesetzt werden kann. u.a. auch
    > einige Klassenmodule.
    > Jetzt habe ich mir überlegt, das ich diese Module in eine separate
    > mdb/mde auslagern kann, um sie dann jeweils einfach in eine andere DB
    > einbinden zu können.
    >
    > Soweit so einfach. Unter Verweise habe ich die neue Library.mde in
    > meine Datenbank verlinkt. Die darin enthaltenen Klassenmodule werden
    > aber nicht erkannt. Auch im ObjectBrowser sehe ich sie nicht. Ist dem
    > so oder mache ich etwas falsch?
     
    Ergänzend zu Josefs Antwort der "klassische" Link zum Thema:
     
    --
    Servus
    Karl
    *******
     
     
     
    Donnerstag, 6. Januar 2011 10:25
  • Hallo Josef

    Danke für Deine Antwort. Ich habe sie auf "PublicNotCreatable" gestellt und jetzt geht es. Danke.

    Jezt habe ich aber die Frage: Was ist eine Factory-Prozedur?

    Gruss
    Thomas


    Danke und Gruss Thomas
    Donnerstag, 6. Januar 2011 11:04
  • Hallo!

    Alphawolfi schrieb:

    Was ist eine Factory-Prozedur?

    Damit meinte ich eine Prozedur (Function) in einem Standardmodul, die eine neue Instanz der Klasse erzeugt.

    Beispiel:
    Name der Klasse in Bibliotheksdatei: EinGanzTollesDing

    Versuchst du nun in der Anwendung, die die Bibliothek verwendet, folgendes:

    dim x as EinGanzTollesDing
    set x = new EinGanzTollesDing

    .. wird das nicht funktionieren.

    Abhilfe wäre das bereits erwähnte Einstellen von VB_Creatable oder eine public Function in einem Standardmodul (das nicht auf Private Module gesetzt ist) in der Bibliothek.

    Public Function CreateEinGanzTollesDing() As EinGanzTollesDing
      set CreateEinGanzTollesDing = New EinGanzTollesDing
    end Function 

    In der Anwendung:

    dim x as EinGanzTollesDing
    set x = CreateEinGanzTollesDing()

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Donnerstag, 6. Januar 2011 11:23
  • Ich danke für Eure Antworten

    Gruss

    Thomas


    Danke und Gruss Thomas
    Donnerstag, 6. Januar 2011 13:04