Pouvoir tester si la connection est active et passer des requetes en passant par

Résolu
cs_akzo Messages postés 133 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 3 janvier 2015 - 1 sept. 2010 à 19:14
cs_akzo Messages postés 133 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 3 janvier 2015 - 2 sept. 2010 à 14:46
salut a tous et toutes

j'ai un souci avec mon code qui devrais me permettre de me connecter sur une table en reseau et j'arrive pas a m'en sortir

Avant je me connecter ainsi :

sconnectServer== "provider=sqloledb.1;user id = ***;password=***;data source=*****;initial catalog = ****"

public sconnectServer as string

SQL = "Ma requete"

Set oconnection = New ADODB.Connection
Set orecordset = New ADODB.Recordset
oconnection.Open sconnectServer
oconnection.CommandTimeout = 0
orecordset.Open SQL, oconnection, adOpenStatic, adLockOptimistic

je recupere les resultats de ma requete

orecordset.Close
Set orecordset = Nothing
oconnection.Close
Set oconnection = Nothing

Avec cette methode cela fonctionne tres bien

Maintenant je voudrais coder de cette maniere dans mon code
10 SqlRes="Ma requete"
20 execute_SqlRes
30 ...

et tout ce qui suis dans un module qui me servira pour toutes mes requetes SqlRes en faisant simplement execute_SqlRes

Voici mon bout de code

Option Explicit

Public SqlRes As String
Public Etat_ConnectionServer As Boolean
Public SconnectServer As String
Public oconnection As New ADODB.Connection
Public orecordset As New ADODB.Recordset

Public Function OpenDataBaseServer() As Boolean
Dim Tentative As Integer
Dim Msg As String
Tentative = 0
Do While Not (Etat_ConnectionServer)
Tentative = Tentative + 1
Call CloseDataBaseServer
oconnection.ConnectionString = "provider=sqloledb.1;user id = ***;password=***;data source=*****;initial catalog = ****"

'j'ouvre la connection a la source
oconnection.CommandTimeout = 30
oconnection.Open ' c'est à partir d'ici que ca plante


' traitement de l'erreur si pas de connection,
OpenDataBaseServer (Err.Number 0)
Etat_ConnectionServer = OpenDataBaseServer
If Err.Number Then Err.Clear
If Tentative = 2 Then Exit Do
Loop

If Not Etat_ConnectionServer Then
Msg = "Il y a eu 2 tentatives de connection reseau !"
MsgBox Msg, vbCritical Or vbOKOnly, "ECHEC Connection"
End If
Exit Function


Public Sub CloseDataBaseServer()
orecordset.Cancel
Set orecordset = Nothing
oconnection.Cancel
Set oconnection = Nothing
Exit Sub
End Sub



Public Function Execute_SqlRes() As Boolean
Call OpenDataBaseServer
orecordset.Cancel
orecordset.CursorLocation = adUseClient
orecordset.Open SqlRes, oconnection, adOpenDynamic, adLockOptimistic
' Gestion de l'erreur
Execute_SqlRes (Err.Number 0)

If Err.Number Then
Open App.Path & "\Gestion des erreurs requete SQL.txt" For Append As 1
Print #1, "Erreur SQLRes = " & SQL & " " & Now & ""
Close #1
Err.Clear
End If

Exit Function
End Function

Ps:pour des connections sur une base en local j'ai reussi à le faire sur ce principe.

Merci pour toute votre aide

Salutation

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 sept. 2010 à 23:47
Et ton code n'a pas d'indentation (*), histoire d'aérer tout ça ?
Tu ne nous épargnes rien, dis donc.
(*) les tabulation qu'on place devant chaque ligne pour les écarter du bord gauche et ainsi définir visuellement des groupes de lignes de code.

ConnectionString : Simplifie toi la vie et utilise cet http://logiciel.codes-sources.com/logiciels/MzTools-233.aspx, gratuit pour VB6 et VBA : Dedans, une petite procédure te permettra de définir proprement les paramètres de ta connexion et de la tester : il te retournera la ConnectionString qui va bien.

Quand je vois ça :
OpenDataBaseServer (Err.Number 0)
cela me laisse supposer que tu as un "On Error Resume Next" quelque part, non ?
Si c'est le cas, supprime le (les) car ils masquent les problèmes.

Si tu dois tester que la connexion au serveur est bien ouverte, il te suffit de tester oconnection.State.

Sinon, je n'ai rien compris à ton histoire de module avec des lignes de programme numérotées.
Que ton programme soit dans ta forme ou dans un module, cela ne change pas grand chose, excepté l'étendue de leur application. Une Sub ou Fonction hébergée en Private dans une forme ne sera pas appelable depuis ailleurs; même déclarée en Public, il faudra que ta forme soit chargée.
Revoir, dans ce cas, l'étendue des variables que tu utilises.
Mais bon, là, ton problème ne semble être qu'au niveau de la connexion. Résouts déjà ça avant de voir le reste.

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)
3
cs_akzo Messages postés 133 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 3 janvier 2015 3
2 sept. 2010 à 14:46
Salut,
Merci pour ton aide,pour eviter mon erreur
'Erreur -2147467259 ([DBNETLIB][ConnectionOpen (Connect()).]Ce serveur SQL n'existe pas ou son accès est refusé.)
j'ai utilisé oconnection.State de cette maniere :

Public Function OpenDataBaseServer() As Boolean
    Dim Msg As String
10  On Error GoTo OpenDataBaseServer_error
20  Call CloseDataBaseServer
30  ConnServeur.ConnectionString = "provider=sqloledb.1;user id = ***;password=***;data source=***;initial catalog = ****"
40  ConnServeur.CommandTimeout = 30
50  ConnServeur.Open
60  Exit Function
OpenDataBaseServer_error:

70 If ConnServeur.State <> 1 Then
   ' Information erreur tentative de connection
80      Msg = "Tentatives de connection à la base en reseau !" & vbCrLf & "Veuillez vérifier la présence de votre serveur"
90         MsgBox Msg, vbCritical Or vbOKOnly, "ECHEC Connection Base Reseau"
100     exit sub
110 End If
120 MsgBox ("gestion erreur autre que la connection")
End Function


Maintenant tout fonctionne tres bien
Merci encore
Salutation
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 sept. 2010 à 20:11
Salut
Tant de code sans formatage me décourage de lire et de comprendre. Désolé, il est tard.

Ne poste que le code nécessaire.
Evite les sauts de ligne, nos écrans deviennent trop petits pour avoir une vue d'ensemble.
Utilise le coloriage syntaxique = 3ème icone à droite
Précise bien ton problème et les erreurs (n° et description) que tu rencontres.

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)
0
cs_akzo Messages postés 133 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 3 janvier 2015 3
1 sept. 2010 à 21:40
salut a tous et toutes

j'ai un souci avec mon code qui devrais me permettre de me connecter sur une table en reseau et j'arrive pas a m'en sortir
Mon ancien code sans passer par un module fonctionne mais maintenant je voudrais coder de cette maniere dans mon code dans une form
10 SqlRes="Ma requete"
20 execute_SqlRes
30 ...

et tout ce qui suis dans un module qui me servira pour toutes mes requetes SqlRes en faisant simplement execute_SqlRes

Voici mon bout de code

Option Explicit 

Public SqlRes As String 
Public Etat_ConnectionServer As Boolean 
Public SconnectServer As String 
Public oconnection As New ADODB.Connection 
Public orecordset As New ADODB.Recordset 

Public Function OpenDataBaseServer() As Boolean 
Dim Tentative As Integer 
Dim Msg As String 
Tentative = 0 
Do While Not (Etat_ConnectionServer) 
Tentative = Tentative + 1 
Call CloseDataBaseServer 
oconnection.ConnectionString = "provider=sqloledb.1;user id = ***;password=***;data source=*****;initial catalog = ****" 
'j'ouvre la connection a la source 
oconnection.CommandTimeout = 30 
oconnection.Open 
' c'est à partir d'ici que ca plante 
'Erreur -2147467259 ([DBNETLIB][ConnectionOpen (Connect()).]Ce serveur SQL n'existe pas ou son accès est refusé.)

' traitement de l'erreur si pas de connection, 
OpenDataBaseServer (Err.Number 0) 
Etat_ConnectionServer = OpenDataBaseServer 
If Err.Number Then Err.Clear 
If Tentative = 2 Then Exit Do 
Loop 
If Not Etat_ConnectionServer Then 
Msg = "Il y a eu 2 tentatives de connection reseau !" 
MsgBox Msg, vbCritical Or vbOKOnly, "ECHEC Connection" 
End If 
Exit Function 

Public Sub CloseDataBaseServer() 
orecordset.Cancel 
Set orecordset = Nothing 
oconnection.Cancel 
Set oconnection = Nothing 
Exit Sub 
End Sub 

Public Function Execute_SqlRes() As Boolean 
Call OpenDataBaseServer 
orecordset.Cancel 
orecordset.CursorLocation = adUseClient 
orecordset.Open SqlRes, oconnection, adOpenDynamic, adLockOptimistic 
' Gestion de l'erreur 
Execute_SqlRes (Err.Number 0) 
If Err.Number Then 
'message d'erreur
Err.Clear 
End If 
Exit Function 
End Function 

Ps: Desole Jack pour le formatage du code
Merci pour toute votre aide

Salutation
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_akzo Messages postés 133 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 3 janvier 2015 3
1 sept. 2010 à 21:45
salut,
Pour eviter de charger mon precedent message,je laisse mon ancienne methode dans un form et sans module qui fonctionne tres bien si le serveur est en fonctionnement

sconnectServer== "provider=sqloledb.1;user id = ***;password=***;data source=*****;initial catalog = ****" 

public sconnectServer as string 

SQL = "Ma requete" 

Set oconnection = New ADODB.Connection 
Set orecordset = New ADODB.Recordset 
oconnection.Open sconnectServer 
oconnection.CommandTimeout = 0 
orecordset.Open SQL, oconnection, adOpenStatic, adLockOptimistic 
'je recupere les resultats de ma requete s'il y en a
orecordset.Close 
Set orecordset = Nothing 
oconnection.Close 
Set oconnection = Nothing 


J'espere que cela aidera quelques personnes

Salutation
0
Rejoignez-nous