Ordre du curseur movenext dans recordset en dbopentable

Résolu
ponsoni Messages postés 18 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 23 avril 2010 - 16 oct. 2008 à 18:47
ponsoni Messages postés 18 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 23 avril 2010 - 17 oct. 2008 à 21:49
Bonjour,


il y a un truc que je comprends pas avec les recordset dbopentable et movenext. Pourriez vous m'aider? Voilà :


je remplis une Table1 via une requête ajout :


INSERT INTO table1 ( ISIN, dateq, Openq, minq, maxq, volq, Closeq )
SELECT "GE" AS Expr0, toadd.Date, [Adj Close]/[close]*[open] AS Expr1, [Adj Close]/[close]*[low] AS Expr2, [Adj Close]/[close]*[high] AS Expr3, [Close]/[Adj Close]*[volume] AS Expr4, toadd.[Adj Close]
FROM toadd;


Table 1 a une clé primaire, qui est un numéro automatique (champ "auto").


je souhaite ensuite parcourir table 1 dans l'ordre de ce champ, et voir si cela se fait bien dans l'ordre :


Sub test()


Dim Rs1 As DAO.Recordset
Dim auto As Double
Set Rs1 = CurrentDb.OpenRecordset("table1", dbOpenTable)
auto = 0


With Rs1


.MoveFirst
Do
auto = !auto
.MoveNext
If .EOF Then Exit Do
If !auto - auto <> 1 Then Debug.Print !auto & "   " & !auto - auto
Loop Until .EOF


End With


voila les réponses obtenues :


107812   1761
106052   -1869
107922   111
110617   1596
109022   -1649
110672   56


et à chaque fois que je vide et rerempli la table, j'obtiens des réponses différentes...


Pourquoi le movenext ne se déplace t'il pas dans l'ordre de la clé primaire? comment le forcer à se déplacer dans l'ordre de la clé primaire ? (sans passer par une requete sort, je veux rester avec dbOpenTable.


merci pour vos réponses!

FP

5 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
17 oct. 2008 à 19:17
Plutot que de t'embeter à essayer de détruire et recreer ta table, en espérant que les index se mettent dans le bon ordre, ajoute plutot une notion de tri sur ta requette ou dans ton dataset.

Je sais plus trop comment ça se fait en ADO, mais ça sera quand même plus simple à gerer

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 oct. 2008 à 21:29
Première chose :
Tu poste dans la section VB2005 mais tu utilise les controles DAO.
Es-tu en VB2005 ou en VB6 ????
En VB2005, il faut utiliser ADO.Net, c'est à dire les classes contenues dans le namespace System.Data
En VB6, il est vivement recommander d'utiliser ADO, plutot que DAO.

Second point :
Ton numéro auto, est-ce un numéro à incrémentation automatique ou est-ce un numéro à génération aléatoire ?
Es-tu sur que tu n'as pas quelque part un autre tri que sur la clé primaire (code, base, ...)
Je ne sais pas ce qu'il en est pour DAO, mais normalement sans tri, tes enregistrements devraient etre retournés dans lordre de création.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
ponsoni Messages postés 18 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 23 avril 2010
17 oct. 2008 à 09:12
Oups, tu as raison Casy, je suis en VB6... erreur de post, plus très lucide à force de tourner autour de ce pb...

pour le second point, j'utilise un numéro auto à incrémentation automatique.

et j'ai fait en sorte de ne mettre aucun autre tri (seul index de la table : la clé primaire, et aucun tri ds la requete ajout).

j'ai essayé en ADO, mais ça ne marche pas mieux.

troublant quand même?

FP
0
ponsoni Messages postés 18 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 23 avril 2010
17 oct. 2008 à 18:03
J'ai continué à plancher sur mon problème :  il s'avère que le movenext marche bien si je supprime complètement la table, la recréé et la rerempli. puis, si je la vide simplement et la rerempli, le movenext se met à déconner. (j'ai essayé en simplifiant au max, cad en créant une nouvelle base de données, avec une table toute bête avec juste un numéro auto et un champ de donnée, et une requête ajout). Il s'agit donc peut être d'un pb access de vidage de table... comment en vba, puis-je vider une table pour qu'elle soit comme neuve? (truncate?)

merci

FP
0

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

Posez votre question
ponsoni Messages postés 18 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 23 avril 2010
17 oct. 2008 à 21:49
Ok Casy, je vais suivre ton conseil! Je pense que c'est ce qu'il y a de mieux à faire, plutot que de m'arracher les cheveux avec cette bizarrerie...
merci en tout cas.

FP
0
Rejoignez-nous