Newsgroup: it.comp.lang.visual-basic
Titolo: Consigli per uso ADODB

Buongiorno a tutti.
Ho un problema dovuto alla mia poca conoscenza di VB6 ed al fatto che non
riesco a trovare un manuale che spieghi bene come interagire con i DB.
Devo gestirne unocon 4 tabelle.
Una viene aperta subito e riesco ad utilizzarla correttamente senza
problemi.
Un’altra viene utilizzata solo per copiarci dentro un record alla volta del
primo.
Una terza mi serve soltanto all’inizio per copiarci i dati di un combobox.
Il fatto è che mentre per la prima non trovo problemi, le altre non riesco
ad utilizzarle, probabilmente per errori nella loro dichiarazione.
Specifico che la seconda e la terza mi servono solo in riposta al click su
determinati bottoni e quindi sono all’interno di due SUB.
DICHIARAZIONI CHE FACCIO NEL MIO PROGETTO:
Option Explicit
Private cnMISURE As ADODB.Connection 'Oggetto Connection per la connessione
al database
Private rsBIELLA, rsFUORI, rsSTORICO As ADODB.Recordset
Nella Load_Form()
Set cnMISURE = New ADODB.Connection
Set rsBIELLA = New ADODB.Recordset
Set rsFUORI = New ADODB.Recordset
Set rsSTORICO = New ADODB.Recordset
cnMISURE.CursorLocation = adUseServer
cnMISURE.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source = db97.mdb"
rsBIELLA.CursorLocation = adUseServer
rsFUORI.CursorLocation = adUseServer
rsSTORICO.CursorLocation = adUseServer
rsBIELLA.Open "SELECT * FROM TABELLAORDINI ORDER BY NOMINATIVO;", cnMISURE,
_
adOpenKeyset, adLockOptimistic, adCmdText
Nelle SUB dei due Command
1) rsSTORICO.Open "SELECT * FROM STORICO ORDER BY NOMINATIVO;", cnMISURE, _
adOpenKeyset, adLockOptimistic, adCmdText
2) rsTIPOLIMI.Open "SELECT * FROM TIPOLIMI ORDER BY NOMINATIVO;", cnMISURE,
_
adOpenKeyset, adLockOptimistic, adCmdText
Scusate per la lunghezza.
Mi basterebbe anche un link ad un sito dove poter acquisire le informazioni
che non conosco per risolvere questo problema.
Grazie in anticipo.
Antonio.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Buongiorno a tutti.
non ci vedo errori
ma non so che vuoi fare.....
considera la logica è questa
Apro un connessione
    recupero un comando SQL in una stringa
    2 strade:
    a) SE l'sql è una istruzione di comandi
        utilizzerei preferibilmente un Oggetto Command
        o addirittura il metodo execute della connection
        MA SOLO se non ti aspetti di ritorno un recordset
        Utile per CREATE TABLE ALTER TABLE etc etc ad esempio
    b) SE devi interagire con il risultato
        Apri un recordset
        ad es. SELECT * FROM Clienti
Il recordset lo puoi aprire in molti modi
a secondo di come vuoi gestire concorrenze o "aggiornamento in tempo reale"
dei dati inseriti da altri
la guida se fai F1 spiega molte cose
Considera che il più veloce è un cursore Forwardonly...che va solo avanti!
il peggiore Un Dynamic...casomai con lock pessimistic
Cosa ci vuoi fare dipende da te
in sintesi la cosa funziona così
1) Apro il recordset ..chiamiamolo RS
2) controllo se c'è qualcosa...metti che fai la query sql sbagliata o
l'archivio è vuoto!
IF rs.bof  then
...."un c'è nulla"
...quindi prendi provvedimenti adeguati
end if
3) Gestisco il mio recordset
ad esempio se vuoi stampare tutti i nomi e cognomi del tuo recordset
RS.movefirst (li dico di andare al primo record)
do
'stampa sulla form...o dove vuoi tu....
    me.print Rs("Nome") & Rs("Cognome")
===TIP1
la riga sopra va in errore se nel tuo database c'hai un campo a valore NULL
basta fare
(Rs("Nome") & "") e non si arrabbia più!
=============================
    rs.movenext (avanti di un record)
loop until rs.Eof (se sei alla fine dei records smetti!)
4) Chiudo il recordset
Rs.close
5) Nell'unload (ad esempio)
Chiudo la connessione
Conn.close
3-bis)
<)Aggiornare un record
ti sposti al record che ti interessa
    a) SE non l'hai aperto forwardonly o non readonly
    Rs("Nome")="Pippo"
    Rs("Cognome")="DePippis"
    Rs.Update
    b) MA ANCHE se l'hai aperto in sola lettura lo puoi aggiornare!
    basta ricorrere ad un po di sql
    Tsql= "UPDATE Clienti SET Nome='Pico' , Cognome="De Paperis"
WHRE....condizione che vuoi...ad esempio IDcliente=12
    questo sql poi lo fai eseguire da un Conn.execute...ad esempio
<)Inserire un record
    Rs.AddNew
     Rs("Nome")="Pippo"
    Rs("Cognome")="DePippis"
    Rs.Update
        ....se sei sempre con un recordset readonly.....
    aiuta sempre l' SQL
    INSERT INTO Clienti (Nome,Cognome) VALUES ('Paperetta','YeYe')
<) Cancellare
    RS.Delete
......oppure.....
    DELETE * FROM Clienti WHERE .....ad esempio.... IDcliente=12
...ricordati tutte le volte che aggieggi un recordset di aggiornare la
visualizzazione!
Se hai un griglia bound (agganciata) dovrebbe aggiornarsi da se.....
se lavori unbound (io lo preferisco..perchè voglio fare come mi pare!...e
non fidarmi di automatismi che non controllo)
invoca una funzione tua di aggiornamento visualizzazione
questo è la base di tutto...poi da qui...con F1 vai parecchio avanti!
-- 
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 Quotefix e altro:
http://www.martek.it/go.asp?portamia=4
Usr: ICLVB Pw: amici

Grazie mille sei stato gentilissimo.
In linea di massima č quello che stavo facendo io.
Controllerň.
Grazie ancora.


 adOpenKeyset, adLockOptimistic, adCmdText
Non ho visto alcuna dichiarazione di rsTIPOLIMI.
