Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Ines_70
    Guest

    Microsoft jet oledb 4.0

    Eccoci ci risiamo, ancora problemi sulla connessione dinamica ai miei DB.
    Seguendo i vari consigli che ho attinto dal forum, mi sono portata avanti, ma adesso sono dinuovo in panne!!!
    Ho n database Access 2000, tutti con la medesima struttura e devo rendere dinamica la connessione per poter scegliere il database di mio interesse che ovviamente differisce dagli altri solo per il nomefile.

    Dietro consiglio di Xegallo ho creato una connessione dataenvironment statica ad uno dei miei DB.
    Per renderla dinamica ho usato il metodo seguente:

    codice:
        DE.cn1.ConnectionString = "provider =microsoft.jet.oledb.4.0;" & "data source = " & "c:\progetto\1.mdb" & ";"
        DE.rsdefinizione.Open
        DE.rsdefinizione!citta = "Potenza"
        DE.rsdefinizione.Update
        DE.rsdefinizione.Close
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        DE.cn1.ConnectionString = "provider =microsoft.jet.oledb.4.0;" _
        & "data source = " & "c:\progetto\2.mdb" & ";"
        DE.rsdefinizione.Open
        DE.rsdefinizione!citta = "Potenza"
        DE.rsdefinizione.Update
        DE.rsdefinizione.Close
    Pensavo di aver risolto ma purtroppo non è così, infatti se ripeto il blocco di istruzioni per due volte, quando tento di cambiare il DB da connettere, cominciano i grattacapi:
    il debug mi dice:
    errore di run-time '3705':
    L'operazione non è consentita se l'oggetto è aperto

    se chiudo cn1 con l'istruzione:

    codice:
    de.cn1.close
    mi da il debug mi dice:
    L'operazione non è consentita se l'oggetto è chiuso.
    Riepilogando, se lascio aperto mi dice che non è possipile fare l'operazione sull'oggetto aperto; se chiudo, mi dice che non è possibile effettuare l'operazione sull'oggetto chiuso. Ho come l'impressione di sentirmi presa per i fondelli hi hi hi....
    Se qualcuno è disposto a testare il mio mini-progetto che compreso di archivi e zippato, pesa meno di 100k, posso postarlo.
    Ringrazio sin da ora chi vorrà aiutarmi.

  2. #2
    prima di chiudere la connessione
    codice:
    if de.cn1.state = adstateopen then
       de.cn1.close
    end if
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  3. #3
    Ines_70
    Guest
    Dunque, quel test che mi fai fare rileva se la connessione è già aperta e la chiude, e fin qui tutto fila liscio come l'olio, ma l'inchippo è che se chiudo de.cn1, non me lo fa più riaprire!!!
    Se digito il codice
    codice:
    DE.cn1.ConnectionString = "provider =microsoft.jet.oledb.4.0;" 
    _ & "data source = " & "c:\progetto\1.mdb" & ";"
    mi dice che l'operazione non si piò fare se l'oggetto è chiuso.
    Forse in effetti così non si riesce a capire bene, comunque, Ho postato il progetto ad un utente del forum (Markho) che si è offerto volontario per il test. Non appena ho la soluzione ti farò sapere.
    Grazie comunque

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    22
    Dopo che chiudi la connessione con il test dell'IF, subito dopo devi di nuovo creare l'oggetto Connection quindi reinserire l'istruzione
    Set Cn = new Adodb.connection

    Almeno credo....
    Gian

  5. #5
    Originariamente inviato da sint2001
    Dopo che chiudi la connessione con il test dell'IF, subito dopo devi di nuovo creare l'oggetto Connection quindi reinserire l'istruzione
    Set Cn = new Adodb.connection

    Almeno credo....
    non serve ricrearla basta riaprirla l'oggetto non è stato distrutto
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  6. #6
    Ines_70
    Guest
    Scusami X, sono nel pallone, non ci capisco più nulla, pensavo di averci capito qualcosa ma sono nel caos mentale più totale. Un utente del forum ha stravolto completamente il mio progetto in quanto mi sconsiglia l'utilizzo del dataEnvironment, ed io ho accettato il suo consiglio in quanto debbo assolutamente uscire fuori da questo blocco.

    allora ho itrapreso questa nuova strada ma ci sono i soliti intoppi di percorso - Adesso mi chiedo, che motivo ha Marko per dirmi che non conviene usade il DE?????
    Lui mi ha proposto una soluzione di questo tipo, che usa lo stesso Provider:

    allora faccio le dichiarazioni:
    codice:
    Dim Conn1 As New ADODB.Connection 
    Dim Conn2 As New ADODB.Connection 
    Dim Conn3 As New ADODB.Connection 
    Dim Rs1 As New ADODB.Recordset 
    Dim Rs2 As New ADODB.Recordset 
    Dim Rs3 As New ADODB.Recordset 
    'CONTROLLO SE LE CONNESSIONI SONO GIà APERTE 
    If Conn1.State <> adStateClosed Then 
    Conn1.Close 
    End If 
    If Conn2.State <> adStateClosed Then 
    Conn2.Close 
    End If 
    If Conn3.State <> adStateClosed Then 
    Conn3.Close 
    End If 
    
    'APRO LE CONNESSIONI: 
    
    Conn1.Open "provider =microsoft.jet.oledb.4.0;" & "data source = 
    _ " & "c:\progetto\1.mdb" & ";" 
    Conn2.Open "provider =microsoft.jet.oledb.4.0;" & "data source = 
    _ " & "c:\progetto\2.mdb" & ";" 
    Conn3.Open "provider =microsoft.jet.oledb.4.0;" & "data source =
    _ " & "c:\progetto\3.mdb" & ";" 
    
    'controllo che le recordset non siano già aperte,
    'altrimenti le chiudo: 
    
    If Rs1.State <> adStateClosed Then 
    Rs1.Close 
    End If 
    If Rs2.State <> adStateClosed Then 
    Rs2.Close 
    End If 
    If Rs3.State <> adStateClosed Then 
    Rs3.Close 
    End If 
    ' RENDO ATTIVI I RECORDSET 
    Rs1.Open "select * from definizione_paese", Conn1 
    Rs2.Open "select * from definizione_paese", Conn2 
    Rs3.Open "select * from definizione_paese", Conn3 
    'FACCIO TUTTE LE OPERAZIONI NECESSARIE 
    'MA QUI VIENE IL BELLO: 
    'ho tentato di aggiungere un nuovo record ma il debug mi dice che : 
    'IL SET DI RECORD CORRENTE NON SUPPORTA L'AGGIORNAMENTO -
    'POTREBBE 'TRATTARSI DI UNA LIMITAZIONE DEL PROVIDER O DEL
    'TIPO DI BLOCCO SELEZIONATO 
    'LA RIGA DI CODICE CHE HO DIGITATO è: 
    
    Rs1.AddNew
    
    'Ovviamente non ho provato altro, tipo movelast 
    'movefirst update delete etc etc. 
    
    'quando ho finito chiudo prima i recordset
    '(controllando che non lo siano già!!!) 
    If Rs1.State <> adStateClosed Then 
    Rs1.Close 
    End If 
    If Rs2.State <> adStateClosed Then 
    Rs2.Close 
    End If 
    If Rs3.State <> adStateClosed Then 
    Rs3.Close 
    End If 
    
    'poi, se non devi aprire più recordset chiudi le 
    'connessioni (sempre controllando che non lo siano già!!!) 
    If Conn1.State <> adStateClosed Then 
    Conn1.Close 
    End If 
    If Conn2.State <> adStateClosed Then 
    Conn2.Close 
    End If 
    If Conn3.State <> adStateClosed Then 
    Conn3.Close 
    End If
    Ora vorrei solo un consiglio: cosa uso, DE o la soluzione
    consigliata da Marko????

  7. #7
    ma quante connessioni dovresti avere?
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  8. #8
    Ines_70
    Guest
    Allora, cerco di spiegarmi, la connessione che ogni terminale dovrà effettuare, è al massimo una. Deve essere di tipo dinamica e di questo ne abbiamo già discusso, il problema è che passando da una connessione all'altra mi genera degli erori che potrai vedere leggendo i messaggi precedenti.
    il codice
    codice:
     DE.cn1.ConnectionString = "provider =microsoft.jet.oledb.4.0;" _
    & "data source = " & "c:\progetto\1.mdb" & ";"
        DE.rsdefinizione.Open
        DE.rsdefinizione!citta = "Pescara"
        DE.rsdefinizione.Update
        DE.rsdefinizione.Close
     ''''''''''''''''''''''''''''''''
        DE.cn1.ConnectionString = "provider =microsoft.jet.oledb.4.0;" _
        & "data source = " & "c:\progetto\2.mdb" & ";"
        DE.rsdefinizione.Open
        DE.rsdefinizione!citta = "Pescara"
        DE.rsdefinizione.Update
        DE.rsdefinizione.Close
    +
    non è altro che la simulazione della dinamicità del DE; i db 1.mdb e 2.mdb sono db identici nella struttura, tanto per intenderci sono il contenuto della variabile miodb che tu stesso mi hai consigliato di usare per passare il parametro data source.
    Purtroppo si genera un errore senza Help.
    Spero di essere stata un po più chiara!!!!

  9. #9
    Ines_70
    Guest
    Finalmente ho risolto il problema di rendere dinamica una connessione DataEnvironment, l'errore che veniva generato era dato dal fatto che non svuotavo l'oggetto connessione prima di generare la nuova ad un altro database.
    Basta fare così:
    codice:
    Set De = Nothing
    Ciao a tutti:quote: :quote: :quote: :quote:

  10. #10
    Ciao, allora ci sei riuscita
    alla prossima

    bye bye
    ...e quando meno te lo aspetti potrebbe capitare qualcosa di bello, di più importante di quello che avevi programmato...

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.