Newsgroup: it.comp.lang.visual-basic
Titolo: Open , Close Connection

Salve, ho la necessità di popolare una datagrid con dei dati di un
database Access 2000.
Il codice che sto usando è il seguente:
Private Sub Form_Load()
Dim cnn1 As ADODB.Connection
Dim recTec As New ADODB.Recordset
Set cnn1 = New ADODB.Connection
Set recTec = New ADODB.Recordset
cnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathDatabase &
";jet oledb "
Adodc1.ConnectionString = cnn1
recTec.Open "SELECT * FROM tabTecnici where IDTecnico > 0", cnn1,
adOpenKeyset, adLockPessimistic, accmdtext
Set Adodc1.Recordset = recTec
Set DataGrid1.DataSource = Adodc1
cnn1.Close
Set cnn1 = Nothing
End Sub
ma la griglia non si popola.
Dove sbaglio ?
Grazie
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Grazie
Prego
Sergio

 Sergio
Innanzi tutto grazie per la celerità...
Ho provato con questo codice:
Private Sub Form_Load()
Dim cnn1 As ADODB.Connection
Dim recTec As New ADODB.Recordset
Set cnn1 = New ADODB.Connection
Set recTec = New ADODB.Recordset
cnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathDatabase &
";jet oledb "
Adodc1.ConnectionString = cnn1
recTec.CursorLocation = adUseClient
recTec.Open "SELECT * FROM tabTecnici where IDTecnico > 0", cnn1,
adOpenKeyset, adLockPessimistic, accmdtext
'Set Adodc1.Recordset = recTec
Set DataGrid1.DataSource = recTec
Me.Caption = NP & "- Tecnici"
cnn1.Close
Set cnn1 = Nothing
End Sub
ma non funziona...


io sono celere, anche tu lo sei, ma ti inviterei a leggere meglio i
post.....
[cssoft]
Credo, ma verifica tu, che il problema sia dovuto al fatto che per default
il recordset viene aperto con cursore "lato server", mentre invece la
datagrid lo vuole "lato client"
quindi, eliminando i riferimenti all'adodc, che dovrebbero diventare
inutili, il tuo codice diventerebbe:
Private Sub Form_Load()
Dim cnn1 As ADODB.Connection
Dim recTec As New ADODB.Recordset
Set cnn1 = New ADODB.Connection
Set recTec = New ADODB.Recordset
cnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathDatabase &
";jet oledb "
set recTec.ActiveConnection = cnn1
recTec.CursorLocation = adUseClient 'verifica la corretta scittura di questo
parametro
recTec.Source =  "SELECT * FROM tabTecnici where IDTecnico > 0"
recTec.LockType = adLockPessimistic
recTec.CursorType = adOpenKeyset
recTec.Open
Set DataGrid1.DataSource = recTec
'cnn1.Close
'Set cnn1 = Nothing
End Sub
ho commentato le due righe, per sottolineare che non è il caso di chiudere
la connessione, per lo meno non in quel punto, a meno di non aprire il
recordset in modalita batch, ma questo è un altro discorso....
Ho specificato i parametri del recordset facendo esplicito riferimento
invece di impostarli durante l'istruzione open a puro scopo didattico (oltre
che per il fatto che di solito faccio così.....)
Salutoni
Sergio

CSSoft wrote:




Ho provato il tuo codice ma non funziona...


[Davide] scrisse
Ho provato il tuo codice ma non funziona...
Esattamente, a questo punto, qual è il problema?
(a parte che non è il mio codice, ma il tuo leggermente modificato...)
Salutoni
Sergio

CSSoft wrote:


Scusa ma se sapessi dov'è il problema non disturberei il ng...
Non sono un programmatore professionista !
Grazie lo stesso.
Ciao


 Non sono un programmatore professionista !
Intendevo dire: qual č il comportamento dell'applicazione?
ti da un errore? (se si quale)
il datagrid non si popola ma almeno vedi qualcosa nell'intestazione delle
colonne?
Cercavo di capire in modo piů preciso quale fosse il tuo problema, non stavo
insinuando che non sei capace a programmare....
Salutoni
Sergio

 Sergio
L'applicazione non mi dà nessun errore solo che la datagrid resta vuota
senza intestazioni.
Ho provato anche a mettere un refresh alla datagrid 
..
recTec.CursorType = adOpenKeyset
recTec.Open
Set DataGrid1.DataSource = recTec
DataGrid1.Refresh
ma non vedo i dati nella griglia.
( Ti assicuro che di dati ce ne sono in Access )
Grazie per la tua pazienza.


[Davide]
L'applicazione non mi dà nessun errore solo che la datagrid resta vuota
senza intestazioni.
Accipicchia... è un problemaccio.... riguardiamo il codice...
Una piccola prova....
Sostituisci le righe
recTec.LockType = adLockPessimistic
recTec.CursorType = adOpenKeyset
con
recTec.LockType = adLockBatchOptimistic
recTec.CursorType = adOpenStatic
e poi fammi sapere....
Nota a margine: per quanto mi riguarda continuiamo domani....
Salutoni
Sergio

 > news:aposm0$p08$1...@news.newsland.it...
ehm ci fai un piacere?fai 2 test!
A) prima di aprire la conn inserisci
cnn1(ocome la hai chiamata).cursorLocation=aduseclient
...e poi la apri come sai
B) Per provare metti questa SQL nell'apertura recordset
"SELECT * FROM TabTecnici"
 e basta!
dicci che succede!

 cnn1(ocome la hai chiamata).cursorLocation=aduseclient
da te consigliato e la
recTec.CursorLocation = adUseClient
da me consigliato....
Salutoni
Sergio

 e poi fammi sapere....

Ho provato in entrambi i modi ma nulla di fatto...


 ha scritto nel messaggio
news:pbTv9.51868$aL4.1...@news1.tin.it...

Uguale
con una differenza
 se lo imposti Client sulla connection poi per DEFAULT son client anche i
recordset (sempre cambiabili ma per default son client)
ora se lavori con sti "troiai" di controlli e fai un mix come il nostro
amico tra codice e troiaio ti conviene impostare la conn una volta per tutte
invece di ricordarsi tutte le volte come aprire i recordset!
per i newbie non č poco!....se solo il newbie lo sapesse!!!!
:o)

mmm famnmi vedere che hai scritto
Private Sub Form_Load()
Dim cnn1 As ADODB.Connection
Dim recTec As New ADODB.Recordset
Set cnn1 = New ADODB.Connection
Set recTec = New ADODB.Recordset
cnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathDatabase &
";jet oledb "
leva jet oledb
al limite persist security info!
anzi.....
se usi l'ado data control....falla fare a lui la stringa di connessione poi
un bel copia e incolla!! devi solo sostituire il percorso assoluto come hai
fatto!
Adodc1.ConnectionString = cnn1
recTec.Open "SELECT * FROM tabTecnici where IDTecnico > 0", cnn1,
adOpenKeyset, adLockPessimistic, accmdtext
Set Adodc1.Recordset = recTec
Set DataGrid1.DataSource = Adodc1
perchč apri un recordset e poi lo assegni all'adodatacontrol?...fallo aprire
subito no?hai tempo da buttare via???
cnn1.Close
Set cnn1 = Nothing
se la chiudi a che serve farla pessimistica? diventa di fatto un batch
optimistic...come fa a vedere se qualcuno modifica qualcosa se non č
connesso??????
tanto vale che la faccia readonly anzi forward only per popolare la
griglia...e allora basta anche una flex e un po di codice!
Anche se non ho provato....potrebbe essere anche questo che te la fa
apparire vuota!
End Sub

Wodka4U(xp) wrote:




Hai ragione , se non la chiudo funziona tutto !
Grazie


 Ho provato in entrambi i modi ma nulla di fatto...
Grazie di tutto , ho risolto con Wodka4Up


 Grazie
cazzo, davide, quando io scrivo
<citazione>
'cnn1.Close
'Set cnn1 = Nothing
End Sub
ho commentato le due righe, per sottolineare che non è il caso di chiudere
la connessione, per lo meno non in quel punto, a meno di non aprire il
recordset in modalita batch, ma questo è un altro discorso....
</citazione>
tu che cosa leggi?