powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа Access Jet
51 сообщений из 51, показаны все 3 страниц
Работа Access Jet
    #40084674
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть база на SQL, клиентская часть на access 2003 присоединенные таблицы через ODBC
когда база выросла более 10000000 записей базовый запрос (около 5000-6000 записей)
начал тормозить (выполнение более 20 сек)

Код: sql
1.
2.
3.
4.
SELECT dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка, Sum(dbo_Архив.Значение) AS [Sum-Значение]
FROM dbo_Архив
GROUP BY dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка
HAVING (((dbo_Архив.ID_наработки) Between (CLng([Forms]![Основная]![Индекс_С])) And (CLng([Forms]![Основная]![Индекс_по]))));



построил покрывающий индекс, думал сейчас все взлетит, а запрос его не использует

начал переписывать запрос под условия отбора
Код: sql
1.
2.
3.
4.
SELECT dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка, Sum(dbo_Архив.Значение) AS [Sum-Значение]
FROM dbo_Архив
GROUP BY dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка
HAVING (((dbo_Архив.ID_наработки) Between (443961) And (443962)));



и все заработало (выполнение около 2 сек)

Кто-нибудь из ГУРУ может объяснить данное поведение access, т.к. клиентам приходиться ставить отдельную клиентскую часть в связи с переписыванием запроса, что не удобно
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084687
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP

Код: vbnet
1.
2.
...HAVING (((dbo_Архив.ID_наработки) Between (CLng([Forms]!Основная]!Индекс_С]))
 And (CLng([Forms]![Основная]![Индекс_по]))));


-почему HAVING а не WHERE? (разберитесь в чем разница этих предложений)
-чем вызвано применение Clng?(надеюсь поля [ID_наработки], [Индекс_С],[Индекс_по] числовые)
когда ответите на эти вопросы поймете почему ACCESS себя так ведет
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084712
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поля числовые, но access без использования clng() передает их как строковые и скорость выполнения падает катастрофически до 1,5 - 2 минуты

Разницу между Having и Where знаю, пробовал и так и этак при тестировании разницы никакой

Вопрос почему Jet при использовании функций не использует индекс, а при явном указании
числовых значений в запросе, использует
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084714
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
Поля числовые, но access без использования clng() передает их как строковые
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084770
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
т.к. клиентам приходиться ставить отдельную клиентскую часть в связи с переписыванием запроса, что не удобно

Ну дык храните запрос в таблице.
В запросах никогда не использую ссылки на поля формы.
Это засада. (Не явное приведение к типу)
Присоединенные таблицы(это есчё те костыли в производительности)
Переходите на ADO и RecordSet и будет вам счастье.
Пора по серьезному тискать Access.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084778
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если переделать в параметрический запрос, и передавать с форм параметрами?
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084827
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну дык храните запрос в таблице.
Придется мудрить что-то с разделением по пользователям
и привязывать каждому свой запрос в таблице

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

Присоединенные таблицы(это ещё те костыли в производительности)
Не согласен, если не читать из целиком все очень ничего,
и с редактированием данных нет проблем

Переходите на ADO и RecordSet и будет вам счастье.
Пора по серьезному тискать Access.
Данный запрос используется как сохраненный вложенный для массы остальных
какое ADO и RecordSet

И все же почему не используется индекс в первом виде запроса, а во втором используется
В чем разница
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084828
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ldfanate
А если переделать в параметрический запрос, и передавать с форм параметрами?


Данный запрос используется как сохраненный вложенный для массы остальных
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084833
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BoxaXP
... базовый запрос (около 5000-6000 записей) начал тормозить (выполнение более 20 сек)
...
начал переписывать запрос под условия отбора...

и все заработало (выполнение около 2 сек)

... объяснить данное поведение access
Пусть он сам объясниЦЦа - см., например, Show Plan . . . Run Faster ! , или ищите по форуму по слову SHOWPLAN.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084879
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
В запросах никогда не использую ссылки на поля формы.
Это засада. (Не явное приведение к типу)
Это самый простой способ наложить условия,
а функции использую чтобы уйти от неявного приведения типов


BoxaXP
И все же почему не используется индекс в первом виде запроса, а во втором используется
В чем разница


Уйти то вы ушли, но привидение происходит в теле запроса.
Вы в теле запроса используете внешнюю функцию!!!!!!!!!!
Отседова и тормоза.(план запроса должен быть разный)
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084886
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарисчь не понял намека про Clng-может так понятней будет
ROI

Вы в теле запроса используете внешнюю функцию!!!!!!!!!
BoxaXP
...а функции использую чтобы уйти от неявного приведения типов...
А зачем????Далеко ушли?
Явно преобразовать число в текст,а затем,уже неявно текст в число....
это значительно "ускоряет" работу запроса
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084900
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пусть он сам объясниЦЦа ...

Что-то с его объяснений ничего не понятно
1 запрос (с ссылками на поля формы):
--- 11 ---

- Inputs to Query -
ODBC table 'dbo_Архив'
- End inputs to Query -

453416112) Remote SQL
453416112) Remote SQL
453416112) Remote SQL

2 запрос (явным указанием границ индекса):
--- Выборка_Архив ---

- Inputs to Query -
ODBC table 'dbo_Архив'
- End inputs to Query -

453416112) Remote SQL
453416112) Remote SQL
453416112) Remote SQL

И найдите 2 отличия, а по времени выполнения разница на порядок
...
Рейтинг: 0 / 0
Работа Access Jet
    #40084964
stu314
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP

2 запрос (явным указанием границ индекса):


запускался сразу после первого ? попробуй рестартанут аксес и начать исследования именно со 2-го запроса :)
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085035
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stu314,
Запускал с разной очередностью, с перезапуском access, с изменение и сохранением запрса с сжатием базы
в логе вообще ничего не меняется

Могу скинуть базу и клиентскую часть, если кому интересно, там ничего секретного нет,
сами поэкспериментируете
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085056
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
stu314,
Запускал с разной очередностью, с перезапуском access, с изменение и сохранением запрса с сжатием базы
в логе вообще ничего не меняется

Могу скинуть базу и клиентскую часть, если кому интересно, там ничего секретного нет,
сами поэкспериментируете

Зачем нам экспериментировать?
Вы спросили почему такая разница в скорости?
Вам ответили почему.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085101
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROI

Вы спросили почему такая разница в скорости?
Вам ответили почему.


Почему JET не приводит запрос1 к виду запрос2 перед выполнением
и почему запрос1 не использует покрывающий индекс

Вопрос как добиться скорости выполнения запроса2 не переписывая
программно запрос (не меняя клиентскую часть)
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085115
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
Вопрос как добиться скорости выполнения запроса2 не переписывая
программно запрос (не меняя клиентскую часть)


ldfanate
А если переделать в параметрический запрос, и передавать с форм параметрами?

Проверял ???
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085130
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ldfanate
А если переделать в параметрический запрос, и передавать с форм параметрами?


Пробовал
PARAMETERS [Forms]![Основная]![Индекс_С] Long, [Forms]![Основная]![Индекс_По] Long;
SELECT dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка, Sum(dbo_Архив.Значение) AS [Sum-Значение]
FROM dbo_Архив
GROUP BY dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка
HAVING (((dbo_Архив.ID_наработки) Between ([Forms]![Основная]![Индекс_С]) And ([Forms]![Основная]![Индекс_по])));

Скорость выполнения запроса1 т.е. 20 сек индекс не используется
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085132
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторBoxaXP,
Between clng(...


А нужен ли тут типкаст, если параметр запроса явно объявлен Long? Может както влияет?
И потом PARAMETERS вы както странно объявили - зачем там явные ссылки прописали с восклицательными знаками? Может лучше просто статичные имена параметров, не совпадающие явно ни с чем на форме, и присваивать их тоже явно вручную (программно)?
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085137
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А нужен ли тут типкаст, если параметр запроса явно объявлен Long?
Может както влияет?
Согласен, но пробовал и так и этак, без разницы

И потом PARAMETERS вы както странно объявили - зачем там явные ссылки прописали с восклицательными знаками? Может лучше просто статичные имена параметров, не совпадающие явно ни с чем на форме, и присваивать их тоже явно вручную (программно)?
То есть опять переписывать запрос? тогда упираюсь в многопользовательский режим
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085141
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему "упираетесь"? Подсовываете значение параметров программно, через QueryDef.Parameters - просто чтобы имена параметров не пересекались с именами полей форм явно.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085161
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ldfanate,
Запрос сохраненный, используется как базовый в массе других запросов
...
Рейтинг: 0 / 0
Работа Access Jet
    #40085698
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авториспользуется как базовый в массе других запросов
всмысле как подзапрос? Так параметризовать и вышестоящий QueryDef тоже, только чтобы имена параметров были одинаковые.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40086212
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ldfanate,

А разве значения параметров сохраняются в запросе?
Да и пробовал создавать запрос с параметрами, индексом он все равно не пользуется.
Использование индекса идет только если в запросе жестко прописаны скалярные величины.
Интересно можно ли access заставить использовать индекс, пробовал таблицу удалять, пере подключать - не помогло
...
Рейтинг: 0 / 0
Работа Access Jet
    #40086248
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
ldfanate,

Интересно можно ли access заставить использовать индекс, пробовал таблицу удалять, пере подключать - не помогло

Тут раньше немного моя тема есть... Так там после назначения индекса скорость выполнения запроса очень сильно увеличилась.....
...
Рейтинг: 0 / 0
Работа Access Jet
    #40086263
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serg197311,

Ткни пожалуйста
...
Рейтинг: 0 / 0
Работа Access Jet
    #40086596
cylindr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
Запрос сохраненный, используется как базовый в массе других запросов

в подобных случаях всегда помогает промежуточная временная таблица, в которую сливаете ваши данные из запроса и обращаетесь потом к ней. После всего таблицу очищаете до следующего раза.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40086610
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Работа Access Jet
    #40086712
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serg197311,

Спасибо это я читал, но у меня индексы построены, более того для данного запроса
индекс сделан покрывающий.

Вопрос то в том что запрос access где
WHERE (((dbo_Архив.ID_наработки) Between Get_In_Nach() And Get_In_Kon()))
или
WHERE ((dbo_Архив.ID_наработки) Between (Forms!Основная!Индекс_С) And (Forms!Основная!Индекс_по))
или запрос с параметрами

работает на порядок медленнее чем
WHERE dbo_Архив.ID_наработки Between (442561) And (442862)

По идее access перед выполнением запроса должен вычислить скалярные величины
т.е. запросы полностью идентичные.

И еще обратил внимание что ассess составной индекс для связанной таблицы
показывает как простой индекс по первому полю составного индекса
...
Рейтинг: 0 / 0
Работа Access Jet
    #40086714
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cylindr,

как она поможет в многопользовательской среде, все и так неплохо работает если просто переписывать запрос под указанные условия, но тогда приходиться ставить каждому свою клиентскую часть
...
Рейтинг: 0 / 0
Работа Access Jet
    #40086717
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
но тогда приходиться ставить каждому свою клиентскую часть

- можно использовать не сохраненный запрос (строка sql)
- можно сохранять запрос с именем от диапазона (после выполнения удалять)
WHERE dbo_Архив.ID_наработки Between (442561) And (442862) => z442561442862
...
Рейтинг: 0 / 0
Работа Access Jet
    #40086736
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
cylindr,

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

Возможно, я не прав... или не совсем прав... Но для своей базы я выбрал разделение.... И в таких случаях ( как писали выше) сначала программно (Currentdb.exectue) заполняю временную таблицу, формируя инструкцию в зависимости от нужных усливий, а после использования - чищу ее.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40087056
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вопрос? Кто нибудь пробовал сформировать запрос вида:

Select * From (eval("МояФункция()"));

где МояФункция() возвращает строку вида Select * from Mytabl where ID=3

или нечто подобное
Select * from Mytabl where МояФнкция()

где МояФункция() возвращает строку вида ID=3
...
Рейтинг: 0 / 0
Работа Access Jet
    #40087216
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BoxaXP
Еще вопрос? Кто нибудь пробовал сформировать запрос вида:

Select * From (eval("МояФункция()"));

где МояФункция() возвращает строку вида Select * from Mytabl where ID=3

или нечто подобное
Select * from Mytabl where МояФнкция()

где МояФункция() возвращает строку вида ID=3

Всегда так делаю. У меня в базах обычно есть таблица с единственной записью для оперативных значений. Например, текущая дата (не та, что на календаре, а та, что выбрал юзер для работы) храниться (и изменяется юзером) в этой таблице в поле cur_date. В общем модуле прописана функция CurDate(), получающая это значение запросом. А её уже использую, где потребуется. И в запросах, и модулях форм/отчетов.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40087241
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BoxaXP

Select * from Mytabl where МояФнкция()

где МояФункция() возвращает строку вида ID=3

Этот вариант точно рабочий. А в первом... синтаксисом SQL не предусмотрен такой разврат))
...
Рейтинг: 0 / 0
Работа Access Jet
    #40087314
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Beliar
BoxaXP

Select * from Mytabl where МояФнкция()

где МояФункция() возвращает строку вида ID=3

Этот вариант точно рабочий. А в первом... синтаксисом SQL не предусмотрен такой разврат))

Рабочий Select * from Mytabl where ID=МояФнкция() , но медленно не используя индекс

А у Select * from Mytabl where МояФнкция()
Where не отрабатывает, тянется вся таблица
Пробовал
Код: sql
1.
2.
3.
4.
SELECT dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка, Sum(dbo_Архив.Значение) AS [Sum-Значение]
FROM dbo_Архив
GROUP BY dbo_Архив.ID_наработки, dbo_Архив.ID_счётчика, dbo_Архив.ID_артикула, dbo_Архив.Коэф_цены, dbo_Архив.Ячейка
HAVING (Eval("Str_SQL()"));



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Function Str_SQL() As String
Dim ss As String
Dim st As String

If N_Period = K_Period Then
    st = "= (" & N_Period & ");"
Else
    st = "Between (" & N_Period & ") And (" & K_Period & ");"
End If

ss = "dbo_Архив.ID_наработки " & st
Str_SQL = ss
End Function



Может кто-то извращался чтобы в where динамическое условие сразу со скалярными значениями
...
Рейтинг: 0 / 0
Работа Access Jet
    #40087339
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BoxaXP

Может кто-то извращался чтобы в where динамическое условие сразу со скалярными значениями

Так забавно употребляешь слово "скалярные", будто еще и векторные бывают)))

Вообщем, помнится мне когда-то пробовал работать со свойством .sql объекта querydef.
Что-то вроде того:
Код: vbnet
1.
2.
3.
    Dim qd1 As QueryDef
    Set qd1 = CurrentDb.QueryDefs("твой_запрос")
    qd1.SQL = "SELECT то-то FROM оттуда-то WHERE такие-то;"


Ну дальше докуришь до своей ситуации. У тебя там jet и всё такое. Главное, что строку запроса какую нужно подсовываешь.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40087411
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Beliar,

Сейчас так и сделано, но хочется уйти от перезаписи запроса, чтобы по сети мультипользовательский режим
...
Рейтинг: 0 / 0
Работа Access Jet
    #40087422
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BoxaXP
Beliar,

Сейчас так и сделано, но хочется уйти от перезаписи запроса, чтобы по сети мультипользовательский режим

Ну ты же как-то функцию свою собирался применять. Где, в чем это должно было происходить?
...
Рейтинг: 0 / 0
Работа Access Jet
    #40087713
cylindr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
чтобы по сети мультипользовательский режим

У каждого пользователя есть БД с формами? Я временные таблицы делал так: Название_Имяпользователя и соответственно обращался так же.
Что касается перезаписи запроса, то в чём проблема? Он же у каждого свой, хоть 100 раз в день перезаписывайте.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40087860
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cylindr
BoxaXP
чтобы по сети мультипользовательский режим

У каждого пользователя есть БД с формами?


Да. А хотелось бы 1 БД с формами на сетевом диске для всех
и скорость выполнения запроса при использовании функции в where как при перезаписи запроса с явным указанием значений
...
Рейтинг: 0 / 0
Работа Access Jet
    #40088056
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BoxaXP, Я понял... ты хочешь, чтобы сохраненный запрос сам, без вмешательства из вне, менял свой sql-текст за счет некоей функции, содержащейся в нем же? Но средствами sql не предусмотрено изменение структуры запроса, sql-команд, операторов или имени запроса. Функция может содержать подзапрос, но ее значение воспринимается, как данные, а не как часть структуры. Функция Eval немного обнадеживает, но совсем немного, ведь она возвращает не само выражение аргумента, а уже вычисленное значение этого выражения. Т.е. указываешь в качестве аргумента ID=3, то Eval сначала вычислит, сколько будет ID=3, если она сможет это вычислить, то результат уже подставит вместо себя, а если нет, то выдаст ошибку. Да ты, скорее всего, сам знаешь это. Опять же, значение этой функции Eval, как и любой другой, не подсунуть в качестве части структуры запроса.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40088308
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Beliar,
Все так. Но почему access запросы где where ID=Функция() /которая и выдает 3/
работают медленнее запросов где where ID=3 и не используют индексов.
По идее Функция() должна вычисляться до выполнения запроса. Как бы посмотреть
строку sql прямо перед выполнением с вычисленными выражениями и функциями.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40088333
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
По идее Функция() должна вычисляться до выполнения запроса. Как бы посмотреть
строку sql прямо перед выполнением с вычисленными выражениями и функциями.

Ваша функция дергается перед анализом каждой записи, а при заданном числе в условии нет побочных дерганий при отборе ...
С чего вы решили что функция должна выполняться один раз в начале перед выполнением ?
Ваш случай самый что ни на есть частный и узкий...
Чтобы это понять, я приведу простой пример:
1. Делаем запрос на выборку тестового поля (и нам нужно искусственно проставить в запросе нумерацию),
то есть добавляем в запрос функцию num1() ...
2. Заводим глобальную переменную в общем модуле i As Long
3. Делаем функцию в общем модуле:
Код: vbnet
1.
2.
3.
4.
Public Function num1 () As Long
i=i+1
num1 = i
End Function 


4. В кнопке на форме пишем
i=0
открываем запрос на выборку и видим нумерацию...
то есть при выборе каждой записи, запрос дергает функцию, которая возвращает текущий номер по порядку...
Отличие вашего случая лишь в том, что при каждом дергании функции получаются одни и те же значение...
Намекаю на то, что с индексами всё ОК, проблема в другом...
...
Рейтинг: 0 / 0
Работа Access Jet
    #40088379
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP, проблемы скуля решайте в скуле - причем тут акс, который просто морда? префикс dbo в названии таблиц должен уж сказать изначально был, или некластеризованные индексы...
и запросы лучше делать "там", а не таскать через коннекшн, в запросах "там" чего только нет и if и case -есть где разгуляться.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40088465
cylindr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP
Да. А хотелось бы 1 БД с формами на сетевом диске для всех

Тогда нужно настраивать файл рабочих групп mdw и каждому пользователю делать ярлык. Также подключаться на сервер желательно по RDP. В 2010-м mdw вроде есть, но спрятан. В более новых не знаю.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40088542
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,

Да нет. проверял

Public Function My () As Long
msgbox "Test"
My = 3
End Function

если функция используется в where то вызов идет один раз, а если засунуть в select
или в параметр передать поле тогда конечно по разу на каждую запись.
...
Рейтинг: 0 / 0
Работа Access Jet
    #40088545
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,
Все верно можно и прямыми запросами на sql оперировать, но опять же передача
параметров через перезапись запросов. Индексы то есть по полю отбора кластеризованный,
а индекс покрывающий запрос не кластеризованный.
Вот access использует покрывающий если
where ID=5, и НЕ использует если where ID=МояФункция()
...
Рейтинг: 0 / 0
Работа Access Jet
    #40088568
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoxaXP,
-что такое запросы на выборку,перекрестный,с параметрами,SQL запрос и изменение(обновление, добавление, удаление, создание таблицы)-знаю, а что есть "покрывающий" запрос не знаю
-если поле проиндексировано то как индекс может "не использоваться"??
...
Рейтинг: 0 / 0
Работа Access Jet
    #40088581
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku
BoxaXP,
-что такое запросы на выборку,перекрестный,с параметрами,SQL запрос и изменение(обновление, добавление, удаление, создание таблицы)-знаю, а что есть "покрывающий" запрос не знаю
-если поле проиндексировано то как индекс может "не использоваться"??

Прилагательное "покрывающий", видимо относится к индексу, а не запросу. Так бывает, когда знаки препинания не используют. Но тоже хотелось бы знать, что значит "индекс , покрывающий запрос".
...
Рейтинг: 0 / 0
Работа Access Jet
    #40088663
BoxaXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Запрос на выборку. Покрывающий индекс (все поля select запроса есть в индексе).
На таблице несколько индексов. Access не использует этот покрывающий индекс
когда в Where применяется функция или ссылка на поле формы.
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа Access Jet
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]