• User Attivo

    Errore non specificato...

    In un sito che ho sviluppato con ASP e Access "qualche volta" senza una logica individuabile mi segnala questo errore: "errore non specificato" e segnala il numero di riga dove si apre la connessione al database (objConn.Open = "DSN=....."). La connessiona al database si apre all'apertura di ogni pagina ma libero sempre le risorse ed uso recordset disconnessi per non impegnare il server.
    Non credo ci siano errori nel codice asp altrimenti me lo darebbe sempre e non qualche volta, poi ho controllato...

    Da cosa può dipendere secondo voi?


  • Moderatore

    Ciao Web.At.Work!
    prova a non utilizzare esplicitamente oggetti Connection ma solo Recordset come nell'esempio che segue (in particolare nella stringa di connessione NON usare DSN):

    
        Dim mSQL
        mSQL = "Select * from MyTable;"
        Set RS = Server.CreateObject("ADODB.RecordSet")
        Conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/mdb-database/my_database.mdb")
        RS.Open mSQL, Conn, adOpenKeyset , adLockOptimistic, adCmdText
    
    

    Le costanti adOpenKeyset , adLockOptimistic, adCmdText sono definite nel file adoconsts.asp.txt allegato (rinomina il file con adoconsts.asp ed includilo nelle tue pagine asp che accedono a database).


  • User Attivo

    dichiara l'oggetto connessione e usa quello, inoltre usa il connection mode adModeReadWrite

    fammi sapere,
    ciao


  • Moderatore

    Se usi recordset disconnessi, con o senza l'oggetto Connection, assicurati che Tutte le costanti ADO che eventualmente utilizzi (per esempio quelle citate nel precedente post) siano definite. Includendo il file allegato dovresti risolvere 😉


  • Moderatore

    @madai said:

    ... inoltre usa il connection mode adModeReadWrite

    ...dipende da cosa deve fare la singola query: solo leggere, solo scrivere, leggere e scrivere, ecc...
    è bene documentarsi da subito sulle differenze nelle modalità di apertura di connessioni e recordset per avere il massimo delle performance (non percettibili per db piccoli, importanti per db di medie, fondamentali per db di grandi dimensioni - anche se in questo caso non userei MS Access -)

    :ciauz:


  • User Attivo

    Bene, ho fatto alcune prove e sembra che quella da voi suggerita sia la soluzione giusta!!!
    Ovviamente vi ringrazio alla grande!
    Per quanto riguarda l'inclusione del file con le dichiarazioni delle costanti ado forse posso farne a meno perchè io uso sempre i numeri:

    
    RS.Open mSQL, Conn, adOpenKeyset , adLockOptimistic, adCmdText
    
    

    per me è:

    
    RS.Open mSQL, Conn, 1, 3, 1
    
    

    adUseClient = 3 ecc.

    è la stessa cosa o è meglio comunque includere il file?

    CIAO!!!


  • Moderatore

    Bene,
    usare i valori o i nomi delle costanti è la stessa cosa,
    se usi i nomi però il codice è più leggibile e manutenibile.
    :ciauz:


  • User Attivo

    Si ma per fare le insert e le update devo fare un conn.open prima o poi sennò non me la riconosce la connessione! Non so se mi sono spiegato..


  • Moderatore

    Ovviamente, scusatemi sono stato poco chiaro.
    L'utilizzo del (solo) oggetto recordset, evidentemente, è consigliabile solo se si devono leggere dei dati dal DB (e magari clonarli su altri recordset disconnessi)...


  • User Attivo

    No, no eri stato chiarissimo, è solo che ora sono un po' in crisi...
    Senze l'utilizzo del DSN il problema sembra sparire, credi che la apertura dell'oggetto Connessione possa ripropormi il problema?


  • User Attivo

    Poi, non credi che sia più performante il tipo di cursore adLockReadOnly, per la sola lettura, appunto?


  • Moderatore

    No, il problema non era sull'utilizzo o meno della connection.
    Il problema stava nel DSN perchè, va bene quando lavori sul tuo pc (server web locale), quando invece pubblichi le pagine sul server remoto, le cose non vanno più come prima in quanto sul server web reale (quello del tuo hoster) non puoi (probabilmente) configurare nessuna origine dati ODBC (compresi: DSN di sistema, DSN Utente, DSN su file, ecc...).

    Poi, non credi che sia più performante il tipo di cursore adLockReadOnly, per la sola lettura?

    Sicuramente si!
    :ciauz: