Вопрос : rst.MoveLast принимая навсегда!

Здравствулте! все,

I было под впечатлением что recordsets были предполагаемый быть быстрая дорога двинуть вокруг в пределах данных. Прикрепленная функция принимает навсегда к бегу. Она вставляла на rst.MoveLast. Таблица Demand_Check_C имеет несколько миллион показателей но она принимает час для того чтобы получить к показателю 2Mth. Этот нормальный?
class= " ясное " >
> " codeSnippet " class=
class= " lineNumbers "
class=
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= "
 ' скорость вверх по qry10002 с литералами
Общественная функция GetDemand ()
    Тусклые dbs как база данных
    Тусклое qdf как DAO.QueryDef
    Тусклое rst как DAO.Recordset
    Тусклое sInsert как шнур, sSelect как шнур, sFrom как шнур, sWhere как шнур, sSQL как шнур
    Тусклое lRecordCount как длиной: lRecordCount = 0
    Тусклое lCounter как длиной
    
    DoCmd.SetWarnings ложное
    
    DoCmd.RunSQL «DELETE * ОТ tblDemand»

    'sInsert = «ВСТАВКА В tblDemand»
    sSelect = «ОТБОРНОЕ LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR, LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR, СЛУЧАЙ КОГДА КОНЕЦ SEN_END_WK_NBR-SEN_BGN_WK_NBR+1 ДРУГОЙ 52-SEN_BGN_WK_NBR+SEN_END_WK_NBR+1 SEN_BGN_WK_NBR<=SEN_END_WK_NBR ПОСЛЕ ЭТОГО КАК "" продавая "" неделей,» & _
    «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 КАК сумма "" Q1 "" 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 КАК сумма "" Q2 "" 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 КАК сумма "" Q3 "" 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 КАК сумма "" Q4 """ BIs
    sFrom = «ОТ (LOWES.T2354_ITM_LCT_PRL ВНУТРЕННИЕ СОЕДИНЯЮТ LOWES.T2355_SEN_PRL НА LOWES.T2354_ITM_LCT_PRL.T2355_PRL_TAG_ID = LOWES.T2355_SEN_PRL.T2355_PRL_TAG_ID) ВНУТРЕННЕЙ СОЕДИНЯЕТ LOWES.T2398_IFM_FRC_VAL ДАЛЬШЕ (LOWES.T2354_ITM_LCT_PRL.T063_LCT_NBR = LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR) И (LOWES.T2354_ITM_LCT_PRL.T024_ITM_NBR = LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR)»
    sWhere = «ГДЕ (LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR = -1 И LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR = -1)»

    Установите dbs = CurrentDb ()
    Установите rst = dbs.OpenRecordset («ОТБОРНОЕ T024_ITM_NBR, T063_LCT_NBR ОТ Demand_Check_C; ")

    Если rst.EOF после этого
        lRecordCount = 0
    Еще
        rst.MoveLast
        lRecordCount = rst.RecordCount
    Закончитесь если

    rst.MoveFirst

    Сделайте пока не rst.EOF

        lCounter = lCounter + 1
        sWhere = sWhere & «ИЛИ (LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR =» & rst («T024_ITM_NBR») &» И LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR = «& rst («T063_LCT_NBR») & ") «

        Если lCounter > 60 или rst.AbsolutePosition = lRecordCount - 1 после этого
            sSQL = sInsert & sSelect & sFrom & sWhere '& «С UR»
            Установите qdf = CurrentDb () .QueryDefs («qryPassThrough»)
            qdf.SQL = sSQL

            DoCmd.OpenQuery «qryDemand»

            'sSQL DoCmd.RunSQL
            lCounter = 0
            sWhere = «ГДЕ (LOWES.T2398_IFM_FRC_VAL.T024_ITM_NBR = -1 И LOWES.T2398_IFM_FRC_VAL.T063_LCT_NBR = -1)» '- 1 = кукла # общаться с 1-ым ИЛИ
        Закончитесь если

        rst.MoveNext

    Петля
    
    DoCmd.SetWarnings поистине
    
    rst. Конец

Функция конца
class=

Ответ : rst.MoveLast принимая навсегда!

Да, это кажется нормальным.

Оно не двигает к последнему показателю, ему заселяет все показатели к продолжает, в динамическом recordset (вы можете потенциальн редактировать любой показатель и они должны отразить нисколько редактировать осуществлять динамический!). Он не просто, но никудышно.

Если Demand_Check_C будет таблицей доступа, то вы можете раскрыть ее в режиме таблицы и вы можете прочитать последний показатель немедленно (только таблицу не имеет рекордный cont). Если оно не, то вы можете использовать dbForwardOnly для того чтобы быстро пройти вещи вверх, но, по мере того как имя подразумевает, вы не можете двинуть назад.

Основно, ваша функция могла очень хлынуться бег на дюжина часов, оно не ясна она делает, но если вы в процессе нормализовать структуру таблицы, то некоторые деятельности могут принять тот вид времени. Но вам не нужен рекордный отсчет.

Используйте таблиц-тип или переднее только recordset, используйте 60 ломтей показателей (все еще производя в заказе 100 ' 000 нетривиальных вопросов вставки для того чтобы проанализировать, оптимизируйте, и бег), и копируйте внутренний раздел вне петли для того чтобы получить показатели less-than-60 от конца.

Не используйте полный рекордный отсчет или совершенно положения.

(°v°)
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us