Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    116

    Il recordset resta aperto dopo errore applicazione gestito

    Salve a tutti, ho un dubbio da un po' di tempo...
    Perchè l'oggetto RecordSet in presenza di un errore dell'applicazione, gestita, non viene chiuso?
    Proprio oggi ho ripreso un vecchio script nel quale la gestione dell'errore non chiude il recordset e non mi permette di invocare un'altra sub nella quele io posssa usare lo stesso oggetto. So che da spiegare è un casino...posto un po' di codice:
    Codice PHP:
    ApriConn()
        
    'Imposto il recordset
    Set objRs = Server.CreateObject("ADODB.RecordSet")

    '
    Aggiorno il DB se non sono stati riscontrati errori in fase di compilazione del modulo
    If Not (blnErroreModuloThen aggiornaBaseDati()

    If (
    blnErroreApplicazioneThen impostaMarche()
        
    Set objRs Nothing
    ChiudiConn
    () 
    In aggiornaBaseDati() gestisco l'errore di applicazione con il classico On Error Resume Next...altro codice:

    Codice PHP:
    Sub aggiornaBaseDati()
    On Error Resume Next
    'Query
    strSql = "SELECT * FROM tabella"
    '
    Tipo di cursore per la navigazione nel recset Foreward Only
    objRs
    .CursorType 0
    'Tipo di blocco per l'aggiornamento sul recset 
    objRs
    .LockType 3
    'Apro recset
    objRs.Open strSql, objCn
    '
    Inserisco il nuovo record
    objRs
    .AddNew
    objRs
    .Fields.Item("Campo").Value variabile
    'Aggiorno
    objRs.Update
    '
    Chiudo RecordSet
    objRs
    .Close

    'Gestisco, se presente, l'errore dell'applicazione
    If Err.Number <> 0 Then
        '
    Attivo errore applicazione
        blnErroreApplicazione 
    True
        On Error 
    GoTo 0
    End 
    If

    End Sub 
    In impostaMarche() popolo una select dinamica utilizzado alcuni campi del DB. Fin qui nessun porblema. Ma se dovesse esserci un errore di applicazione, gestito in precedenza nella Sub aggiornaBaseDati(), la sub impostaMarche() non può utilizzare il recordset, in questo caso objRs, perchè aperto.

    Come fare? Vi è mai capitato?

    Ciao a tutti....

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    116
    A questo punto suppongo non sia capitato a nessuno....

    La mia perplessità è questa: Un operazione sul recordset aperto va in errore, come posso gestirlo e chiudere correttamente il recordset?

    Qui il problema è che il recordset resta bloccato senza possibilità di riutilizzo.

    Secondo voi utillizzare lo stesso oggetto per eseguire piu' operazioni sulle tabelle è performante? o conviene istanziare nuovi oggetti?

    ^^^^^^^^^^^^^^^^^^^ Grazie...

  3. #3
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    Io per inserimenti, modifiche e cancellazione dati utilizzo direttamente sql, senza utilizzare i recordset.

    in questo modo è più veloce e hai meno problemi.

    Comunque se proprio vuoi utilizzare il recordset chiudilo dentro la gestione dell'errore, così risolvi....
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    116
    Qui è il problema, lo chiudo nella gestione errori, o anche dopo, ma nel momento in cui cerco di riutilizzarlo mi dice che l'operazione non è consentita perchè l'oggetto, in questo caso objRs, è già aperto. Ho provato a verificare lo stato del recordset, con objRs.State e di conseguenza, se aperto a chiuderlo, ma niente da fare va sempre in errore.

    Volevo capire se l'oggetto resta comunque bloccato in presenza di un errore.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.