Ouistyty
Messages postés7Date d'inscriptionmercredi 3 décembre 2003StatutMembreDernière intervention 9 février 2010
-
9 févr. 2010 à 10:24
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
9 févr. 2010 à 19:39
Bonjour,
Je ne sais pas si je suis dans la bonne section des forums ici mais bon, je pose ma question quand même.
J'ai un script qui boucle à toutes les 5 minutes et qui requête en base de donnée. Tout ce passe bien jusqu'à ce qu’il y ait un problème de connexion à la base de donnée.
Une fois que le script perd la connexion à la base de données, il est impossible qu’il se reconnecte par la suite même si la base revient en ligne. Le seul moyen de rétablir le tout, est d’arrêter et relancer le script.
Quand la base de donnée est injoignable, j’ai le message d’erreur suivant : -2147467259:[Microsoft][ODBC SQL Server Driver][TCP/IP Sockets]SQL Server does not exist or access denied.
Et Quand la base revient en ligne, j’ai le message suivant : 424:Objet requis
Auriez-vous des idées à me donner afin de pouvoir gérer ce problème sans avoir à relancer le script ?
Voici le bout de code qui effectue la connexion, toute remarque constructive sur ce dernier sera considérée et appréciée.
Merci d’avance
Christian
Do While MyExit=0
Print_Log Log_File, "Launching VBS in 5 minutes !"
WScript.Sleep(300000)
'Vérification de la version du vbs local
LocalVbsFileVer=CheckLocalVer(LocalVbsFileName)
Print_Log Log_File, "Local HeartBeat File Version : " & LocalVbsFileVer
LocalVbsLibVer=CheckLocalVer(LocalVbsLibName)
Print_Log Log_File, "Local Library File Version : " & LocalVbsLibVer
LocalVbsMainVer=CheckLocalVer(LocalVbsMainName)
Print_Log Log_File, "Local Main File Version : " & LocalVbsMainVer
' Connexion à SQL Server.
Print_Log Log_File, "Connectiong to SQL ..."
Set oCn = WScript.CreateObject("ADODB.Connection")
oCn.ConnectionString = "Driver={SQL Server};" & _
"Server=monserver;" & _
"Address=monserver,1433;" & _
"Network=DBMSSOCN;" & _
"Database=mabase;" & _
"user id=monuser;" & _
"password=monpass;"
oCn.Open
If Err.number <> 0 Then
Print_Log Log_File, "Not Able To Connect to SQL Server !"
Print_Log Log_File, Err.Number & ":" & Err.Description
Set Err.number = 0
oCn.ConnectionString
Set oCn = Nothing
Else
Print_Log Log_File, "Controlling files version ..."
ControlFileVer LocalVbsFileName,LocalVbsFileVer
ControlFileVer LocalVbsLibName,LocalVbsLibVer
ControlFileVer LocalVbsMainName,LocalVbsMainVer
Print_Log Log_File, vbtab & "Getting System Info..."
MyResult = split(ExecCommand("cscript.exe //H:CScript //nologo //T:60 " & LocalVbsFileName),vbcrlf)
Print_Log Log_File, vbtab & "Command Output :"
For each StrLine in MyResult
Print_Log Log_File, vbtab & vbtab & StrLine
Next
oCn.Close
Set oCn = Nothing
End If
Loop
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 févr. 2010 à 12:33
Salut Christian
(aucune expérience en vbs, alors ...)
Il faudrait que tu regardes à quoi sert ta ligne oCn.ConnectionString dans ta gestion d'erreur.
A mon avis, elle ne sert à rien ou il manque un = "" --> Peut être à l'origine de l'erreur 424
Pour que ton test de Err.Number <> 0 fonctionne, il ne faut pas que la gestion d'erreur soit active.
Vois s'il existe un On Error Resume Next en vbs
A l'inverse, après la connexion, il faudrait peut-être gérer les erreurs.
Un On Error Goto monLabelErreur te permettrait de dérouter le programme afin de refermer la connexion puis de la réouvrir | relancer ta boucle.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Ouistyty
Messages postés7Date d'inscriptionmercredi 3 décembre 2003StatutMembreDernière intervention 9 février 2010 9 févr. 2010 à 16:26
Bonjour,
Merci pour la réponse.
L'option "on error resume next" est bien ative au début du script vbs et bien fonctionnelle.
Effectivement, ma ligne dans le bloc de gestion d'erreur "oCn.ConnectionString" était erronnée, je voulais la réinitialisée à vide et il manquait le = "".
Peux-tu m'expliquer un peu plus tes propos quand tu parles de "Un On Error Goto monLabelErreur te permettrait de dérouter le programme afin de refermer la connexion puis de la réouvrir | relancer ta boucle"
Cette solution pourrait peut être fonctionner :)