2010-04-02 10 views
2

J'ai une procédure stockée relativement longue qui est appelée à partir d'une application PB. Je veux que l'interface utilisateur montre un indicateur qu'elle traite, mais je ne connais pas les progrès exacts. Autrement dit, je ne peux pas dire si c'est fait à 10% ou à 90%. Tout ce que je sais c'est quand c'est fait.Barre de progression indéterminée PowerBuilder

Pour donner à l'utilisateur quelque chose à regarder, je voudrais mettre une barre de progression "Inderterminate" (horizontale) sur la fenêtre quelque part. J'ai regardé la documentation pour le contrôle HProgressBar intégré et ne vois pas comment forcer ce comportement.

À moins d'écrire mon propre contrôle ou d'en importer un autre, y a-t-il un moyen d'y parvenir?

Répondre

2

Powerbuilder n'inclut pas de manière intégrée pour ce faire, mais vous pouvez utiliser les contrôles Win32. Il y a un bon article sur ce ici (qui comprend un exemple de barres de progression!):

Il est un ancien article mais il est toujours en vigueur aux versions les plus récentes de Powerbuilder.

0

Plutôt une situation difficile à contrôler. Étant donné que PowerBuilder n'est pas multithread, l'interface utilisateur de l'application ne sera pas capable de se mettre à jour correctement lorsque la procédure stockée est en cours d'exécution.

Il devra attendre que l'opération se termine avant que le contrôle ne soit retourné.

Dans le passé, j'ai affiché une animation pour illustrer qu'une opération de longue durée est en cours. Si vous utilisez le contrôle de l'animation, il continuera à jouer pendant que le SP est en cours d'exécution.

+0

Bien que vous ayez un bon point, il n'est pas tout à fait exact que PB n'est pas multi-thread. Vous pouvez créer des threads avec SharedObjectRegister(), et il existe un Asymc DB Parm qui peut être applicable ici. Cependant, en fonction du poids de l'impact sur les performances, l'OP peut vouloir générer un thread pour effectuer la récupération pendant que le thread principal exécute l'interface graphique. Si la plus grande partie de l'overhead est dans le transfert de données, cela peut être fait dans un thread avec RetrieveRow, bien que cela ait son propre impact sur les performances. – Terry