Newsgroup: it.comp.lang.visual-basic
Titolo: [ADO 2.7] Passare una connessione tra ActiveX -EXE e DLL

Riposto il messaggio (spiegando meglio) per essere più chiaro,
spero...
Ho creato un activex-exe (chimiamolo A) dove all'avvio, apro una
connessione
verso un DB e lo associo ad una variabile globale (c as
adodb.connection).
Esiste poi una classe in questo eseguibile che mi restituisce
l'oggetto adodb.connection appena creato in questo modo:
Public Function GetConnection(ByRef Conn As ADODB.Connection)
Set Conn = C
End Function
... ho provato anche come funzione o proprietà, il risultato è lo
stesso.
Il secondo programma (B) viene eseguito sempre sulla stessa macchina
di A, ed ha nei riferimenti (oltre ad ado) il percorso all'eseguibile
A.
All'apertura di B , mi faccio restituire da A.GetConnection il
riferimento alla
connessione attiva e "tento" di usarla con un recordset. Tutte le
proprietà della connessione sono OK, ma l'errore è sempre il 3001
(argomenti non validi...).
Quello che ottengo quindi da "A.GetConnection" è o non è una
connessione valida?
E' possibile passare a B connessioni create in A ? Sembrerebbe di
no...
Grazie a chi a risposto alle mie precedenti domande...
... e a chi potrà darmi delucidazioni maggiori...
CIAO
PS: chi volesse i sorgenti...

 ... e a chi potrà darmi delucidazioni maggiori...
Prego ma la risposta è la stessa:
l'errore è da un'altra parte.
allego esempio.
1) Progetto1
inserisci una classe:
ovviamente ci metti la tua connectionstring
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "Class1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Dim c As New ADODB.Connection
Public Function GetConnection() As ADODB.Connection
Set GetConnection = c
End Function
'Public Function GetConnection(ByRef Conn As ADODB.Connection)
'Set Conn = c
'End Function
Public Property Get adoConnection() As ADODB.Connection
     Set adoConnection = c
 End Property
Private Sub Class_Initialize()
    c.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and
Settings\Ugo\Documenti\db2.mdb;Persist Security
    'ovviamente qui ci metti la tua stringa di connection
Info=False"
End Sub
2) Progetto 2
- nei riferimenti ci metti la dll compalata del progetto1
- inserisci un form:
VERSION 5.00
Begin VB.Form Form1
   Caption         =   "Form1"
   ClientHeight    =   3195
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   4680
   LinkTopic       =   "Form1"
   ScaleHeight     =   3195
   ScaleWidth      =   4680
   StartUpPosition =   3  'Windows Default
   Begin VB.TextBox Text1
      Height          =   495
      Left            =   1800
      TabIndex        =   1
      Text            =   "Text1"
      Top             =   2280
      Width           =   1215
   End
   Begin VB.CommandButton Command1
      Caption         =   "Command1"
      Height          =   495
      Left            =   1800
      TabIndex        =   0
      Top             =   1320
      Width           =   1215
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()
Dim Cp As New Progetto1.Class1
Dim Cn As ADODB.Connection
Dim Rs As New ADODB.Recordset
'Set Cn = New ADODB.Connection
'Set Cn = Cp.GetConnection
'Cp.GetConnection Cn
'Set Cn = Cp.adoConnection
Set Cn = Cp.GetConnection
Text1.Text = Cn.ConnectionString
Rs.CursorLocation = adUseClient
Rs.Open "Select * from fornitori", Cn
Debug.Print Rs.RecordCount, Rs.Fields!codfor
End Sub
ciao
ugo

e ho subito incontrato il problema della connessione...
Beh, potresti farle chiamare dal tuo exe activex.
ciao
ugo