Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di rs125
    Registrato dal
    May 2008
    Messaggi
    193

    [VB6]Problema di connessione al DB

    Ragazzi...ho un problemino.Con questa funzione mi rimane la connessione al db aperta.Non riesco a capire come chiuderla.Ecco il codice:

    codice:
    Option Explicit
    Public Function ControlloPassword(ByRef adoCN As ADODB.Connection, ByVal sPathMDB As String, Optional ByVal sPasswordDB As String = "") As Boolean
        
        Dim sqlExecStr As String
        Dim iOldMode As ADODB.ConnectModeEnum
        Dim sConnectionString As String
        Dim sOldpassword As String
        Dim sNewPassword As String
        Dim bOnTransaction As Boolean
        
        On Error GoTo ERR_HANDLER
        
        Rem ------------------------------------------------------------
        Rem La connessione è già aperta, verifico se è esclusiva
        Rem ------------------------------------------------------------
        If Not adoCN Is Nothing Then
            iOldMode = adoCN.Mode   ' annoto la modalità precedente
            If adoCN.Mode <> adModeShareExclusive Then
                    adoCN.Close     ' chiudo la connessione
                End If
            End If
            
        Rem ------------------------------------------------------------
        Rem Se il cursore non è Server chiudo la connessione, se è aperta
        Rem ------------------------------------------------------------
        If Not adoCN Is Nothing Then
            If adoCN.CursorLocation <> adUseServer Then
                If adoCN.State = adStateOpen Then
                    adoCN.Close
                End If
            End If
        End If
        
        Rem ------------------------------------------------------------
        Rem Riapro la connessione in modalità esclusiva e lato Server
        Rem per poter usare una trasazione nel caso di errori.
        Rem ------------------------------------------------------------
        sPathMDB = App.path & "\" & "database.mdb"
        With adoCN
            .CursorLocation = adUseServer
            .Mode = adModeShareExclusive
            .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPathMDB '& ";;Jet OLEDB:Database Password=" & sPasswordDB
        .BeginTrans
        GoTo APRI
        Exit Function
        .CommitTrans
            bOnTransaction = False
        .Close
        End With
        Exit Function
    
    Rem ------------------------------------------------------------
    APRI:
        If MsgBox("Nessuna password impostata.Vuoi Impostarla adesso?", vbYesNo, "Impostazione Password") = vbYes Then
                    sNewPassword = InputBox("Inserisci la nuova password:", "Password")
        
                    AddDBPassword CN, sPathMDB, sNewPassword
                Else
                    MsgBox "Sarà per la prossima volta!!", vbOKOnly, "Impostazione Password"
                End If
    
    ERR_HANDLER:
        If Err.Number = -2147217843 Then
        If MsgBox("Password già impostata!!Vuoi modificarla?", vbYesNo, "Controllo Password:") = vbYes Then
        
            sOldpassword = InputBox("Inserisci la vecchia password:", "Password")
         
            sNewPassword = InputBox("Inserisci la nuova password:", "Password")
    
            ChangeDBPassword CN, sPathMDB, sOldpassword, sNewPassword
        Else
            MsgBox "La potrai impostare quando vorrai!"
        Exit Function
        
        End If
        End If
        If Err.Number = 3705 Then
            adoCN.Close
    '        ControlloPassword CN, sPathMDB, sPasswordDB
        End With
        End If
    Exit Function
        End Function
    Tramite questa funzione io verifico se è già stata impostata una password o no.Però mi sorge un problema e mi dice che non la può modificare perchè l'oggetto è aperto.Perchè?
    Ciao

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Devi indicare la riga che provoca il messaggio di errore, e quando si verifica.


    Ciao

  3. #3
    Utente di HTML.it L'avatar di rs125
    Registrato dal
    May 2008
    Messaggi
    193
    OK,pensavo fosse colpa di qualche mio errore e con una tua analisi riuscivi a trovare il problema.Cmq l'errore si verifica dove evidenziato nel codice e mi dice:
    codice:
    Errore di run-time '3705':
    L'operazione non è consentita se l'oggetto è aperto.
    Qeusto è il codice per intero.
    codice:
    Option Explicit
    Public Function ControlloPassword(ByRef adoCN As ADODB.Connection, ByVal sPathMDB As String, Optional ByVal sPasswordDB As String = "") As Boolean
        
        Dim sqlExecStr As String
        Dim iOldMode As ADODB.ConnectModeEnum
        Dim sConnectionString As String
        Dim sOldpassword As String
        Dim sNewPassword As String
        Dim bOnTransaction As Boolean
        
        On Error GoTo ERR_HANDLER
        
        Rem ------------------------------------------------------------
        Rem La connessione è già aperta, verifico se è esclusiva
        Rem ------------------------------------------------------------
        If Not adoCN Is Nothing Then
            iOldMode = adoCN.Mode   ' annoto la modalità precedente
            If adoCN.Mode <> adModeShareExclusive Then
                    adoCN.Close     ' chiudo la connessione
                End If
            End If
            
        Rem ------------------------------------------------------------
        Rem Se il cursore non è Server chiudo la connessione, se è aperta
        Rem ------------------------------------------------------------
        If Not adoCN Is Nothing Then
            If adoCN.CursorLocation <> adUseServer Then
                If adoCN.State = adStateOpen Then
                    adoCN.Close
                End If
            End If
        End If
        
        Rem ------------------------------------------------------------
        Rem Riapro la connessione in modalità esclusiva e lato Server
        Rem per poter usare una trasazione nel caso di errori.
        Rem ------------------------------------------------------------
        sPathMDB = App.path & "\" & "database.mdb"
        With adoCN
            .CursorLocation = adUseServer
        .Mode = adModeShareExclusive
            .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPathMDB '& ";;Jet OLEDBatabase Password=" & sPasswordDB
        .BeginTrans
        GoTo APRI
        Exit Function
        .CommitTrans
            bOnTransaction = False
        .Close
        End With
        Exit Function
    
    Rem ------------------------------------------------------------
    APRI:
        If MsgBox("Nessuna password impostata.Vuoi Impostarla adesso?", vbYesNo, "Impostazione Password") = vbYes Then
                    sNewPassword = InputBox("Inserisci la nuova password:", "Password")
        
                    AddDBPassword CN, sPathMDB, sNewPassword
                Else
                    MsgBox "Sarà per la prossima volta!!", vbOKOnly, "Impostazione Password"
                End If
    
    ERR_HANDLER:
        If Err.Number = -2147217843 Then
        If MsgBox("Password già impostata!!Vuoi modificarla?", vbYesNo, "Controllo Password:") = vbYes Then
        
            sOldpassword = InputBox("Inserisci la vecchia password:", "Password")
         
            sNewPassword = InputBox("Inserisci la nuova password:", "Password")
    
            ChangeDBPassword CN, sPathMDB, sOldpassword, sNewPassword
        Else
            MsgBox "La potrai impostare quando vorrai!"
        Exit Function
        
        End If
        End If
        If Err.Number = 3705 Then
    '        adoCN.Close
    '        ControlloPassword CN, sPathMDB, sPasswordDB
        End If
    Exit Function
        End Function
    Avevo provato a chiuderlo direttamente ma mi dice che durante una transazione di dati non si può chiudere.Come posso risolvere?Grazie
    Ciao

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prima di valutare il codice alla ricerca del problema, non capisco il perche' di questa "architettura" ...

    In particolare non comprendo perche' passare alla funzione un oggetto connection.

    Il path del db dovrebbe bastare.

    Tenti di aprire una nuova connessione in modo esclusivo e controlli che la cosa possa essere fatta senza errori ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di rs125
    Registrato dal
    May 2008
    Messaggi
    193
    Originariamente inviato da oregon
    Prima di valutare il codice alla ricerca del problema, non capisco il perche' di questa "architettura" ...

    In particolare non comprendo perche' passare alla funzione un oggetto connection.

    Il path del db dovrebbe bastare.

    Tenti di aprire una nuova connessione in modo esclusivo e controlli che la cosa possa essere fatta senza errori ...
    Questo è parte del codice che ha usato gibra nei suoi programmi. Non l'ho architettato tutto da solo.Ora saresti così gentile da aiutarmi?
    Ciao

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da rs125
    Ora saresti così gentile da aiutarmi?
    Guarda che con ogni risposta cerco di aiutare.

    In ogni caso, mi sembra strano (e sbagliato) quell'uso di

    GoTo APRI
    Exit Function

    in mezzo alla With..End With ...

    Non e' da Gibra ...

    Inoltre dovresti dire come chiami questa funzione nel tuo programma.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di rs125
    Registrato dal
    May 2008
    Messaggi
    193
    Originariamente inviato da oregon
    Guarda che con ogni risposta cerco di aiutare.

    In ogni caso, mi sembra strano (e sbagliato) quell'uso di

    GoTo APRI
    Exit Function

    in mezzo alla With..End With ...

    Non e' da Gibra ...

    Inoltre dovresti dire come chiami questa funzione nel tuo programma.
    No,infatti ti ho detto...questo è PARTE del codice di gibra,non tutto...poi l'ho modificato e funziona ma c'è qualche problemino da risolvere.
    Ciao

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da rs125
    Questo è parte del codice che ha usato gibra nei suoi programmi.
    Specifico: questa è parte del codice usato in un programma di un esempio didattico .
    Ti ho già specificato in altri tuoi post (perchè ne hai aperti più di uno per lo stesso problema, e non va bene) che quel codice è solo un esempio didattico, ma che in un programma reale non si deve mai consentire ad un'utente di modificare la password del database .
    E' sbagliato proprio il concetto. Se poi vuoi farti male da solo, padronissimo.

    Originariamente inviato da oregon

    GoTo APRI
    Exit Function

    in mezzo alla With..End With ...

    Non e' da Gibra ...
    Infatti... non è roba mia.


    Ciao

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da rs125
    No,infatti ti ho detto...questo è PARTE del codice di gibra,non tutto...poi l'ho modificato e funziona ma c'è qualche problemino da risolvere.
    Sì, ma avevi fatto capire che il codice fosse "a posto" solo perchè non tuo.

    Se avessi detto "in cosa" hai modificato il codice "originale", avresti fatto capire meglio.

    Non c'e' "qualche problemino" da risolvere, ma parecchi problemi. E quel goto e' solo un esempio (abbastanza grave ...).

    Ora, potresti rispondere a quello che ti avevo proposto qualche post fa ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di rs125
    Registrato dal
    May 2008
    Messaggi
    193
    Originariamente inviato da gibra
    Specifico: questa è parte del codice usato in un programma di un esempio didattico .
    Ti ho già specificato in altri tuoi post (perchè ne hai aperti più di uno per lo stesso problema, e non va bene) che quel codice è solo un esempio didattico, ma che in un programma reale non si deve mai consentire ad un'utente di modificare la password del database .
    E' sbagliato proprio il concetto. Se poi vuoi farti male da solo, padronissimo.



    Infatti... non è roba mia.


    Ciao
    No,il programma sarà solo per me e poi cmq per altri utenti ho tolto la possibilità di poter effettuare un cambio di password.Cmq visto che non mi aiutate provo a metterlo apposto da solo.Grazie lo stesso...
    Ciao

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.