Ordre du curseur movenext dans recordset en dbopentable [Résolu]

ponsoni 18 Messages postés vendredi 25 juillet 2008Date d'inscription 23 avril 2010 Dernière intervention - 16 oct. 2008 à 18:47 - Dernière réponse : ponsoni 18 Messages postés vendredi 25 juillet 2008Date d'inscription 23 avril 2010 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 17 oct. 2008 à 19:17
3
Merci
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

Merci cs_casy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de cs_casy
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 16 oct. 2008 à 21:29
0
Merci
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
Commenter la réponse de cs_casy
ponsoni 18 Messages postés vendredi 25 juillet 2008Date d'inscription 23 avril 2010 Dernière intervention - 17 oct. 2008 à 09:12
0
Merci
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
Commenter la réponse de ponsoni
ponsoni 18 Messages postés vendredi 25 juillet 2008Date d'inscription 23 avril 2010 Dernière intervention - 17 oct. 2008 à 18:03
0
Merci
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
Commenter la réponse de ponsoni
ponsoni 18 Messages postés vendredi 25 juillet 2008Date d'inscription 23 avril 2010 Dernière intervention - 17 oct. 2008 à 21:49
0
Merci
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
Commenter la réponse de ponsoni

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.