|
Работа Access Jet
|
|||
---|---|---|---|
#18+
Serg197311, Ткни пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2021, 15:47 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP Запрос сохраненный, используется как базовый в массе других запросов в подобных случаях всегда помогает промежуточная временная таблица, в которую сливаете ваши данные из запроса и обращаетесь потом к ней. После всего таблицу очищаете до следующего раза. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 06:20 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
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 составной индекс для связанной таблицы показывает как простой индекс по первому полю составного индекса ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 13:17 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
cylindr, как она поможет в многопользовательской среде, все и так неплохо работает если просто переписывать запрос под указанные условия, но тогда приходиться ставить каждому свою клиентскую часть ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 13:21 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP но тогда приходиться ставить каждому свою клиентскую часть - можно использовать не сохраненный запрос (строка sql) - можно сохранять запрос с именем от диапазона (после выполнения удалять) WHERE dbo_Архив.ID_наработки Between (442561) And (442862) => z442561442862 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 13:32 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP cylindr, как она поможет в многопользовательской среде, все и так неплохо работает если просто переписывать запрос под указанные условия, но тогда приходиться ставить каждому свою клиентскую часть Возможно, я не прав... или не совсем прав... Но для своей базы я выбрал разделение.... И в таких случаях ( как писали выше) сначала программно (Currentdb.exectue) заполняю временную таблицу, формируя инструкцию в зависимости от нужных усливий, а после использования - чищу ее. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2021, 14:12 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
Еще вопрос? Кто нибудь пробовал сформировать запрос вида: Select * From (eval("МояФункция()")); где МояФункция() возвращает строку вида Select * from Mytabl where ID=3 или нечто подобное Select * from Mytabl where МояФнкция() где МояФункция() возвращает строку вида ID=3 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 14:38 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP Еще вопрос? Кто нибудь пробовал сформировать запрос вида: Select * From (eval("МояФункция()")); где МояФункция() возвращает строку вида Select * from Mytabl where ID=3 или нечто подобное Select * from Mytabl where МояФнкция() где МояФункция() возвращает строку вида ID=3 Всегда так делаю. У меня в базах обычно есть таблица с единственной записью для оперативных значений. Например, текущая дата (не та, что на календаре, а та, что выбрал юзер для работы) храниться (и изменяется юзером) в этой таблице в поле cur_date. В общем модуле прописана функция CurDate(), получающая это значение запросом. А её уже использую, где потребуется. И в запросах, и модулях форм/отчетов. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 07:55 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP Select * from Mytabl where МояФнкция() где МояФункция() возвращает строку вида ID=3 Этот вариант точно рабочий. А в первом... синтаксисом SQL не предусмотрен такой разврат)) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 09:23 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
Beliar BoxaXP Select * from Mytabl where МояФнкция() где МояФункция() возвращает строку вида ID=3 Этот вариант точно рабочий. А в первом... синтаксисом SQL не предусмотрен такой разврат)) Рабочий Select * from Mytabl where ID=МояФнкция() , но медленно не используя индекс А у Select * from Mytabl where МояФнкция() Where не отрабатывает, тянется вся таблица Пробовал Код: sql 1. 2. 3. 4.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Может кто-то извращался чтобы в where динамическое условие сразу со скалярными значениями ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 13:03 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP Может кто-то извращался чтобы в where динамическое условие сразу со скалярными значениями Так забавно употребляешь слово "скалярные", будто еще и векторные бывают))) Вообщем, помнится мне когда-то пробовал работать со свойством .sql объекта querydef. Что-то вроде того: Код: vbnet 1. 2. 3.
Ну дальше докуришь до своей ситуации. У тебя там jet и всё такое. Главное, что строку запроса какую нужно подсовываешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 14:28 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
Beliar, Сейчас так и сделано, но хочется уйти от перезаписи запроса, чтобы по сети мультипользовательский режим ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 19:04 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP Beliar, Сейчас так и сделано, но хочется уйти от перезаписи запроса, чтобы по сети мультипользовательский режим Ну ты же как-то функцию свою собирался применять. Где, в чем это должно было происходить? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 19:51 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP чтобы по сети мультипользовательский режим У каждого пользователя есть БД с формами? Я временные таблицы делал так: Название_Имяпользователя и соответственно обращался так же. Что касается перезаписи запроса, то в чём проблема? Он же у каждого свой, хоть 100 раз в день перезаписывайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 04:40 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
cylindr BoxaXP чтобы по сети мультипользовательский режим У каждого пользователя есть БД с формами? Да. А хотелось бы 1 БД с формами на сетевом диске для всех и скорость выполнения запроса при использовании функции в where как при перезаписи запроса с явным указанием значений ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 14:13 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP, Я понял... ты хочешь, чтобы сохраненный запрос сам, без вмешательства из вне, менял свой sql-текст за счет некоей функции, содержащейся в нем же? Но средствами sql не предусмотрено изменение структуры запроса, sql-команд, операторов или имени запроса. Функция может содержать подзапрос, но ее значение воспринимается, как данные, а не как часть структуры. Функция Eval немного обнадеживает, но совсем немного, ведь она возвращает не само выражение аргумента, а уже вычисленное значение этого выражения. Т.е. указываешь в качестве аргумента ID=3, то Eval сначала вычислит, сколько будет ID=3, если она сможет это вычислить, то результат уже подставит вместо себя, а если нет, то выдаст ошибку. Да ты, скорее всего, сам знаешь это. Опять же, значение этой функции Eval, как и любой другой, не подсунуть в качестве части структуры запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 07:10 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
Beliar, Все так. Но почему access запросы где where ID=Функция() /которая и выдает 3/ работают медленнее запросов где where ID=3 и не используют индексов. По идее Функция() должна вычисляться до выполнения запроса. Как бы посмотреть строку sql прямо перед выполнением с вычисленными выражениями и функциями. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 17:33 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP По идее Функция() должна вычисляться до выполнения запроса. Как бы посмотреть строку sql прямо перед выполнением с вычисленными выражениями и функциями. Ваша функция дергается перед анализом каждой записи, а при заданном числе в условии нет побочных дерганий при отборе ... С чего вы решили что функция должна выполняться один раз в начале перед выполнением ? Ваш случай самый что ни на есть частный и узкий... Чтобы это понять, я приведу простой пример: 1. Делаем запрос на выборку тестового поля (и нам нужно искусственно проставить в запросе нумерацию), то есть добавляем в запрос функцию num1() ... 2. Заводим глобальную переменную в общем модуле i As Long 3. Делаем функцию в общем модуле: Код: vbnet 1. 2. 3. 4.
4. В кнопке на форме пишем i=0 открываем запрос на выборку и видим нумерацию... то есть при выборе каждой записи, запрос дергает функцию, которая возвращает текущий номер по порядку... Отличие вашего случая лишь в том, что при каждом дергании функции получаются одни и те же значение... Намекаю на то, что с индексами всё ОК, проблема в другом... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 18:35 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP, проблемы скуля решайте в скуле - причем тут акс, который просто морда? префикс dbo в названии таблиц должен уж сказать изначально был, или некластеризованные индексы... и запросы лучше делать "там", а не таскать через коннекшн, в запросах "там" чего только нет и if и case -есть где разгуляться. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 20:26 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP Да. А хотелось бы 1 БД с формами на сетевом диске для всех Тогда нужно настраивать файл рабочих групп mdw и каждому пользователю делать ярлык. Также подключаться на сервер желательно по RDP. В 2010-м mdw вроде есть, но спрятан. В более новых не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 04:34 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
vmag, Да нет. проверял Public Function My () As Long msgbox "Test" My = 3 End Function если функция используется в where то вызов идет один раз, а если засунуть в select или в параметр передать поле тогда конечно по разу на каждую запись. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 11:42 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
alecko, Все верно можно и прямыми запросами на sql оперировать, но опять же передача параметров через перезапись запросов. Индексы то есть по полю отбора кластеризованный, а индекс покрывающий запрос не кластеризованный. Вот access использует покрывающий если where ID=5, и НЕ использует если where ID=МояФункция() ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 11:52 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
BoxaXP, -что такое запросы на выборку,перекрестный,с параметрами,SQL запрос и изменение(обновление, добавление, удаление, создание таблицы)-знаю, а что есть "покрывающий" запрос не знаю -если поле проиндексировано то как индекс может "не использоваться"?? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 12:32 |
|
Работа Access Jet
|
|||
---|---|---|---|
#18+
sdku BoxaXP, -что такое запросы на выборку,перекрестный,с параметрами,SQL запрос и изменение(обновление, добавление, удаление, создание таблицы)-знаю, а что есть "покрывающий" запрос не знаю -если поле проиндексировано то как индекс может "не использоваться"?? Прилагательное "покрывающий", видимо относится к индексу, а не запросу. Так бывает, когда знаки препинания не используют. Но тоже хотелось бы знать, что значит "индекс , покрывающий запрос". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 13:13 |
|
|
start [/forum/topic.php?fid=45&msg=40086596&tid=1609629]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
130ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 255ms |
total: | 478ms |
0 / 0 |