none
Access 2007 et VB 2008 RRS feed

  • Question

  • Bonjour

    Je transfère par FTP une base de données comme suit :

      My.Computer.Network.UploadFile("c:\meteo.mdb", "ftp://ftp.(...)/meteo.mdb", slogin, spassword)

    Fonctionne fort bien jusque'au jour où je décide d'y exécuter des procédures comme suit :

        Function Minuit() As Boolean
            Err.Clear()
            'On Error Resume Next
            Dim mdbDB As Access.ApplicationClass
    
            'Start Access and open the database.
            mdbDB = New Access.ApplicationClass()
            mdbDB.Visible = False
            mdbDB.OpenCurrentDatabase("c:\meteo.mdb", False)
    
            'Run the macros.
            mdbDB.Run("Calcule_TPE")
            mdbDB.Run("Calcule_TDJ_16_5")
    
            'Clean-up: Quit Access without saving changes to the database.
            mdbDB.DoCmd().Quit(Access.AcQuitOption.acQuitSaveNone)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(mdbDB)
            mdbDB = Nothing
            My.Computer.Network.UploadFile("c:\meteo.mdb", "ftp://ftp.(...)/meteo.mdb", slogin, spassword)
            Return Err.Number = 0
        End Function
    

    et j'ai cette erreur : 

    Cdt,

    Blaise

    mardi 5 juin 2012 16:27

Réponses

  • La séquence de libération me parait correcte. Ce que j'essaierais de creuser :
    - OpenDataBase ne retourne pas une base ? Si oui, j'essaierai de récupérer cette référence et de faire un close avant de quitter
    - les macros libèrent bien également tous leurs objets ?

    En gros, je pense que le problème pourrait être que l'on garde qq part (y compris dans Access ?) une référence à un objet ce qui empêche Access de se fermer correctement.

    Eventuellement mon approche serait de faire un essai avec une base vide et une macro super simple voire vide pour vérifier que cela marche. Quand ok et si le même modèle ne fonctionne pas avec les "vrais" macros c'est que cela vient de ces macros en particulier.

    Sinon cela dépend de ce que font ces macros. Une autre approche serait d'ouvrir la base en tant que fichier base de données avec ADO.NET et de faire les calculs avec des instructions SQL si c'est possible. Dans ce cas l'application Access elle-même ne rentrerait plus du tout en ligne de compte...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    mercredi 6 juin 2012 08:32
    Modérateur

Toutes les réponses

  • Bonjour,

    Et cela donne quoi si on clique sur "Afficher les détails" ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mardi 5 juin 2012 17:44
    Modérateur
  • Oui, ce que je soupçonnais : « {"Le processus ne peut pas accéder au fichier 'c:\meteo.mdb', car il est en cours d'utilisation par un autre processus."} » mais je ne vois pas comment faire mieux  pour la fermeture.

    Si, par ailleurs, il y avait un autre moyen pour exécuter ce code ...

    mardi 5 juin 2012 18:41
  • La séquence de libération me parait correcte. Ce que j'essaierais de creuser :
    - OpenDataBase ne retourne pas une base ? Si oui, j'essaierai de récupérer cette référence et de faire un close avant de quitter
    - les macros libèrent bien également tous leurs objets ?

    En gros, je pense que le problème pourrait être que l'on garde qq part (y compris dans Access ?) une référence à un objet ce qui empêche Access de se fermer correctement.

    Eventuellement mon approche serait de faire un essai avec une base vide et une macro super simple voire vide pour vérifier que cela marche. Quand ok et si le même modèle ne fonctionne pas avec les "vrais" macros c'est que cela vient de ces macros en particulier.

    Sinon cela dépend de ce que font ces macros. Une autre approche serait d'ouvrir la base en tant que fichier base de données avec ADO.NET et de faire les calculs avec des instructions SQL si c'est possible. Dans ce cas l'application Access elle-même ne rentrerait plus du tout en ligne de compte...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    mercredi 6 juin 2012 08:32
    Modérateur
  • Comme de fait.

    Il y avait bien des "close" à la fin des routines, pas de set ... = nothing

    vendredi 8 juin 2012 09:45