2010-08-25 9 views
2

Est-il possible d'afficher la progression d'une requête SQL dans Delphi? Par exemple, j'ai une longue question compliquée dans Firebird et je veux montrer à l'utilisateur combien de pourcentage de la requête a déjà été complété par le système. Y a-t-il une classe ou un composant capable de le faire?Afficher la progression d'une requête SQL dans Delphi

+0

Comment voir la progression de l'exécution de la requête pendant le handle? http://stackoverflow.com/questions/4237112/how-to-see-progress-of-query-execution-during-handle –

Répondre

4

AFAIK, il est impossible de mesurer interroger le temps d'exécution et afficher l'indicateur de progression. Le SGBD ne fournit pas de telles informations.

Mais vous pouvez afficher le dialogue "Attendre" avec la possibilité d'annuler la requête. Nous faisons cela avec AnyDAC. Définissez ResourceOptions.CmdExecMode sur amCancelDialog et supprimez le composant TADGUIxFormsAsyncExecuteDialog. L'utilisateur aura alors la possibilité d'annuler la requête.

+0

Je ne savais pas qu'il y a des fonctionnalités comme ça, merci – rajeemcariazo

1

Je ne pense pas que vous seriez capable de montrer quoi que ce soit au-delà de la progression de la partie récupération de données du processus. Lorsque vous envoyez votre code SQL à Firebird, vous n'entendez plus jusqu'à ce que les données soient prêtes à être reçues par votre programme (en fonction de la méthode ou des composants que vous utilisez.)

3

Cela dépend strictement de votre base de données. Certains publient ces informations (Oracle les place dans la vue $ session_longops), d'autres non. Habituellement, vous devez mettre vos requêtes en thread, à moins que la base de données n'offre une sorte de rappel pendant le processus - encore une fois c'est une fonctionnalité spécifique à la base de données. Certains permettent de terminer une requête longue avant la fin, d'autres non. Vérifiez la documentation de votre base de données. Et si une fonctionnalité est disponible, la bibliothèque que vous utilisez pour accéder à la base de données doit faire surface, sinon vous devrez peut-être appeler la bibliothèque du client DB directement.

Questions connexes