franck453
Messages postés19Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention28 septembre 2011
-
5 août 2008 à 10:21
SebOfBorg
Messages postés94Date d'inscriptiondimanche 29 septembre 2002StatutMembreDernière intervention26 août 2009
-
2 sept. 2008 à 14:03
bonjour,
J'ai une base SQL Serveur contenant plusieurs dizaines de milliers d'enregistrements. Suivant les requêtes j'obtient une erreur "Expiration du délai".
J'ai vu qu'en mettant le paramètre CommandTimeOut = 0 à la connexion cela devait résoudre mon problème.
Or, Ma connexion n'est pas 'ouverte' en permanence, et je ne sait pas où placer le paramètre CommandTimeOut !! (Dans la chaine de connexion ???)
Ci joint un exemple de ma méthode :
Dans un module1 :
Public requete As String 'contient la requete à éxécuter
Public chaines As String 'contient les paramètres de la connexion
Public rsql(1 To 15) As New ADODB.Recordset 'recordset contenant le résultat (jusqu'à 15 recordsets ouverts simultanément !)
Dans le code : chaine = "Provider=sqloledb;Data Source=gtc-dev;Initial Catalog=alarmes;User Id=sa;Password=sa"
requete = "SELECT * FROM histo ORDER BY date DESC"
rsql(nr(3)).Open requete, chaine, adOpenDynamic, , adCmdText
J'effectue mon traitement : par exemple : derniere_date=rsql(nr(3))!date
rsql(nr(3)).Close
Donc où intégrer le paramètre de Timeout ?
Merci à tous, ma base ne cesse d'augmenter, et il devient urgent de résoudre ce problème, car les utilisateurs commencent à se plaindre, ce qui est normal...
SebOfBorg
Messages postés94Date d'inscriptiondimanche 29 septembre 2002StatutMembreDernière intervention26 août 2009 2 sept. 2008 à 14:03
Bonjour,
Au cas ou tu n'aurais pas encore trouvé de réponse...
de mon coté j'utilise ça :
bon je me connecte a une base oracle mais il n'y a que la connectionstring a changer
----------------------------------------------------Fonction EXECUTION DE REQUETE------------------------------------------
Function Execution_Requete_RS(requete As String) As ADODB.Recordset
Form1.MousePointer = vbHourglass -- permet de mettre un sablier sur le form pour dire que ça travaille
Set Execution_Requete_RS = New ADODB.Recordset
On Error GoTo Gest_Err
If Not requete = "" Then
With Adocnx
If .State = adStateClosed Then Communes.Connexion -- Teste avant l'execution si la connection est montée ... sinon on connecte
If .State = adStateOpen Then
.CommandTimeout = 2000 --Le timeout est sur la requete...
.CursorLocation = adUseClient -- le curseur est du coté client afin de recuperer le recordcount (entre autre)
Info "Execution de la requete : " & requete -- Info est une fonction...
Set Execution_Requete_RS = .Execute(requete)
Info "Nombre de lignes de la table : " & Execution_Requete_RS.RecordCount
End If
End With
End If
Accueil.MousePointer = vbNormal
Exit Function
Gest_Err:
Info "Erreur dans l'execution de la requete : " & requete
Info vbTab & Err.Description
form1.MousePointer = vbNormal --remet le curseur a la fleche
End Function
----------------------------------------------------Fonction INFO------------------------------------------
Function Info(Texte)
Debug.Print Now(), Texte
DoEvents
End Function
----------------------------------------------------Fonction CONNEXION--------------------------------------
Function Connexion()
Set Adocnx = New ADODB.Connection
If SID = "" Then Recup_Ini --Fonction permettant de recuperer les infos dans un fichier .INI
With Adocnx
.ConnectionString = "Provider=MSDAORA;Data Source=" + SID + ";User Id=" + NomUtilisateur + ";Password=" + MotDePasse + ";"
.Open
If Not .State = 1 Then
MsgBox "Pas connecté", vbCritical, "Echec de connexion"
End If
End With
End Function
-------------------------------------------------------------------------------------------------------------------