Gestione RecordSet



  • Gestione RecordSet
    di §Desmo79 (utente non iscritto) data: 02/05/2014 17:42:26

    Ciao,
    da una macro effettuo una query su un DB ACCESS.

    quindi setto un oggetto con i risultato della query.
    il primo record lo gestitsco tramite l'oggetto appena utilizzato
    in questo caso l'oggetto RS (che ha 3 valori) quindi
    RS(0).value
    RS(1).value
    RS(2).value

    Come faccio a passare all'eventuale secondo, terzo, ennesimo record restituitomi dalla query settando cosi l'oggetto RS con i valori del nuovo record?

    Grazie
    Luca

     
    Dim strConn As String
    Dim cn As ADODB.Connection
    Dim strSQL As String
    Set cn = New ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim i As Integer
    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:DB.accdb;"
    cn.ConnectionString = strConn
    cn.Open
    
    strSQL = "select A,B,C from TABELLA where C = 2"
    
    Set rs = cn.Execute(strSQL)
    If IsNull(rs(0).Value) Then
        irismsg = MsgBox("Nessun dato trovato per",vbCancel)
        Exit Function
    End If
    



  • di Vecchio Frac data: 02/05/2014 21:22:59

    Ciao,
    piano piano stai facendo delle scoperte interessanti.
    E' già la terza discussione che apri su questo argomento e chiaramente adesso che hai aperto una connessione al database, scoperto come devono essere restituite le righe di record, hai bisogno di un metodo che scorra e restituisca tutte le righe di un record. Più avanti vedrai le clausole di raggruppamento e le query con parametri.

    Il metodo che ti serve sapere è .Movenext il quale fa avanzare il cursore (la posizione del record corrente) alla posizione successiva se esiste (altrimenti si genera errore).
    Il codice seguente imposta un ciclo While...Wend che scorre in avanti il recordset rs e restituisce i valori che legge dai campi desiderati. Nota come viene gestita l'assenza di record (non con IsNull!).
     
    strSQL = "select A,B,C from TABELLA where C = 2"
    Set rs = cn.Execute(strSQL)
    
    If rs.EOF and rs.BOF Then 
        irismsg = MsgBox("Nessun dato trovato per",vbCancel)
        Exit Function
    End If
    
    While not rs.EOF and not rs.BOF
        msgbox "Il valore del campo A è: " & rs!A & vbcrlf & _
    "Il valore del campo B è: " & rs!B & vbcrlf & _
    "Il valore del campo C è: " & rs!C 
    
        rs.movenext
    Wend






  • di §Desmo79 (utente non iscritto) data: 05/05/2014 11:38:58

    Risolto.
    piu che scoprire è riscoprire, avevo già utilizzato VB e VBA molti anni fa ed ero un po' arrugginito.


    Grazie ancora per l'aiuto.



    Luca