Accueil > Forum > > > > Quelle solution pour 1 tache de fond en VB6 ?
Quelle solution pour 1 tache de fond en VB6 ?
mardi 27 mars 2007 à 14:25:17 |
Quelle solution pour 1 tache de fond en VB6 ?

yan35
|
Bonjour, Lorsqu'un utilisateur saisie des infos dans des controles d'une form, lors du Validate du 2° controle (le quantième importe peu), le source lance lance une requête SQL sur une base de données assez conséquente et présente sur un autre poste d'un réseau poste à poste, temps d'exécution de la requête est donc important et bloque la saisie des données dans les autres controles de la form, alors que son résultat n'est pas essentiel tant que tous les controles ne sont pas encore saisis. Je souhaite donc lancer cette requête en tache de fond sans qu'elle pénalise la saisie sur la form. Sachant que VB6 est fâché avec le multithread, je ne sais pas quelle meilleure piste choisir ? - un timer : retarde le démarrage de la requête mais ne traite pas le problème car bloque la saisie quand la requête s'exécute, - il faudrait donc lancer un serveur ? mais quel serait la meilleure liaison : DDE - OLE - Winsock ? (compte-tenu de l'organisation du réseau en poste à poste) et pourquoi ? - Y a-t-il une autre solution, que celles évoquées ? Par avance MERCI de m'orienter.
|
|
mardi 27 mars 2007 à 14:29:54 |
Re : Quelle solution pour 1 tache de fond en VB6 ?

Renfield
|
requete et base a optimiser ? (fais voir le code SQL de la requete)
un Timer est une bonne idée, je me sert souvent de ce stratagème pour rendre la main tout de suite, et lancer des taches longues
Renfield Admin CodeS-SourceS- MVP Visual Basic
|
|
mardi 27 mars 2007 à 14:59:23 |
Re : Quelle solution pour 1 tache de fond en VB6 ?

yan35
|
Bonjour et Merci Renfield de cette réponse aussi rapide,
Voici mon code et les requêtes SQL qu'il réalise dans le timer :
Private Sub tmrFd_Timer() 'Calculs en tâche de fond : soit ML, soit Dm3 selon Tag de tmrFd Dim RsReq As Recordset ' crée 1 recordset qui servira à plusieures requêtes Dim strR As String, arrDepSall() As String If tmrFd.Tag = "ML" Then 'ML Dim RsCml As Recordset strR = "SELECT Sum(DOS) AS CumulDos From archives GROUP BY [POSITION]\1000, DEPOT, SALLE " & _ "Having ((([position] \ 1000) = " & txtRayon & txtAlvéole & txtEtagère & ") And (DEPOT = " & Replace(lblDép.Caption, "n° ", "") & ") And (SALLE = " & Replace(lblSal.Caption, "n° ", "") & "))" & " UNION SELECT Sum(DOSCM) AS CumulDos From regroupts GROUP BY [POSITION]\1000, DEPOT, SALLE Having ((([position] \ 1000) = " & txtRayon & txtAlvéole & txtEtagère & ") And (DEPOT = " & Replace(lblDép.Caption, "n° ", "") & ") And (SALLE = " & Replace(lblSal.Caption, "n° ", "") & "))" Set RsCml = dbArchclts.OpenRecordset(strR, dbOpenDynaset) If RsCml.EOF Then Cml = 0 Else For I = 1 To 2 'il y a toujours 2 enr : 1 pour archives, 1 pour regroupts (inutile de calculer le nbre) If Not IsNull(RsCml!cumuldos) Then Cml = Cml + RsCml!cumuldos RsCml.MoveNext Next End If ElseIf tmrFd.Tag Like "Dm3*" Then 'Dm3 arrDepSall = Split(tmrFd.Tag, ",") strR = "SELECT Sum((SELECT Avg(Dos.dm3) FROM Dos WHERE (((Dos.dm3) Is Not Null) and dos.doscm = " & _ "archives.dos) GROUP BY Dos.DosCm)) AS Cumul_Moydm3connus From Archives " & _ "Where Archives.DEPOT = " & Val(arrDepSall(1)) & " And Archives.SALLE = " & Val(arrDepSall(2)) & _ " And Archives.NoReg = " & Replace(txtRegr, "R-", "") & " UNION " & _ "SELECT Sum((SELECT Avg(Dos.dm3) FROM Dos WHERE (((Dos.dm3) Is Not Null) and dos.doscm = " & _ "regroupts.doscm) GROUP BY Dos.DosCm)) AS Cumul_Moydm3connus From Regroupts " & _ "Where Regroupts.Depot = " & Val(arrDepSall(1)) & " And Regroupts.Salle = " & Val(arrDepSall(2)) & _ " And Regroupts.Reg2 = " & Replace(txtRegr, "R-", "") Set RsCml = dbArchclts.OpenRecordset(strR, dbOpenDynaset) If Not RsCml.EOF Then RsCml.MoveLast For I = RsCml.RecordCount To 1 Step -1 If Not IsNull(RsCml!Cumul_Moydm3connus) Then Cdm3 = Cdm3 + RsCml!Cumul_Moydm3connus RsCml.MovePrevious Next End If End If tmrFd.Tag = "" Set RsCml = Nothing Set RsReq = Nothing tmrFd.Enabled = False End Sub
C'est sûr les requêtes sont lourdes : sous-requêtes, regroupement, union, en + sur du Access et sur 2 tables de 40000 enregistrements de + de 300 octets, chacune donc c'est long, c'est pourquoi je cherche à les exécuter en vrai tâche de fond.
Si tu as une piste, Merci.
|
|
mercredi 28 mars 2007 à 16:46:10 |
Re : Quelle solution pour 1 tache de fond en VB6 ?

yan35
|
Re, Je crois avoir trouvé. J'ai testé un Exe activeX out of Process. En test ça marche, par contre je me demande ce que ça donnera dans la durée, une fois mon exe et mon exe activeX compilés ! ? En effet je ne fais pas bien la différence avec du Multithread que je ne maîtrise pas mais j'ai vu sur ce site que VB6 est récalcitrant au Multithread. Merci si quelqu'un peut m'éclairer à ce sujet.
|
|
Cette discussion est classée dans : solution, poste, tache, requête, saisie
Répondre à ce message
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|