|
Проблемы с меню на сети
|
|||
---|---|---|---|
#18+
Пользователи работают с программой удаленно по сети. Проблема в том, что при запуске сетевого exe-файла, появляется форма с меню, которое не работает (при наведении курсора мыши на пункт меню он становится синим, а при последующем нажатии мыши - белым и не раскрывается, только по двойному клику и то не всегда). Этот же exe-файл нормально отрабатывает на локальной машине(пункты меню открываются по одиночному клику без проблем). В чем может быть проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2018, 19:50 |
|
Проблемы с меню на сети
|
|||
---|---|---|---|
#18+
Немного докопался до сути проблемы, но пока не до конца: В одном из пунктов меню в поле SkipFor у меня стояла функия isEnable() , с кодом что то типа: Код: sql 1. 2. 3. 4. 5. 6. 7.
Проблему вызывает select , но пока не понял почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 14:54 |
|
Проблемы с меню на сети
|
|||
---|---|---|---|
#18+
faustgreenНемного докопался до сути проблемы, но пока не до конца: В одном из пунктов меню в поле SkipFor у меня стояла функия isEnable() , с кодом что то типа: Код: sql 1. 2. 3. 4. 5. 6. 7.
Проблему вызывает select , но пока не понял почему.Потому, что сия операция может быть сильно зависящей от ресурсов машины и сети, в которой неизвестно что творится. Тем более, что приведенный код далек от оптимальности с точки зрения производительности и использования ресурсов. А пока сей запрос выполняется все ваши попытки нажимать кнопки и тыкать мышкой будут выдавать описанные эффекты. Так как запрос нужен только для определения наличия хотя бы одной записи в базе, то можно использовать top 1 в запросе дабы не плодить возможно большой результирующий курсор. Да и все поля в нем не нужны. И который, в свою очередь, заменить на массив, исчезающий и освобождающий ресурсы сразу при выходе из функции. Код: sql 1.
5(Пять) оставшихся строчек легко и непринужденно заменяются 1(Одной) строкой Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 15:21 |
|
Проблемы с меню на сети
|
|||
---|---|---|---|
#18+
Про последние пять строк логично, просто привык так обработку делать - получил курсор, если записи есть один блок кода, если нет - другой. У меня это конструкция на автомате набивается ). По самой сути задачи - есть переменная, которая при наличии в некоторой выборке (селекте) должна позволять выбрать пункт меню или нет. Как вариант можно вынести этот код туда где меняется эта переменная и там, например, присваивать результат другой переменной, и уже по ней блокировать/деблокировать пункт меню. Так у нас не будет вызываться процедура при каждом нажатии на меню. Тут еще вопрос возник про Код: sql 1.
записей. Как оно работает? Вроде пишут, что если таблица не сортирована и не имеет индекса, то при выборке сначала будут получены ВСЕ записи и только потом отберутся N первых. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 20:19 |
|
Проблемы с меню на сети
|
|||
---|---|---|---|
#18+
faustgreenТут еще вопрос возник про Код: sql 1.
записей. Как оно работает? Вроде пишут, что если таблица не сортирована и не имеет индекса, то при выборке сначала будут получены ВСЕ записи и только потом отберутся N первых.Этот утверждение легко и быстро проверяется практически. Если уж думать не хочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 20:55 |
|
Проблемы с меню на сети
|
|||
---|---|---|---|
#18+
По последнему вопросу - Top N не будет работать без секции order by , так что тут вопросы отпали. Но чем больше копаешь, тем больше вопросов появляется. Таблица tab1 (id N(10), string C(250)), количество записей 1 000 000. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Результаты выполнения (перед открытием спойлера попробуйте предугадать результат): MESSAGEBOX(timer1_2 - timer1_1) - 4 секунды MESSAGEBOX(timer2_2 - timer2_1) - 2 секунды После изменеия кода (Поменял местами оба селекта): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
MESSAGEBOX(timer2_2 - timer2_1) - 3 секунды MESSAGEBOX(timer1_2 - timer1_1) - 1 секунды После изменения кода (поменял поле сортировки во втором селекте): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
MESSAGEBOX(timer1_2 - timer1_1) - 1 секунды MESSAGEBOX(timer2_2 - timer2_1) - 15 секунды В целом тему можно закрывать, последнее сообщение привел ради интереса. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 22:26 |
|
Проблемы с меню на сети
|
|||
---|---|---|---|
#18+
Можно вообще не использовать select-sql, если Вы работаете с DBF-таблицами. А вместо него использовать LOCATE Код: sql 1. 2. 3. 4. 5. 6. 7.
LOCATE FOR при отключенном главном индексе (SET ORDER TO 0) также использует оптимизацию запросов, как и Select-SQL, поэтому по скорости выполнения потерь не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2018, 10:31 |
|
|
start [/forum/topic.php?fid=41&fpage=9&tid=1581763]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 284ms |
total: | 406ms |
0 / 0 |