OVH Cloud OVH Cloud

Probleme de sélection

3 réponses
Avatar
Ze Coder
Bonjour, j'utilise un requete pour naviguer dans une table SQL Server (MSDE)
qui contient 73 champs dans environ 70 000 enregistrements.

' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -

Set IGC.Connection = New ADODB.Connection

IGC.Connection.ConnectionTimeout = 10
IGC.Connection.ConnectionString = "Driver={SQL Server};Server=" &
eNomServeur & ";Database=" & NomSociété & ";Uid=" & eNomUsager & ";Pwd=" &
eMotDePasse & ";"
IGC.Connection.Open

tDbRecordset.Open "Produits", IGC.Connection
tDbRecordset.MoveFirst

Do While Not tDbRecordset.eof
msgbox tDbRecordset.fields(0).value
tDbRecordset.movenext
loop

je veux naviguer dans les enregistrements. Mon probleme, avant que le
premier msgbox apparaisse, je peux compter entre 1 et 2 MINUTES!!! cela est
innaceptable!

Pourtant quand j'utilise un DataControl dans une form, les champs
apparaissent automatiquement, sans aucun délai et je peux meme aller au
dernier enregistrement sans délai.

Comment pourrais-je améliorer les performances de ma classe?

Merci à l'avance!

Sébastien

3 réponses

Avatar
Philippe [MS]
Vous devriez poser votre question dans : microsoft.public.fr.dotnet.adonet.

Sinon, avez vous essayez avec le profiler de regarder ce qui se passe ?
Peut-être pourriez vous regarder également du coté des indexes ?

Phil.

"Ze Coder" wrote in message
news:#
Bonjour, j'utilise un requete pour naviguer dans une table SQL Server


(MSDE)
qui contient 73 champs dans environ 70 000 enregistrements.




' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -

Set IGC.Connection = New ADODB.Connection

IGC.Connection.ConnectionTimeout = 10
IGC.Connection.ConnectionString = "Driver={SQL Server};Server=" &
eNomServeur & ";Database=" & NomSociété & ";Uid=" & eNomUsager & ";Pwd=" &
eMotDePasse & ";"
IGC.Connection.Open

tDbRecordset.Open "Produits", IGC.Connection
tDbRecordset.MoveFirst

Do While Not tDbRecordset.eof
msgbox tDbRecordset.fields(0).value
tDbRecordset.movenext
loop

je veux naviguer dans les enregistrements. Mon probleme, avant que le
premier msgbox apparaisse, je peux compter entre 1 et 2 MINUTES!!! cela


est
innaceptable!

Pourtant quand j'utilise un DataControl dans une form, les champs
apparaissent automatiquement, sans aucun délai et je peux meme aller au
dernier enregistrement sans délai.

Comment pourrais-je améliorer les performances de ma classe?

Merci à l'avance!

Sébastien




Avatar
Christophe KERHOUSSE
Bonjour,

Je ne sais pas à quoi sert ce code, mais le fait de faire un open "produits"
remonte en ram les 70000 lignes pour les 73 colonnes....
J'image que microsoft a optimisé son data control afin qu'il ne ramène
qu'une page de données à la fois.

Par ailleurs, le movefirst ne sert à rien étant donné que le pointeur d'un
recordset à l'ouverture est sur le premier enregistrement.

Quel est le but de la classe ?


"Ze Coder" a écrit dans le message de
news:%
Bonjour, j'utilise un requete pour naviguer dans une table SQL Server


(MSDE)
qui contient 73 champs dans environ 70 000 enregistrements.




' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -

Set IGC.Connection = New ADODB.Connection

IGC.Connection.ConnectionTimeout = 10
IGC.Connection.ConnectionString = "Driver={SQL Server};Server=" &
eNomServeur & ";Database=" & NomSociété & ";Uid=" & eNomUsager & ";Pwd=" &
eMotDePasse & ";"
IGC.Connection.Open

tDbRecordset.Open "Produits", IGC.Connection
tDbRecordset.MoveFirst

Do While Not tDbRecordset.eof
msgbox tDbRecordset.fields(0).value
tDbRecordset.movenext
loop

je veux naviguer dans les enregistrements. Mon probleme, avant que le
premier msgbox apparaisse, je peux compter entre 1 et 2 MINUTES!!! cela


est
innaceptable!

Pourtant quand j'utilise un DataControl dans une form, les champs
apparaissent automatiquement, sans aucun délai et je peux meme aller au
dernier enregistrement sans délai.

Comment pourrais-je améliorer les performances de ma classe?

Merci à l'avance!

Sébastien




Avatar
Ze Coder
merci de votre réponse.

En fait cette classe servira a faire différentes requètes lors de
l'exécution de mon application, s'est pourquoi le recordset doit contenir
tous les enregistrements.

Je suis toutefois arrivé a une solution qui règle de manière très simple mon
problème, tellement ridicule que j'en ai presque honte.


J'ai uniquement ajouté la ligne suivante:

IGC.Connection.CursorLocation = adUseServer

ce qui semble avoir résolu mon problème.

Merci d'avoir tout de même pris le temps de me lire et de me répondre!

Ze coder

"Christophe KERHOUSSE" <redtech(enlever cette parenthèse)@free.fr> a écrit
dans le message de news: %
Bonjour,

Je ne sais pas à quoi sert ce code, mais le fait de faire un open
"produits"
remonte en ram les 70000 lignes pour les 73 colonnes....
J'image que microsoft a optimisé son data control afin qu'il ne ramène
qu'une page de données à la fois.

Par ailleurs, le movefirst ne sert à rien étant donné que le pointeur d'un
recordset à l'ouverture est sur le premier enregistrement.

Quel est le but de la classe ?


"Ze Coder" a écrit dans le message de
news:%
Bonjour, j'utilise un requete pour naviguer dans une table SQL Server


(MSDE)
qui contient 73 champs dans environ 70 000 enregistrements.




' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - -

Set IGC.Connection = New ADODB.Connection

IGC.Connection.ConnectionTimeout = 10
IGC.Connection.ConnectionString = "Driver={SQL Server};Server=" &
eNomServeur & ";Database=" & NomSociété & ";Uid=" & eNomUsager & ";Pwd="
&
eMotDePasse & ";"
IGC.Connection.Open

tDbRecordset.Open "Produits", IGC.Connection
tDbRecordset.MoveFirst

Do While Not tDbRecordset.eof
msgbox tDbRecordset.fields(0).value
tDbRecordset.movenext
loop

je veux naviguer dans les enregistrements. Mon probleme, avant que le
premier msgbox apparaisse, je peux compter entre 1 et 2 MINUTES!!! cela


est
innaceptable!

Pourtant quand j'utilise un DataControl dans une form, les champs
apparaissent automatiquement, sans aucun délai et je peux meme aller au
dernier enregistrement sans délai.

Comment pourrais-je améliorer les performances de ma classe?

Merci à l'avance!

Sébastien