IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Lancer une fonction de manière asynchrone [AC-97]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 97
    Points : 143
    Points
    143
    Par défaut Lancer une fonction de manière asynchrone
    Bonjour,

    J'ai un formulaire contenant des info sur des voiture.
    (marque, modèle etc...)
    Elles sont identifiées par un Identifiant unique.

    Ce formulaire contient un sous formulaire "diaporama" qui affiche de 0 à 5 photos de la voiture de l'enregistrement courant

    Ces photos sont toutes stockées dans un répertoire et le seul moyen de retrouver les bonnes c'est grâce à l'id de la voiture qui se trouve dans le nom de fichier.
    Exemple pour la voiture ayant l'id "007james" on aura dans le répertoire ".\images": 007james.jpg, 007james avant (1).jpg, 007james avant (2).jpg ...etc

    il y a actuellement dans ce répertoire 14000 photos

    A chaque foi que je veux voir le détail d'une voiture je lance cette fonction qui relève les photos concernant la voiture:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Public Function GetPicturesPath(idVoiture As String) As Collection
        Dim picturesPath As Collection
        Set picturesPath = New Collection
        Dim fileSystemObj As FileSystemObject
        Set fileSystemObj = New FileSystemObject
        Dim currentDataBase As DAO.Database
        Set currentDataBase = Application.CurrentDb()
        Dim picturesFolder As Folder
        Set picturesFolder = fileSystemObj.GetFolder(fileSystemObj.BuildPath(fileSystemObj.GetParentFolderName(currentDataBase.Name), "\Data\Images"))
        currentDataBase.Close
        Set currentDataBase = Nothing
        Dim pictureFile As File
        For Each pictureFile In picturesFolder.Files
            If Strings.InStr(1, fileSystemObj.GetFileName(pictureFile.Name), idVoiture, VbCompareMethod.vbTextCompare) <> 0 Then 
                picturesPath.Add pictureFile.Name
            End If
        Next
        Set GetPicturesPath = picturesPath
    End Function
    Le problème c'est que le fait d'ouvrir le répertoire et parcourir tous les noms de fichier, ca prends un certain temps (un peu moins d'une minute pour les 14000 photos) pendant lequel mon formulaire principal est figé...

    Je me demandais donc s'il n'était pas possible de ne pas figer le formulaire?

    J'ai essayé de lancer la fonction dans un thread séparé mais ca plante car apparemment on ne peut pas créer d'objet dans un thread (Collection, FileSystemObject) (?)

    y'a t'il un moyen de lancer la fonction de manière asynchrone?

    Auuu pire je pourrais charger tous les noms de fichier en mémoire au chargement de l'appli... mais bon...

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 97
    Points : 143
    Points
    143
    Par défaut
    Il suffit d'appeler DoEvents dans la boucle de traitement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment lancer une fonction de façon asynchrone ?
    Par Cvbdev dans le forum Langage
    Réponses: 5
    Dernier message: 04/06/2011, 12h31
  2. Lancer une procédure de manière asynchrone
    Par cmako dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/06/2009, 13h53
  3. Lancer une commande de manière asynchrone
    Par CestLudique dans le forum Administration système
    Réponses: 2
    Dernier message: 20/06/2007, 13h41
  4. [PHP-JS] comment lancer une fonction javascript a partir de php
    Par amika dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/06/2005, 19h23
  5. Comment lancer une fonction
    Par Elois dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 21/04/2004, 19h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo