Question : rst.MoveLast prenant pour toujours !

Bonjour tout, le

I était sous l'impression que des recordsets ont été censés être une manière rapide de se déplacer autour dans des données. La fonction jointe prend pour toujours à la course. Elle a collé sur rst.MoveLast. La table Demand_Check_C a plusieurs million de disques mais cela prend une heure pour obtenir au disque 2Mth. Est-elle cette normale ?
class= > " clair " de
> de " codeSnippet " de class= de
class= " lineNumbers " de
class= de
1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 :
34 :
35 :
36 :
37 :
38 :
39 :
40 :
41 :
42 :
43 :
44 :
45 :
46 :
47 :
48 :
49 :
50 :
51 :
52 :
53 :
54 :
55 :
56 :
57 :
58 :
59 :
60 :
id= " codeSnippet767453 " class= " de
 ' vitesse vers le haut de qry10002 avec des coquilles
Fonction publique GetDemand ()
    Faibles dbs comme base de données
    Faible qdf comme DAO.QueryDef
    Faible rst comme DAO.Recordset
    Faible sInsert comme corde, sSelect comme corde, sFrom comme corde, sWhere comme corde, sSQL comme corde
    Faible lRecordCount en tant que longtemps : lRecordCount = 0
    Faible lCounter en tant que longtemps
    
    DoCmd.SetWarnings faux
    
    DoCmd.RunSQL « SUPPRESSION * de tblDemand »

    'sInsert = « INSERTION DANS le tblDemand »
    sSelect = « LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR CHOISI, LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR, CAS QUAND EXTRÉMITÉ SEN_END_WK_NBR-SEN_BGN_WK_NBR+1 52-SEN_BGN_WK_NBR+SEN_END_WK_NBR+1 D'AUTRE de SEN_BGN_WK_NBR<=SEN_END_WK_NBR PUIS COMME "" vendant le "" de semaines, » et le _
    « LOWES.T2355_SEN_PRL.WK1_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK2_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK3_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK4_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK5_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK6_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK7_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK8_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK9_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK10_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK11_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK12_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK13_BAS_IND_FCT COMME somme du "" Q1 de "" de BRI, » et de _
    « LOWES.T2355_SEN_PRL.WK14_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK15_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK16_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK17_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK18_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK19_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK20_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK21_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK22_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK23_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK24_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK25_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK26_BAS_IND_FCT COMME somme du "" Q2 de "" de BRI, » et de _
    « LOWES.T2355_SEN_PRL.WK27_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK28_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK29_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK30_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK31_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK32_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK33_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK34_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK35_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK36_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK37_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK38_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK39_BAS_IND_FCT COMME somme du "" Q3 de "" de BRI, » et de _
    « LOWES.T2355_SEN_PRL.WK40_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK41_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK42_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK43_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK44_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK45_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK46_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK47_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK48_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK49_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK50_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK51_BAS_IND_FCT+LOWES.T2355_SEN_PRL.WK52_BAS_IND_FCT COMME somme du "" Q4 de """ de BRI
    le sFrom = « (LOWES.T2354_ITM_LCT_PRL INTÉRIEURS JOIGNENT LOWES.T2355_SEN_PRL SUR LOWES.T2354_ITM_LCT_PRL.T2355_PRL_TAG_ID = LOWES.T2355_SEN_PRL.T2355_PRL_TAG_ID) D'INTÉRIEUR JOIGNENT LOWES.T2398_IFM_FRC_VAL DESSUS (LOWES.T2354_ITM_LCT_PRL.T063_LCT_NBR = LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR) ET (LOWES.T2354_ITM_LCT_PRL.T024_ITM_NBR = LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR) »
    sWhere = « OÙ (LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR = -1 ET LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR = -1) »

    Placer les dbs = le CurrentDb ()
    Placer le rst = le dbs.OpenRecordset (« T024_ITM_NBR CHOISI, T063_LCT_NBR de Demand_Check_C ; ")

    Si rst.EOF alors
        lRecordCount = 0
    Autrement
        rst.MoveLast
        lRecordCount = rst.RecordCount
    Finir si

    rst.MoveFirst

    Faire tandis que pas rst.EOF

        lCounter = lCounter + 1
        sWhere = sWhere et « OU (LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR = » et rst (« T024_ITM_NBR ») et » ET LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR = « et rst (« T063_LCT_NBR ») et ") « 

        Si lCounter > 60 ou rst.AbsolutePosition = lRecordCount - 1 puis
            sSQL = sInsert et sSelect et sFrom et sWhere 'et « AVEC UR »
            Placer le qdf = le CurrentDb () .QueryDefs (le « qryPassThrough »)
            qdf.SQL = sSQL

            DoCmd.OpenQuery « qryDemand »

            'sSQL de DoCmd.RunSQL
            lCounter = 0
            sWhere = « OÙ (LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR = -1 ET LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR = -1) » '- 1 = simulacre # pour traiter le ęr OU
        Finir si

        rst.MoveNext

    Boucle
    
    DoCmd.SetWarnings vrai
    
    rst. Fin

Fonction de fin
class= de

Réponse : rst.MoveLast prenant pour toujours !

Oui, ceci semble normal.

Il ne se déplace pas au dernier disque, il peuple tous les disques au durent, dans un recordset dynamique (vous pouvez potentiellement éditer n'importe quel disque et il devrait refléter éditer avoir lieu dynamiquement !). Il n'est pas simple, mais il est inutile.

Si Demand_Check_C est une table d'accès, vous pouvez l'ouvrir en mode de table et vous pouvez lire le dernier disque immédiatement (mais une table n'a pas un cont record). S'il n'est pas, vous pouvez employer dbForwardOnly pour accélérer des choses, mais, car le nom implique, vous ne pouvez pas s'écarter.

Fondamentalement, votre fonction pourrait très bien fonctionner pour des douzaine heures, il n'est pas claire ce qu'elle fait, mais si vous êtes en cours de normaliser une structure de table, quelques opérations peuvent prendre cette sorte de temps. Mais vous n'avez pas besoin du nombre d'enregistrements.

Employer un table-type ou seulement un recordset vers l'avant, employer les 60 morceaux de disques (rapportant toujours dans l'ordre de 100 ' 000 questions non triviales d'insertion pour analyser, optimiser, et course), et copier la section intérieure en dehors de de la boucle pour obtenir les disques less-than-60 de l'extrémité.

Ne pas employer tout le nombre d'enregistrements ou positions absolues.

(°v°)
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us