Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    89

    Recordset disconnesso in ADO

    Ho bisogno di aiuto...
    Ho sviluppato una classe in VB6 che utilizza un ADODB.Recordset

    Vorrei chiamare la classe passando la select e la stringa di connessione ed avere come ritorno un Recordset disconnesso... ma non ci riesco !!!!

    La mia classe fa la seguente cosa :

    Public Function RecordsetOpen(ByVal strSQL As String, ByVal strConnessione As String) As ADODB.Recordset
    dim DBConn As ADODB.Connection
    Dim rstTemp As ADODB.Recordset

    Set DBConn = New ADODB.Connection
    DBConn.Open strConnessione

    Set rstTemp = New ADODB.Recordset
    rstTemp.Open strSQL, DBConn, adOpenDynamic, adLockOptimistic

    Set RecordsetOpen = rstTemp

    rstTemp.Close
    Set rstTemp = Nothing

    DBConn.Close
    Set DBConn = Nothing

    end function


    La funzione lavora correttamente ma quendo mi ritorna il recordset
    e provo ad utilizzarlo (rs.movenext esempio) mi dice che l'operazione non č consentita se il recordset č chiuso...

    Grazie

  2. #2
    Utente di HTML.it L'avatar di MMarzia
    Registrato dal
    Mar 2001
    Messaggi
    1,781
    linguaggio e versione vanno sempre specificati nel titolo, leggi il regolamento


    ti sposto nel subforum di VB
    io sono festosamente cicciottello :: e. cartman

    t'amo senza sapere come, nč quando nč da dove,
    t'amo direttamente senza problemi nč orgoglio:
    cosė ti amo perchč non so amare altrimenti

  3. #3
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Per ottenere un recordset disconnesso devi crearlo sul Client.
    E non devi chiuderlo o impostarlo a Nothing.
    Aggiungi le istruzioni che ti ho inserito e prova.

    codice:
    Public Function RecordsetOpen(ByVal strSQL As String, ByVal strConnessione As String) As ADODB.Recordset 
    dim DBConn As ADODB.Connection 
    Dim rstTemp As ADODB.Recordset 
    
    Set DBConn = New ADODB.Connection 
    DBConn.Open strConnessione 
    
    Set rstTemp = New ADODB.Recordset 
    ' ------------------------------------------------
      rstTemp.CursorLocation = adUseClient 
    ' ------------------------------------------------
    rstTemp.Open strSQL, DBConn, adOpenDynamic, adLockOptimistic 
    
    ' ------------------------------------------------
    ' Effettua la disconnessione
    ' ------------------------------------------------
      Set rstTemp.ActiveConnection = Nothing
    ' ------------------------------------------------
    
    ' Con questa istruzione fai riferimento a rstTemp con 
    ' RecordsetOpen, se chiudi e annulli (vedi istruzioni
    ' con <-- No ...) tutto si ribalta su RecordsetOpen  
    Set RecordsetOpen = rstTemp 
    
    ' rstTemp.Close <-- No 
    ' Set rstTemp = Nothing <-- Neanche  
    
    DBConn.Close 
    Set DBConn = Nothing 
    
    end function
    Ciao,
    Ciao, Brainjar

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    89
    Grazie Brainjar,
    Ho inserito le istruzioni come mi hai detto e funziona !!!!
    Sei stato gentilissimo.
    Se non ti dispiace vorrei farti alcune domande sulle 2 istruzioni che mi hai fatto inserire ovvero :
    - RecordsetOpen.CursorLocation = adUseClien
    A che cosa serve ?

    - Set RecordsetOpen.ActiveConnection = Nothing
    Se imposto la connessione di un recordset a nothing poi la posso
    riaprire per fare degli aggiornamenti ?

    Ciao

  5. #5
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Non posso darti una spiegazione molto dettagliata, ma a grandi linee
    le informazioni sono queste :

    - RecordsetOpen.CursorLocation = adUseClien(t)
    A che cosa serve ?

    Quando si crea un recordset con ADO, puoi scegliere se crearlo
    nell'applicazione Client o nell'applicazione Server.
    Anche se utilizzi solo un PC il server č la DLL di ADO che estrae
    effettivamente i records.
    Se imposti .CursorLocation = adUseServer ottieni il recordset nella
    area di memoria della applicazione Server (la DLL di ADO).

    Se imposti .CursorLocation = adUseClient ottieni il recordset nella
    area di memoria della applicazione Client (La tua Classe).
    Solo in questo caso ottieni una replica fisica dei records nel tuo
    recordset che puoi 'svincolare' dalla connessione.


    - Set RecordsetOpen.ActiveConnection = Nothing
    Se imposto la connessione di un recordset a nothing poi la posso
    riaprire per fare degli aggiornamenti ?

    Si.
    Immaginiamo che hai un solo record e un solo campo in RecordsetOpen.
    codice:
    ' Dopo la disconnessione puoi editare il campo : 
             RecordsetOpen.MoveFirst
             RecordsetOpen.Fields(0).Value = "NuovoValore"
    
    ' Per aggiornare il DB 
    ' Riapri la connessione. 
             Set DBConn = New ADODB.Connection 
             DBConn.Open strConnessione
    
    ' Riconnetti il recordset.
             RecordsetOpen.ActiveConnection = DBConn
    
    ' Esegui l'aggiornamento.
             RecordsetOpen.UpdateBatch 
    ' A questo punto hai l'aggiornamento. 
    
    ' Per essere sicuro che RecordsetOpen sia sempre coerente col DB
    ' potresti rieseguire l'estrazione
    Ciao,
    Ciao, Brainjar

  6. #6
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Ci sarebbe, per essere sicuri che le modifiche vadano in porto,
    un ulteriore istruzione da inserire :
    codice:
             ......
             ......
    
    ' Dopo la disconnessione puoi editare il campo : 
             RecordsetOpen.MoveFirst
             RecordsetOpen.Fields(0).Value = "NuovoValore"
    ' -------------- Update Esplicito -----------------  
             RecordsetOpen.Update
    ' -------------- Update Esplicito -----------------
             ......
             ......
    Ciao,
    Ciao, Brainjar

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.