Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    167

    Controllo presenza record prima di eseguire una query

    Sto provando ad aggiornare alcune pagine ASP dedicate alla gestione di un piccolo DB Access.
    In pratica vorrei abbandonare il seguente metodo per la cancellazione dei record:

    codice:
    Set Conn=Server.CreateObject("ADODB.Connection")
    Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("db.mdb")
    Set Rs=Server.CreateObject("ADODB.RecordSet")
    Sql="Select * from Tabella"
    Rs.Open Sql, Conn, 2,2
    
    if Rs.eof then
    session("messaggio") = "Non è presente nessun record"
    response.redirect "errore.asp"
    else
    session("messaggio") = "Record eliminato correttamente"
    response.redirect "conferma.asp"
    
    (manca il codice di chiusura della chiamata al DB)
    per passare a quello eseguito direttamente dalla query:

    codice:
    dim conn, rs
    set conn=Server.CreateObject("ADODB.Connection")
    conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("db.mdb")
    sql = "DELETE * FROM Tabella"
    set rs = conn.execute(sql)
    
    if rs.eof then
    session("messaggio") = "Non sono presenti record da eliminare"
    response.redirect "errore.asp"
    end if
    
    conn.close()
    set conn=nothing
    
    session("messaggio") = "Record eliminato correttamente"
    response.redirect "conferma.asp"

    In questo modo però mi restituisce il seguente errore nella linea che richiama il controllo sulla presenza di record nella tabella (if rs.eof then):

    ADODB.Recordset error '800a0e78'
    Operation is not allowed when the object is closed.


    Non riesco a capire :master:

  2. #2
    Utente di HTML.it L'avatar di Mizushi
    Registrato dal
    Aug 2005
    Messaggi
    1,125
    codice:
    Set Rs=Server.CreateObject("ADODB.RecordSet")
    ....
    Rs.Open Sql, Conn, 3, 3

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    167
    ops scusa, forse non si capiva dal mio primo post..

    l'errore restituito è relativo al secondo codice postato; il primo l'ho copia-incollato solo per fare l'esempio del cambiamento che sto provando ad apportare alle pagine

  4. #4
    Utente di HTML.it L'avatar di Mizushi
    Registrato dal
    Aug 2005
    Messaggi
    1,125

    Re: Controllo presenza record prima di eseguire una query



    codice:
    dim conn, rs
    set conn=Server.CreateObject("ADODB.Connection")
    
    Set Rs=Server.CreateObject("ADODB.RecordSet")
    
    conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("db.mdb")
    sql = "DELETE * FROM Tabella"
    set rs = conn.execute(sql)
    
    if rs.eof then
    session("messaggio") = "Non sono presenti record da eliminare"
    response.redirect "errore.asp"
    end if
    
    conn.close()
    set conn=nothing
    
    session("messaggio") = "Record eliminato correttamente"
    response.redirect "conferma.asp"

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    167
    veramente l'errore è relativo al controllo if rs.eof then... con il quale verifico se ci sono o meno records da eliminare.

    se lo metto in quella posizione mi viene restituito l'errore che ho scritto sopra: Operation is not allowed when the object is closed.

    non sono forse riuscito a spiegare la mia problematica?

  6. #6
    fai in modo che se non ci sono record non chiudi il recordset, capita anche a me..
    - - - Codice Alpha - - -
    lo sapevi? www.no1984.org

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    167
    veramente nel codice che ho postato non ci sono comandi che chiudono il recordset, è quello che non riesco a capire

  8. #8
    Originariamente inviato da Leggero82
    veramente nel codice che ho postato non ci sono comandi che chiudono il recordset, è quello che non riesco a capire
    nel tuo posto hai scritto ad un certo punto..


    (manca il codice di chiusura della chiamata al DB)


    objRs.Close (per intenderci)
    - - - Codice Alpha - - -
    lo sapevi? www.no1984.org

  9. #9
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Ad una query che non restituisce un recordset (come una DELETE) e' sempre possibile associare un parametro che viene riempito da ADO con il numero di record coinvolti nella query stessa... pertanto dopo l'istruzione

    conn.execute "DELETE * FROM Tabella", quanti

    in quanti ritroverai il numero di records cancellati oppure 0 se nessun record e' stato eliminato.

    Con queste premesse realizzare il controllo che ti serve dovrebbe essere semplice...

    ciao

    ps: l'errore lo ricevi proprio perche' la tua query non restituisce un recordset...
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    167
    grazie br1, ora provo

    codicealpha: la prima parte di codice che avevo postata era messa lì solamente per fare un esempio del codice che volevo cambiare.
    l'errore si riferiva al secondo pezzo di codice postato.

    forse in effetti postando il primo esempio ho fatto un po' di confusione..

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.