Newsgroup: it.comp.lang.visual-basic
Titolo: datagrid VB non visualizza nulla!!!

Scusate... ma non ci capisco piů nulla... leggendo qua e la tra i vari
post, non ho trovato il modo di visualizzare il contenuto del mio
recordset in un datagrid...
ecco il mio codice:
  Set TabAtt = New ADODB.Recordset
 
  Sql = ""
  Sql = Sql & " Select * from mercati"
 
  TabAtt.CursorLocation = adUseClient
  TabAtt.Open Sql, connDBlocal, adOpenStatic
 
  Set Me.DG.DataSource = TabAtt
 
  DG.Refresh
 
  TabAtt.Close
Secondo i poost arretrati dovrebbe essere tutto ok....ma niente!!!
sto diventando pazzo!!!
aiuto!
Gene.

 
Come ben sai il datagrid e' un controllo data-bound. Cio' significa che 
il controllo cerca di rispecchiare il recordset a cui e' collegato.
Se tu inserisci nel tuo codice una istruzione che chiude il recordset 
cosa succede?
:-)
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

   TabAtt.Close
Ciao!
se non erro devi togliere TabAtt.close, sostituendolo con 
Set TabAtt=nothing.
Ciao...Ciao!!!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

  TabAtt.Close
Penso sia qui il problema. Non puoi chiudergli il recordset
sottostante. Deve rimanere aperto per tutto il periodo in cui e' viva
la HFlexGrid.
Normalmente, se ho una HFlexGrid che segue il ciclo di vita di unForm,
apro il recordset nell'evento Load, e li lo associo alla grid; poi lo
chiudo nell'evento QueryUnload, una volta dissociato dalla grid.
Ciao!
Luca

 Sql = "Select * from mercati"
Probabilmente per incolonnare tutta la query a video durante lo sviluppo.
termoPilucco



Devo essere proprio fumato, Oggi. Vabbe', ne e' valsa la pena, ieri
sera mi son fatto uno splendido Trentino Rosso Vallis Agri 1997.
Pero' non ho capito manco questa.
Ciao!
Luca

 Pero' non ho capito manco questa.
sql = ""
sql = sql & "select * from "
sql = sql & "pippo where"
sql = sql & "pluto=2"
"select" è allineato con "pippo" e "pluto"
sql = "select * from "
sql = sql & "pippo where"
sql = sql & "pluto=2"
Qui no.
termoPilucco

 Set TabAtt=nothing.
erri
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

   TabAtt.Close
come altri ti hanno detto, se chiudi il recordset che contiene i dati, la
datagrid non ti mostra più nulla.
se vuoi sganciarti dal database e lavorare in modo disconnesso la strada
dovrebbe essere questa:
   Set TabAtt = New ADODB.Recordset
   Sql = ""
   Sql = Sql & " Select * from mercati"
   TabAtt.CursorLocation = adUseClient
   TabAtt.Source = sql
   Set TabAtt.AtiveConnection = connDBlocal
   TabAtt.LockType = dbLockBatchOptimistic
   TabAtt.open
   set TabAtt.ActiveConnection = nothing
   Set Me.DG.DataSource = TabAtt
in questo modo sei scollegato dal db, ma il recordset continua ad essere
popolato. verifica bene i nomi delle proprietà e delle costanti che ho
utilizzato perchè sono andato a memoria, e outlook non ha l'intellisense :-)



Perchè erro?
Io lo faccio nel mio codice e funziona lo stesso.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Io lo faccio nel mio codice e funziona lo stesso.
hai parzialmente ragione.
il tuo codice continua a funzionare, perchè in realtà l'istruzione
set TabAtt = nothing
non ha assolutamente alcun effetto.
cerchiamo di spiegarci.
tu ti crei un recordset, che altro non è che un oggetto, e lo agganci ad una
particolare istanza con l'istruzione
set TabAtt = NEW Adodb.Recordset
poi gi imposti qualche caratteristica, lo apri, lo smandrappi, e poi fai un:
set dg.DataSource = TabAtt
in questo modo tu non crei una nuova istanza del recordset, ma crei un altro
riferimento all'istanza esistente.
Quando fai il set TabAtt= nothing non distruggi l'oggetto recordset, perchè
esiste ancora un riferimento ad esso (contenuto in dg.recordsource) che lo
tiene in vita.
prova a vedere se trovi qualche informazione sul concetto di "reference
counter", croce e delizia dei programmatori com


"select" è allineato con "pippo" e "pluto"
Quello che temevo.
Il compilatore di VB (almeno nella versione 6) non e' il massimo
dell'efficienza e dell'ottimizzazione. Il che significa che se usi il
tuo costrutto utilizzi risorse assolutamente inutili, e in due modi:
1) impiegando & invece che +. So che e' poco portabile, pero' & e' un
concatenatore di variabili di tipo variant, il che vuol dire che prima
di eseguire la concatenazione e la riconversione del risultato in
stringa tutti gli elementi che fanno parte della concatenaqzione
vengono implicitamente convertiti in variant.
2) per il motivo di cui sopra, è infinitamente piu' efficiente, se
vuoi mantenere proprio l'allineamento (ma serve, per queries che di
norma devono essere abbastanza brevi, a meno che il loro disegno non
sia noto in fase di disegno) utilizzare un costrutto singolo:
sql = _
    "select * from " + _
    "pippo where" + _
    "pluto=2"
Che poi, se proprio vuoi renderlo piu' leggibile (perche' manco cosi'
lo e' molto):
sql = _
    "SELECT  * " + _
    "FROM     pippo " + _
    "WHERE  pluto=2"
E comunque, rifo, perche' non un bel
sql = "SELECT * FROM pippo WHERE pluto = 2"
ove possibile, come nel caso di partenza?
Lo so, son maniaco, perdonami..... :)))))
Ciao!
Luca

 counter", croce e delizia dei programmatori com
Grazie per la spiegazione!!! Nella guida di ADO nel metodo Close, c'è
scritta la seguente frase: "Per eliminare completamente un oggetto dalla
memoria, impostare la variabile oggetto su Nothing".
Allora mi sembra di capire che questo non sia molto utile per il recordset.


 Lo so, son maniaco, perdonami..... :)))))
Anch'io uso le soluzioni che hai indicato :)
Spiegavo solo per quale motivo qualcuno potrebbe usare l'assegnamento a
stringa vuota di cui sopra.
termoPilucco

 
Cerca nella guida "Rilascio di componenti ActiveX", oppure Nothing
ciao


Allora mi sembra di capire che questo non sia molto utile per il recordset.
L'obiettivo e' differente.
con Close tu chiudi una connessione con una base dati. L'oggetto pero'
esiste ancora.
con Nothing tu esplicitamente indichi al garbage collector che
quell'oggetto non ti serve piu', e quindi che per quanto riguarda
quello specifico riferimenti la memoria allocata per l'oggetto puo'
essere liberata. ATTENZIONE. Non e' una deallocazione esplicita, ma
uno sganciare dall'oggetto puntato il riferimento. Questo significa
che se hai piu' riferimenti allo stesso oggetto, quest'ultimo rimarrà
ben presente in memoria almeno fino al momento non sarà da esso
sganciato l'ultimo riferimento tramite un'assegnazione a Nothing.
Ciao!
Luca

 sganciato l'ultimo riferimento tramite un'assegnazione a Nothing.
Ok, è chiaro! Grazie mille!!!
Ciao...Ciao!
