Fråga : rst.MoveLast som tar för evigt!

Alla hälsningen,

I var under intrycket att recordsets var förment att vara en fasta långt till flyttningen omkring inom data. Fäste fungerar tar för evigt till körningen. Den har klibbat på rst.MoveLast. Bordlägga Demand_Check_C har flera miljon rekord, men den tar en timme för att få till rekordet 2Mth. Är denna det normala?
> för
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:
" codeBody " ' rusar upp qry10002 med ordagrann Allmänhet fungerar GetDemand () Dunkla dbs som databas Dunkel qdf som DAO.QueryDef Dunkel rst som DAO.Recordset Dunkel sInsert som stränger, sSelect som stränger, sFrom som stränger, sWhere som stränger, sSQL som stränger Dunkel lRecordCount som Long: lRecordCount = 0 Dunkel lCounter som Long Falsk DoCmd.SetWarnings DoCmd.RunSQL ”BORTTAGNINGS * FRÅN tblDemand”, 'sInsert = ”MELLANLÄGG IN I tblDemand”, sSelect = ”VALD LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR, LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR, FALL, NÄR SEN_BGN_WK_NBR<=SEN_END_WK_NBR SEN_END_WK_NBR-SEN_BGN_WK_NBR+1 ANNAN 52-SEN_BGN_WK_NBR+SEN_END_WK_NBR+1 AVSLUTAR DÄREFTER SOM "" som säljer vecka"",” & _, ”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 SOM summa för "" Q1 av BIs-"",” & _, ”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 SOM summa för "" Q2 av BIs-"",” & _, ”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 SOM summa för "" Q3 av BIs-"",” & _, ”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 SOM summa för "" Q4 av BIs-""", sFrom = ”FRÅN (INRE LOWES.T2354_ITM_LCT_PRL SAMMANFOGAR LOWES.T2355_SEN_PRL PÅ LOWES.T2354_ITM_LCT_PRL.T2355_PRL_TAG_ID = LOWES.T2355_SEN_PRL.T2355_PRL_TAG_ID), INRE SAMMANFOGAR PÅ LOWES.T2398_IFM_FRC_VAL (LOWES.T2354_ITM_LCT_PRL.T063_LCT_NBR = LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR) OCH (LOWES.T2354_ITM_LCT_PRL.T024_ITM_NBR = LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR)”, sWhere = ”VAR (LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR = -1 OCH LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR = -1)”, Fastställda dbs = CurrentDb () Fastställd rst = dbs.OpenRecordset (”VALD T024_ITM_NBR, T063_LCT_NBR FRÅN Demand_Check_C; ”) Om rst.EOF därefter lRecordCount = 0 Annars rst.MoveLast lRecordCount = rst.RecordCount Avsluta om rst.MoveFirst Gör stunder inte rst.EOF lCounter = lCounter + 1 sWhere = sWhere & ”ELLER (LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR =” & rst (”T024_ITM_NBR”) &” OCH LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR = ”& rst (”T063_LCT_NBR”) &”) ”, Om lCounter > 60 eller rst.AbsolutePosition = lRecordCount - 1 därefter sSQL = sInsert & sSelect & sFrom & sWhere '& ”MED UR”, Fastställd qdf = CurrentDb () .QueryDefs (”qryPassThrough”) qdf.SQL = sSQL DoCmd.OpenQuery ”qryDemand”, 'DoCmd.RunSQL-sSQL lCounter = 0 sWhere = ”VAR (LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR = -1 OCH LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR = -1)” '- 1 = attrapp nr. att handla med 1st ELLER Avsluta om rst.MoveNext Kretsa Riktig DoCmd.SetWarnings rst. Nära Avsluta fungerar
" klar "

Svar : rst.MoveLast som tar för evigt!

Ja detta verkar det normala.

Det är inte röra till det sist rekordet, det befolkar alla rekord till jumbon, i en dynamisk recordset (du kan potentiellt redigera något rekord, och det bör reflektera any att redigera att äga rum dynamiskt!). Det är inte enkelt, men det är onyttigt.

Om Demand_Check_C är en ta fram bordlägger, du kan öppna den bordlägger in funktionsläge och, du kan läsa det sist rekordet ögonblickligen (bara en bordlägga inte har en rekord- cont). Om den inte är, du kan använda dbForwardOnly för att rusa upp saker, men, som det känt antyder, du kan inte flyttningbaksida.

I stort, ditt fungera styrkan som körs mycket väl för dussina timmar, det är inte klart vad den gör, men, om du är i det processaa av normalisering av en bordlägga, strukturera, några funktioner kan ta som sorterar av tid. Men du behöver inte den rekord- räkningen.

Använd bordlägga-skrivar eller en framåt endast recordset, använder de 60 rekorden stor bit (stilla eftergivent i beställa av 100 ' 000 non-trivial mellanläggsqueries som ska analyseras, optimeras och körningen) och kopierar det inre delar upp förutom kretsa för att få rekorden less-than-60 från avsluta.

Använd inte den sammanlagda rekord- räkningen, då evig sanning placerar.

(°v°)
Andra lösningar  
 
programming4us programming4us