Re: Danke euch allen
From: Martin Müller (mm_at_inthemitddleofnowhere.com)
Date: 02/18/05
- Next message: Frank Landen: "Re: RichTextBox - Font BackgroundColor"
- Previous message: Bert Sachs: "Re: RichTextBox - Font BackgroundColor"
- In reply to: Peter Götz: "Re: Danke euch allen"
- Next in thread: Peter Götz: "Re: Danke euch allen"
- Reply: Peter Götz: "Re: Danke euch allen"
- Messages sorted by: [ date ] [ thread ]
Date: Fri, 18 Feb 2005 16:10:24 +0100
Hallo Peter
"Peter Götz" <gssg_nospam@t-online.de> schrieb im Newsbeitrag
news:#ynn9FcFFHA.2824@tk2msftngp13.phx.gbl...
> Hallo Martin,
>
> > Spass beiseite. Danke für eure Hilfe. Ich werde nun das Connection
Objekt
> > halt als Member der vier Interface separat öffnen.
>
> Als welches Member welcher vier Interfaces?
>
>
> > Scheint in VB einfach
> > nicht anders zu gehen. Bin ein ziemlicher VB-Neuling und komme von C++.
Da
> > wäre das kein Problem, weil es eine DllMain Funktion gibt, in der ich
> > mitkriege, ob die DLL geladen oder entladen wird.
>
> Was hat Dein Problem mit dem Laden einer DLL zu tun?
> Wenn ich es richtig verstanden habe, gibt es in dieser DLL irgendeine
> Funktion, welche eine ADODB.Connection erstellt/öffnet.
>
> Deklariere in Deinem VB-Code eine passende Objektvariable
>
> Option Explicit
>
> Private WithEvents mCNN
>
> und gib dieser Objektvariablen einen Verweis auf Dein Connectionobjekt.
>
> Set mCnn = DeinConnectionobjekt
>
> Ab jetzt kannst Du Deine DLL vergessen. Du kannst sie entladen oder sonst
> was damit tun. Deine Variable mCnn hält einen Verweis auf Dein
> Connectionobjekt und somit kannst Du alles mit dieser Connection machen.
>
> Gruß aus St.Georgen
> Peter Götz
> www.gssg.de (mit VB-Tips u. Beispielprogrammen)
>
Ich versuch nochmal zu beschreiben, was ich habe: Ich habe eine
ActiveX-DLL, die vier verschiedene Interfaces (Klassen in VB) implementiert:
LanguageHandler.DialogTranslator, LanguageHandler.PromptTranslator,
LanguageHandler.DocTextTranslator und LanguageHandler.DbQueryTranslator.
Jedes dieser vier Interfaces benötigt Zugriff auf ein und dieselbe Datenbank
eines SQL-Servers, um verschiedene Queries abzusetzen. Nun hat der
Programmierer, der diese DLL erstellt hat, folgendes gemacht (etwas
abgespeckt):
In einem Modul hat er den folgenden Code:
Public oDbConnection As ADODB.Connection
Public Sub StartDbConnection()
If oDbConnection is Nothing Then
Set oDbConnection = New ADODB.Connection
oDbConnection.Open "Stellvertreter für ConnectionString"
End If
End Sub
In jedem der Interfaces hat er folgendes Implementiert:
Private Sub Class_Initialize()
StartDbConnection
End Sub
Public Function Translate(ByVal Key as Integer) As Boolean
Dim oRecSet as New ADODB.Recordset
oRecSet.Open "SELECT * FROM table WHERE ID=" & Key, oDbConnection
End Function
Das erste Interface, das von einem Client angefordert wird, erzeugt und
öffnet also das Connection Objekt.
So weit, so gut. Aber ein oDbConnection.Close und Set oDbConnection =
Nothing ist weit und breit nirgends. Und somit habe ich mich dann eben
gefragt, ob das wohl automatisch geschieht, wenn die DLL entladen wird (was
ja automatisch passiert, wenn kein Client mehr ein Interface referenziert
und genügend Idle-Time zur Verfügung steht, soviel hab ich mindestens mal
aus der Online-Hilfe).
Das ist soweit ja nicht viel anders als, was du mir vorschlägst, wenn ich
alles richtig verstanden habe. Mit der Ausnahme des WithEvents Keywords und
dass oConnection Private ist, statt Public. Private müsste ich natürlich
dann mit Hilfe einer Sub oder Function umgehen, damit ich in den Interfaces
zum Connection Object komme. Und was WithEvents angeht, so habe ich da
offensichtlich einen Informations-Nachholbedarf. Aufgrund der Doku komme ich
jedenfalls nicht darauf, warum das vonnöten sein sollte. Kannst du mir da
noch einen Denkanstoss geben?
Trotz alledem bleibt die Frage offen, was geschieht, wenn kein Client mehr
eine Referenz auf eines der Interfaces hat und die DLL dadurch automatisch
entladen wird. Wo muss ich dann das Close auf der privaten Referenz
aufrufen?
Danke & Gruss
Martin
- Next message: Frank Landen: "Re: RichTextBox - Font BackgroundColor"
- Previous message: Bert Sachs: "Re: RichTextBox - Font BackgroundColor"
- In reply to: Peter Götz: "Re: Danke euch allen"
- Next in thread: Peter Götz: "Re: Danke euch allen"
- Reply: Peter Götz: "Re: Danke euch allen"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|