Newsgroup: it.comp.lang.visual-basic
Titolo: Da DAO a ADO

Salve, ho un problema. Dunque premetto che ho sempre programmato con Visual
Basic 6 per lavorare con semplici database (dbIII) e accedevo ad essi con
l'oggetto "Data".
Da un po' di tempo mi interesso ad "Ado" che credo sia meglio, facendo la
connessione ai miei database con ODBC. Vi posto il codice che uso:
    Dim CN As Connection
    Set CN = New Connection
    CN.Open "DSN=Test;"
    Dim Recset As ADODB.Recordset
    Set Recset = New ADODB.Recordset
    Set Recset.ActiveConnection = CN
    Recset.Source = "select * from magarmag"
    Recset.Open
        Call PopLw1 'Popola una listview
    CN.Close
Fin qua tutto bene, riesco a fare le query che mi servono e sembra anche
stabile. Il mio problema č che ho a che fare con circa 10000 record in un
file solo e dovrei visualizzarli tutti insieme. Con l'oggetto "Data"
inserivo il collegamento, mettevo una DbGRID collegata ad esso ed ottenevo
ciň che mi serviva in maniera istantanea, ma ora come faccio? La dbgrid non
va piů e non riesco a trovare qualcosa di alternativo. La Listview č troppo
lenta a caricare i record, uso il ciclo e impiega + di 6 secondi. Mi
servirebbe qualcosa simile alla (dbgrid+data). Avete suggerimenti? Grazie a
presto, Stefano.

 ha scritto nel messaggio
news:IKfic.135169$rM4.5...@news4.tin.it...

non potresti usare datagrid e adodc??


Se e' un controllo a tabella quello che cerchi, puoi utilizzare in
alternativa il Microsoft DataGrid control oppure il Microsoft
Hierarchical FlexGrid Control.
Per lista  e combo box, Microsoft DataList Controls.
NOTA. puoi fornire a questi controlli tanto un riferimento al Data
Control che un riferimento diretto al recordset.
Ciao!
Luca

Ho provato ad utilizzare l'oggetto "Datagrid" ma con scarsi risultati... o
meglio, con l'oggetto adodc funziona, ma da codice no.
Infatti se scrivo l'istruzione
        Set DataGrid1.DataSource = Recset
In runtime da un errore del tipo: "Impossibile assegnare segnalibri al
gruppo di righe (errore 7004)"
Mentre stesso codice con adodc funziona. Ma non volevo usare l'oggetto adodc
per aprire il database, vorrei usare uno "script" mio, come posso fare?
Grazie di tutto.

        Set DataGrid1.DataSource = Recset
Occhio che se vuoi che funzioni non devi chiudere la connessione o il
recordset prima di chiudere la lista!!!!
--
Ciao!
Luca Menegotto

 ha scritto nel messaggio
news:81ck805l7efu90ms8...@4ax.com...

Si certo, ma non va lo stesso.. Stavo guardando degli esempi sul sito del
news, vedo che è possibile ma non mi è chiaro...
Sotto il codice che ho trovato:
RS.Open QR, CN, adOpenDynamic, adLockBatchOptimistic
' viene usato il blocco "adLockBatchOptimistic" per poter modificare il
' contenuto delle celle di DataGrid1, senza che avvenga l'immediata
' registrazione nel database quando si passa dalla cella modificata
' ad un'altra cella.
DataGrid1.Caption = nomeTabella
DataGrid1.AllowAddNew = False   'non aggiunge la riga per l'inserimento di
                                'un nuovo record
DataGrid1.AllowUpdate = True    'consente la modifica del testo delle celle
Set DataGrid1.DataSource = RS   'costruisce la griglia del DataGrid1 e vi
                                'trasferisce i dati del recordset

Ho risolto in questo modo:
    Dim CN As Connection
    Set CN = New Connection
    CN.Open "DSN=Test;"
    Dim Recset As ADODB.Recordset
    Set Recset = New ADODB.Recordset
    Set Recset.ActiveConnection = CN
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
QR = "SELECT * FROM MAGARMAG"
'--------------------
'queste istruzioni sono inserite unicamente per mostrare come è
'possibile modificare l'intestazione di una colonna;
'nell'esempio, la prima colonna è sempre intitolata "colonna 1".
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Recset.Source = "select * from ABI"
    Recset.CursorLocation = adUseClient
    Recset.Open QR, CN, adOpenDynamic, adLockBatchOptimistic
    Set DataGrid1.DataSource = Recset   'costruisce la griglia del DataGrid1
e vi
                                'trasferisce i dati del recordset
    Call PopLw1 'Popola una listview
    'Recset.Close
    'CN.Close
Ora cerco di capire perchè funziona.. :-) Ciao e grazie ancora!