Newsgroup: it.comp.lang.visual-basic
Titolo: Singola connessione con più ADO Control

Salve a tutta la lista.
Il mio applicativo utilizza in tutte i form di cui è costituito più ADO
Control per collegarsi alle tabelle di un database SQL Server.
Il problema è che ogni ADO Control, ereditando la connessione che istanzio
all'avvio del programma, nel momento in cui viene settato istanzia per conto
suo una connessione al database.
La conseguenza pratica di ciò è che su SQL Server per un solo host connesso
ho una decina di connessioni aperte (senza contare quelle dei report).
Quando gli host sono in numero dell'ordine di 50, ciò provoca un enorme
traffico sulla rete.
E' possibile in qualche modo forzare per tutti gli ADO Control che utilizzo
nell'applicativo la singola connessione che già ho aperto all'avvio?
Vi ringrazio in anticipo per la risposta.

 ha scritto nel messaggio
news:aogqfb$ckn$1...@fe1.cs.interbusiness.it...

Il codice dov'è?
Come fai ad assegnare all'adodc la connessione che hai istanziato all'inizio
del programma?
(piccolo indizio: usi la parolina set o no?)
Salutoni
Sergio

 suo una connessione al database.
Strano.
Se il controllo eredita la Adodb.Connection che gli passi tu, non dovrebbe
assolutamente riaprirne una nuova....
Non è che per caso gli passi la ConnectionString e non l'oggetto Connection?
Prova a postare il codice in cui colleghi il singolo controllo con la
Connection pre-esistente.
Ciao
Alberto

"Albe V°"
    [snip]
eh eh eh... stavolta sono arrivato prima io....
Salutoni
Sergio

 eh eh eh... stavolta sono arrivato prima io....
12.40 per entrambi.
Forse hai vinto per qualche secondo, ma io ho quotato meglio....
Tiè (come si disegna l'omino che fa il gesto dell'ombrello?)
Alberto

Il codice utilizzato è :
  Set CmdLab.ActiveConnection = DbClienti
  CmdLab.CommandType = adCmdText
  CmdLab.CommandText = "Select * From Tabella1 Where id_cliente = " & Record
& " Order by data, Id_Oggetto"
  RsLab.Open CmdLab, , adOpenKeyset, adLockBatchOptimistic
  Set Adodc1.Recordset = RsLab
  Adodc1.Refresh
  RsLab.Close: Set RsLab = Nothing
dove la connessione viene cosi dichiarata e inizializzata in un modulo:
Public DbClienti As New ADODB.Connection
  DbClienti.ConnectionTimeout = 15
  DbClienti.Mode = adModeReadWrite
  DbClienti.ConnectionString = "Provider=SQLOLEDB.1;Initial
Catalog=DbService_Netcare;Data Source=" & DbServer & ";User Id=" &
SqlServAdmUid & ";Password=" & SqlServAdmPwd
  DbClienti.CursorLocation = adUseClient
   DbClienti.Open
Scusate per la non altrettanto prontezza.
Saluti.


   RsLab.Close: Set RsLab = Nothing
Mi sembra un codice molto macchinoso, e in un punto anche discutibile.
Apri il recordset indicando l'oggetto Command, ma in realtà l'oggetto
command non lo usi per altre cose, quindi perchè non apri il recordset
direttamente con la stringa SQL?
Dim Stringa_SQL as string
Set RsLab.ActiveConnection = DbClienti
Stringa_SQL = "Select * From Tabella1 Where id_cliente = " & Record & "
Order by data, Id_Oggetto"
RsLab.Open Stringa_SQL , , adOpenKeyset, adLockBatchOptimistic
Set Adodc1.Recordset = RsLab
Adodc1.Refresh
RsLab.Close: Set RsLab = Nothing
Oppure perchè non apri direttamente il recordset del DataControl?
Dim Stringa_SQL as string
Set Adodc1.Recordset.ActiveConnection = DbClienti
Stringa_SQL = "Select * From Tabella1 Where id_cliente = " & Record & "
Order by data, Id_Oggetto"
Adodc1.Recordset.Open Stringa_SQL , , adOpenKeyset, adLockBatchOptimistic
Adodc1.Refresh
Non ho mai provato, ma tutte le connessioni che ti ritrovi potrebbero venire
dal fatto che in realtà tu usi 3 oggetti per la stessa cosa: Command,
Recordset, DataControl.Recordset.
E' possibile che, distruggendo il Recordset, il DataControl.Recordset
mantenga i parametri della Connection e della Source, e che quindi sia
costretto, per mantenersi popolato, a riaprire una connessione un istante
dopo (è una mia supposizione...).
Ciao
Alberto