Pb de connexion SQL server avec VB6. Connexions implicites

cs_grome Messages postés 25 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 3 mai 2005 - 23 déc. 2002 à 10:54
cs_grome Messages postés 25 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 3 mai 2005 - 23 déc. 2002 à 15:22
Bonjour,

J'ai un problême, mon fichier de log sql server est énorme !
L'article suivant explique très bien le problème. Les connexions implicites ne sont pas groupées.

http://support.microsoft.com/default.aspx?scid=kb;fr;271128

J'ai peur de ne pas très bien comprendre ce qu'il faut faire pour résourdre le probleme. Est ce que je dois créer une connexion pour chaque recordset de la manière suivante (set con = new adodb.connection). Mais dans ce cas, comment faire fonctionner mes transaction lorsque j'ai des recordset ou des ordre SQL imbriqués. Par exemple J'ouvre un recordset, je parcours ce dernier et je lance sur une condition un Update ou un autre ordre de mise à jour. Pour l'instant tout est sur la même connexion.

Comme je l'ai déjà expliqué plus haut, il me créé des connexions pour chaque recordset ouvert et ces connexions apparaissent dans le fichier de log de sql server.

Pour les transactions j'utilise sur ma connexion begintrans et committrans/rollbacktrans.

Merci d'avance, mes logs explosent ceux de windows et ceux de SQL server.

Jérôme

3 réponses

PatriceVB Messages postés 562 Date d'inscription dimanche 16 décembre 2001 Statut Modérateur Dernière intervention 26 décembre 2007
23 déc. 2002 à 13:48
pour créer une connexion explicite :
dim myconnection as new adodb.connection
myconnection.connectionstring="tachainedeconnexion"
myconnection.open

dim myrecordset as new adodb.recordset
myrecordset.open "requete sql",myconnection

dim myrecordset2 as new adodb.recordset
myrecordset2.open "requuete sql",myconnection

Dans la plupart des cas, il faut éviter les connexions implicites, créé une connexion et rattaches y tes recordset cela sera plus simple.

si t'as encore des pb, réponds à ce msg.
0
cs_grome Messages postés 25 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 3 mai 2005 2
23 déc. 2002 à 14:17
C'est ce que je fais. Et le pb c'est qu'en faisant çà tu as autant de connexion ouverte que de myrecordset.open.
Si tu ouvre un recordset sur une connexion qui supporte déjà un recordset ouvert alors une deuxième connexion est créé. Cette connexion est dite implicite.

Sql server ne permet d'avoir qu'un seul jeu de résultats en suspens par connexion si conn.properties("Multiple connections") = true

Il y a un moyen de resoudre le pb. Le lien http://support.microsoft.com/default.aspx?scid=kb;fr;271128
fait référence à l'article F271128 de microsoft qui explique le pb. Cependant le lien http://msdn.microsoft.com/library/psdk/dasdk/msda3753.htm ne fonctionne pas et c'est précisement ce dernier qui donne la solution.

Voilà, j'aurais aimé savoir si quelqu'un avait déjà eu le pb.

grome
0
cs_grome Messages postés 25 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 3 mai 2005 2
23 déc. 2002 à 15:22
Voilà un bout de code qui pose pb. Je viens juste de le tester et suivre les logs en même temps. Histoire d'être sur que je me plantais pas dans mes dires.

Si quelqu'un à une idée ...

Merci d'avance.

grome

Set cnConnex = New ADODB.Connection
cnConnex.ConnectionString = " Provider=SQLOLEDB.1;Password=monpassword;Persist Security Info=True;User ID=monnom;Initial Catalog=Data_v208ss;Data Source=FERMETTE1\JER"
cnConnex.Open
'---
sSql1 = " SELECT EvoNum FROM EVOLUTION; "
Set rsRec1 = New ADODB.Recordset
rsRec1.Open sSql1, cnConnex
While Not rsRec1.EOF
sSql2 " SELECT LidNum FROM LIGNEDEVIS WHERE EvoNum " & rsRec1.Fields(0) & ";"
Set rsRec2 = New ADODB.Recordset
rsRec2.Open sSql2, cnConnex
While Not rsRec2.EOF
j = j + 1
rsRec2.MoveNext
Wend
rsRec2.Close

i = i + 1
rsRec1.MoveNext
Wend

Set rsRec2 = Nothing
rsRec1.Close
Set rsRec1 = Nothing
0
Rejoignez-nous