Vraag : rst.MoveLast voor altijd nemend!

Hello was allen,

I onder de indruk die recordsets verondersteld een snelle manier waren te zijn om binnen gegevens rond te bewegen. De functie in bijlage neemt voor altijd om te lopen. Het heeft op rst.MoveLast geplakt. De lijst Demand_Check_C heeft verscheidene miljoen verslagen maar het vergt een uur om aan het 2Mste verslag te krijgen. Is normaal dit?
" codeBody "
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:
" notpretty "
 ' Snelheid op qry10002 met literals
Overheidsfunctie GetDemand ()
    Schemerige dbs als Gegevensbestand
    Schemerige qdf als DAO.QueryDef
    Schemerige rst als DAO.Recordset
    Schemerige sInsert als Koord, sSelect als Koord, sFrom als Koord, sWhere als Koord, sSQL als Koord
    Schemerige lRecordCount zoals lang: lRecordCount = 0
    Schemerige lCounter zoals lang
    
    DoCmd.SetWarnings Vals
    
    DoCmd.RunSQL „SCHRAP * VAN tblDemand“

    'sInsert = „NEEM IN tblDemand op“
    sSelect = „UITGEZOCHTE LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR, LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR, COMPUTER-AIDED SOFTWARE ENGINEERING WANNEER EIND SEN_BGN_WK_NBR<=SEN_END_WK_NBR TOEN SEN_END_WK_NBR-SEN_BGN_WK_NBR+1 ANDERS 52-SEN_BGN_WK_NBR+SEN_END_WK_NBR+1 ALS HET VERKOPEN "" WEKEN "",“ & _
    „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 ALS Q1 Som "" van BIB "",“ & _
    „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 ALS Q2 Som "" van BIB "",“ & _
    „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 ALS Q3 Som "" van BIB "",“ & _
    „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 ALS Q4 Som "" van BIB """
    sFrom = „VAN (LOWES.T2354_ITM_LCT_PRL BINNEN SLUIT ZICH AAN BIJ LOWES.T2355_SEN_PRL OP LOWES.T2354_ITM_LCT_PRL.T2355_PRL_TAG_ID = LOWES.T2355_SEN_PRL.T2355_PRL_TAG_ID) BINNEN SLUIT ME AAN BIJ LOWES.T2398_IFM_FRC_VAL (LOWES.T2354_ITM_LCT_PRL.T063_LCT_NBR = LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR) EN (LOWES.T2354_ITM_LCT_PRL.T024_ITM_NBR = LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR)“
    sWhere = „WAAR (LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR = -1 EN LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR = -1)“

    Reeks dbs = CurrentDb ()
    Reeks rst = dbs.OpenRecordset („UITGEZOCHTE T024_ITM_NBR, T063_LCT_NBR VAN Demand_Check_C; “)

    Als rst.EOF toen
        lRecordCount = 0
    Anders
        rst.MoveLast
        lRecordCount = rst.RecordCount
    Eind als

    rst.MoveFirst

    Doe terwijl niet rst.EOF

        lCounter = lCounter + 1
        sWhere = sWhere & „OF (LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR =“ & rst („T024_ITM_NBR“) &“ EN LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR = „& rst („T063_LCT_NBR“) &“) „

        Als lCounter > 60 of rst.AbsolutePosition = lRecordCount - 1 toen
            sSQL = sInsert & sSelect & sFrom & sWhere '& „MET UR“
            Reeks qdf = CurrentDb () .QueryDefs („qryPassThrough“)
            qdf.SQL = sSQL

            DoCmd.OpenQuery „qryDemand“

            'DoCmd.RunSQL sSQL
            lCounter = 0
            sWhere = „WAAR (LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR = -1 EN LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR = -1)“ '- 1 = model # om eerste te behandelen OF
        Eind als

        rst.MoveNext

    Lijn
    
    DoCmd.SetWarnings Waar
    
    rst. Sluit

Beëindig Functie

Antwoord : rst.MoveLast voor altijd nemend!

Ja, schijnt dit normaal.

Het zich beweegt niet aan het laatste verslag, bevolkt het alle verslagen aan laatste, in een dynamische recordset (u kunt om het even welk verslag potentieel uitgeven en het zou op om het even welke het uitgeven moeten wijzen dynamisch plaatsvindend!). Het is niet eenvoudig, maar het is nutteloos.

Als Demand_Check_C een lijst van de Toegang is, kunt u het op lijstwijze openen en u kunt het laatste verslag onmiddellijk lezen (maar een lijst heeft geen verslag inh.). Als het niet is, kunt u dbForwardOnly aan snelheidsdingen uitputten, maar zoals de naam impliceert, kunt u zich niet terug bewegen.

Fundamenteel, zou uw functie zeer goed voor kunnen lopen dozijn uren, is het niet duidelijk wat het, maar als u tijdens het normaliseren van een lijststructuur bent, kunnen sommige verrichtingen die soort tijd nemen. Maar u hebt niet de verslagtelling nodig.

Gebruik slechts een lijst-type of voorwaarts recordset, gebruik de 60 verslagenbrokken die (nog in de orde van 100 ' 000 niet alledaagse te analyseren, te optimaliseren tussenvoegselvragen, en looppas opbrengen), en kopi�ër de binnensectie buiten de lijn om de minder-dan-60 verslagen van het eind te krijgen.

Gebruik niet de totale verslagtelling of de absolute posities.

(°v°)
Andere oplossingen  
 
programming4us programming4us