RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 Parlons SQL

Forum : VB .NET
Sous Catégorie : Aucune
Type du sujet : Sujet Normale
FAQ : FAQ VB .NET

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGE : [1]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM VB .NET

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
Djizy
Nouveau membre
Inscrit : 19/11/2007
Messages : 10
Message
#145588
Posté le 23/11/07 à 22:13
Bon

J'ai un logiciel qui fait du traitement sur un serveur SQL.

Un des traitement fait appel à une Procédure Stockée sur un serveur SQL (7, 2000 ou 2005). Le problème est que la durée d'exécution du la store proc varie de 10 sec à 2h mais je n'en ai aucune idée.

Tant que la store proc roule sur le serveur, mon logiciel est "gelé" en attente d''une réponse du serveur.

J'utilise SQLDMO --- >SQLS.ExecuteImmediate(req, SQLDMO.SQLDMO_EXEC_TYPE.SQLDMOExec_ContinueOnError)

Y a-t'il moyen d'appeller la store proc et de libérer l'application pour que je fasse défiller une progress bar ou qqc du genre et de vérifier lorsque la store proc fini de s'exécuter pour reprendre le reste de mon code?

Merci

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

pistache
Superviseur :
- CSharp (C#)
Modérateur :
- VB .NET
- XAML
Chef de projet(s) :
- Image Data base
- Titan

Avatar de pistache
Inscrit : 22/02/2005
Messages : 1302
Message
#145605
Posté le 24/11/07 à 16:26
Salut Djizy,

Voici une solution possible.

Le multithreading

Pour résoudre ce problème on va créer plusieurs threads (environnment d'execution du programme) :
- Un qui va gérer l'affichage graphique
- Un qui va executer la requete et attendre le résultat.
Pendant que stored procedure sera executée, le thread de la requete sera gelé mais pas le thread d'affichage graphique.

Pour faire cela tu va devoir créer une variable avec le thread et qui utilisera une méthode à executer que tu lui donnera. Exemple :


Dim WithEvents t As New Threading.Thread(AdressOf ExecuterProcedure) Sub ExecuterProcedure() ' ICI TU MET TON CODE POUR EXECUTER LA PROCEDURE. End SUb Public Sub DemarrerProcedure() t.start() End Sub

Et voilà.... Et pour gérer la fin de la procedure, tu ajoute une méthode qui gére l'évenement de fin du thread (si tu ne sais pas comment faire demande).



PS : Je ne connais pas SQLDMO, mais peut etre existe il une fonction ASYNC qui execute la fonction de manière asynchrone.
__________________________
Prière de ne pas oublier le magnifique tag Image (résolu) si votre sujet l'est !

Pistaaaaaaaaaaache

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Djizy
Nouveau membre
Inscrit : 19/11/2007
Messages : 10
Message
#145709
Posté le 26/11/07 à 15:00
Salut Pistache

j'ai essayer qqc avec le threading mais ca na pas trop fonctionner.... le code s'exécute mais l'application gèle toujours.... voici ce que j'ai.


Dim _Thread As New Threading.Thread(AddressOf ThreadStore) _Thread.Name = "Call Store" _Thread.IsBackground = True _Thread.ApartmentState = Threading.ApartmentState.STA _Thread.Start() pb4.Show() While (_Thread.IsAlive = True) Application.DoEvents() End While pb4.Close()


pb4 est un petit form qui fait défiler une progressbar à l'aide d'un timer.

Voici la procedure threadstore :


Private Sub ThreadStore() AddLigne("Compression du Log en cours...Cette opération peut prendre plusieurs minutes") If (CallStoreProc(Login, PathLocal & "DATA\", "RIEN", LNom.Text) = False) Then ListLog.Items.RemoveAt(ListLog.Items.Count - 1) AddLigne("Compression du Log en cours...Échoué") Else ListLog.Items.RemoveAt(ListLog.Items.Count - 1) AddLigne("Compression du Log en cours...Terminé") End If End Sub


Et voici CallStoreProc :


Private Function CallStoreProc(ByVal VarSystem As String, ByVal VarPath As String, ByVal VarNomBck As String, ByVal VarNomBnq As String) As Boolean Dim req As String req = "EXEC master..SP_Restore_BD_Client " & VarSystem & ", '" & VarPath & "', '" & VarNomBck & "', " & VarNomBnq & ", 0" SQLS.ExecuteImmediate(req, SQLDMO.SQLDMO_EXEC_TYPE.SQLDMOExec_ContinueOnError) CallStoreProc = True End Function


Merci beaucoup!!

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

pistache
Superviseur :
- CSharp (C#)
Modérateur :
- VB .NET
- XAML
Chef de projet(s) :
- Image Data base
- Titan

Avatar de pistache
Inscrit : 22/02/2005
Messages : 1302
Message
#145719
Posté le 26/11/07 à 17:09
Bon alors j'ai employé les grands moyens et je suis allé voir sur MSDN :

Page MSDN de ExecuteImmediate()
MSDN dit :

This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

En gros cette méthode va être enlevée, évite de l'utiliser.


Mais bon ça ne dit pas quelle autre méthode il faut utiliser

En cherchant un peu j'ai trouvé que :

The new SMO object model and the Microsoft Windows Management Instrumentation (WMI) APIs replace SQL-DMO. Where possible, SMO incorporates similar objects as SQL-DMO for ease of use. You can still use SQL Server 2005 with SQL-DMO, but SQL-DMO will not be updated to manage features that are specific to SQL Server 2005.


En gros SQL DMO est maintenant obsolète....

Que veux tu faire ? Continuer à utiliser cette librairie (et que je trouve la solution adaptée) ? Ou que je te fasse un code pour un autre système ?
__________________________
Prière de ne pas oublier le magnifique tag Image (résolu) si votre sujet l'est !

Pistaaaaaaaaaaache

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Djizy
Nouveau membre
Inscrit : 19/11/2007
Messages : 10
Message
#145722
Posté le 26/11/07 à 17:17
Well.... c'est une grosse application et j'utilise beaucoup le SQL-DMO... je peux pas le remplacer partout ça va me prendre beaucoup trop de temps.

Si je pouvais avoir une solution adapter avec ce que j'ai ce serais vraiment génial!

Mon seul problème c'est l'aplpication qui gèle....le reste va très bien!

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

pistache
Superviseur :
- CSharp (C#)
Modérateur :
- VB .NET
- XAML
Chef de projet(s) :
- Image Data base
- Titan

Avatar de pistache
Inscrit : 22/02/2005
Messages : 1302
Message
#145726
Posté le 26/11/07 à 17:24
Bon alors tu veux garder SQLDMO .

Voici un bout de code :

Trouvé ici : https://msdn2.microsoft.com/en-us/library/aa257387(SQL.80).aspx


' Table object used in iteration over Tables collection. Dim oJob As New SQLDMO.Job Dim oJobStep As SQLDMO.JobStep oJob.Name = "StoreProc" SQLS.JobServer.Jobs.Add oJob ' Alter the job, adding job steps and setting starting step. oJob.BeginAlter oJobStep = New SQLDMO.JobStep oJobStep.Name = "ExecutionStoreProc" oJobStep.StepID = 0 oJobStep.DatabaseName = "mettre database name ici" oJobStep.Command = "mettre commande ici" oJobStep.OnFailAction = SQLDMOJobStepAction_QuitWithFailure oJobStep.OnSuccessAction = SQLDMOJobStepAction_QuitWithSuccess oJob.JobSteps.Add oJobStep oJob.StartStepID = 0 ' Alter the job. oJob.DoAlter

J'ai modifié le code pour toi

Malheuresement je ne peux pas tester, j'ai peté mon ordi et l'ordi ou je suis n'a pas de compilateur .NET .......
__________________________
Prière de ne pas oublier le magnifique tag Image (résolu) si votre sujet l'est !

Pistaaaaaaaaaaache

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Djizy
Nouveau membre
Inscrit : 19/11/2007
Messages : 10
Message
#145854
Posté le 29/11/07 à 20:39
Merci beaucoup Pistache...je vais regarder se que je peux faire!

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

alaa_85
Modérateur :
- VB .NET
Avatar de alaa_85
Inscrit : 01/05/2006
Messages : 172
Message
#145894
Posté le 30/11/07 à 18:06
bon là tu px Aussi Usé le BackGroundWorker, mais si tu es dans Fram work 2.0
composant execute des prcessus en arriére plan
bne chance

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

pistache
Superviseur :
- CSharp (C#)
Modérateur :
- VB .NET
- XAML
Chef de projet(s) :
- Image Data base
- Titan

Avatar de pistache
Inscrit : 22/02/2005
Messages : 1302
Message
#146127
Posté le 07/12/07 à 19:56
Oui c'est vrai alaa, j'avais oublié ça, c'est le multithreading en plus simple
__________________________
Prière de ne pas oublier le magnifique tag Image (résolu) si votre sujet l'est !

Pistaaaaaaaaaaache

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM VB .NET



    PAGE : [1]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.