|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Кстати: q.close - это лишнее. У QueryDef нет ни Open, ни Close. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2003, 14:22 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
2Саныч >Кстати: q.close - это лишнее. У QueryDef нет ни Open, ни Close. Open нет, а Close есть. Так что ничего лишнего :) >Это ведь действует только на данную аппликацию (а не на весь Аксесс) и только у заказчика (который в сам Аксесс не лезет). Действует только на проект. Но, во-первых, сам разработчик может напороться (случайно нажать DEL на таблице, например, - кхе-кхе: сам как-то попался :), да и премудрый оператор - то же, если до Окна дорветься. 2Sfagnum >Ну вот и объяснишь почему, а то услышат где на углу и давай внедрять, до SQL.Ru ни х.. не знают... Какой такой угол? Ты же сслыку сам запостил. ТТам мой пост от "Дата: 31 июл 03, 10:44"? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2003, 14:51 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
> Open нет, а Close есть. Так что ничего лишнего :) Помню, когда наша фирма только начинала работать на Аксессе, мы получали какую-то брошюрку от Майкрософта. Там была статья под заголовком: "Не закрывайте то, чего не открывали!" Кроме того, вот что написано в хелпе: Closing an open object removes it from the collection to which it's appended. Это ведь не то, что мы хотим? > Но, во-первых, сам разработчик может напороться Надо делать так: If DevelopEnvir Then..., где DevelopEnvir - это какая-нибудь функция, которая может, например, обращаться к ini. > да и премудрый оператор - то же, если до Окна дорветься. А ему не надо прав давать на уничтожение объектов. А то он и получит MsgBox на подтверждение, и ответит "да". ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2003, 15:14 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Виктор, хочу твою реакцию. Надо родить истину. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2003, 17:07 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
2Саныч >Кроме того, вот что написано в хелпе: Closing an open object removes it from the collection to which it's appended. Это ведь не то, что мы хотим? Все-таки Close есть, сейчас некогда MSDN копать, но если есть Закрыть, то что-то его и открывает. Я думаю: Set q=CurrentDb. Open QueryDefs(...) Но это все домыслы. Надо MSDN рыть. Хотя надо попробовать сделать Set, затем точку останова и посмотреть на блокировки >Надо делать так: If DevelopEnvir Then..., где DevelopEnvir - это какая-нибудь функция, которая может, например, обращаться к ini. >А Оператору не надо прав давать на уничтожение объектов. А то он и получит MsgBox на подтверждение, и ответит "да". Саныч, все-таки это лишнее - трогать глобальные (для проекта) свойства. Мое (сугобо личное и не обязательно близкое к правде - о как завернул :) - трогать не надо. >Надо родить истину. Тут уже не о истине идет речь, а о привычках, стили программирования. Лично мне - не нравиться (так и запишите в протокол ) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2003, 18:57 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Senin Viktor писал:2Sfagnum >Ну вот и объяснишь почему, а то услышат где на углу и давай внедрять, до SQL.Ru ни х.. не знают... Какой такой угол? Ты же сслыку сам запостил. ТТам мой пост от "Дата: 31 июл 03, 10:44"? Нуу.... там больше эмоций нежели обоснований, эти бы довады да по формальнее, и обоснований ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2003, 11:40 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
> Все-таки Close есть, сейчас некогда MSDN копать, Оно есть, это факт. Но я не понимаю, что оно делает. Неужели удаляет запрос из коллекции QueryDefs? > но если есть Закрыть, то что-то его и открывает. Я думаю: Set q=CurrentDb.OpenQueryDefs(...) Ноу, сэр. (Или: Но, но, но, но, сеньор.) QueryDefs - это всего лишь название коллекции, в которой содержатся все запросы. CurrentDb.QueryDefs(...) - это просто такая же ссылка на запрос, как и q. Она ничего не открывает. > Хотя надо попробовать сделать Set, затем точку останова и посмотреть на блокировки Какие блокировки??? > все-таки это лишнее - трогать глобальные (для проекта) свойства. Что значит трогать? Они для того и существуют, чтобы их задавать и конфигурировать. Неужели нельзя задать для данного mdb свою конфигурацию настроек? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2003, 17:16 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Ну как хотите... == попробую покапать глубже ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2003, 18:18 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Это был ответ на который из моих вопросительных знаков? :^) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2003, 18:26 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
2Саныч >Это был ответ на который из моих вопросительных знаков? :^) На "Они для того и существуют, чтобы их задавать и конфигурировать" На "Какие блокировки???" На "это просто такая же ссылка на запрос, как и q. Она ничего не открывает." :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2003, 18:43 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
:^) Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2003, 18:45 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Всегда пожалуйста == Я еще к этой теме, наверное, вернусь Разгребу дела, найду время на MSDN и тогда продолжим ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2003, 18:49 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
ОК, тогда пока не будем торопиться с публикацией этого фака. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2003, 22:09 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
2Саныч Ну почему же не публиковать? Можно - все же верно, а Close/Nothing - это из области наших прошлых (и будующих) сражений по поводу надо ли деладть деинициализацию объектных переменных, если они и так выйдут из области видимости процедуры и уничтожаться VBA) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2003, 11:25 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
> Ну почему же не публиковать? Так ведь нет окончательной формулировки. > а Close/Nothing - это из области наших прошлых (и будующих) сражений по поводу надо ли деладть деинициализацию объектных переменных, если они и так выйдут из области видимости процедуры и уничтожаться VBA Деинициализацию делать надо, с этим у меня полное единогласие. Но я не понимаю, что такое Close применительно к QueryDef. Писать его или не писать. Если мы рекомендуем его писать, то нам самим надо понять, что оно делает. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2003, 13:59 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Я сейчас поставил эксперимент. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Запустил это, дошел до Stop и стал смотреть в Debug Window: Код: plaintext 1. 2. 3.
Все ОК. Потом сделал q.Close и снова стал смотреть. И ничего не изменилось! То есть q.Close ничего не делает, даже не стирает значения, присвоенные параметрам запроса, и не уничтожает рекордсет, открытый на запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2003, 14:45 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
(к моему сожалению главного справки по DAO SDK у меня нет - там есть (дложно?) быть более полное освещение проблемы) из справки Акеса: Код: plaintext 1. 2. 3. 4.
Далее идут чудеса ввиду отсуствия упоминания QueryDef : Код: plaintext 1. 2. 3. 4. 5. 6. 7.
А теперь и далеее только MSDN: Есть пример Close который вызываеться после операции Delete (ms-help://MS.MSDNQTR.2003APR.1033/bapp2000/html/acbachap06.htm) Код: plaintext 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.
Так же попалась на глаза интересная статья "ACC: Problems Quitting Microsoft Access" правда, только для 97 акеса (ms-help://MS.MSDNQTR.2003APR.1033/enu_kbaccesskb/accesskb/164455.htm) Код: plaintext 1. 2. 3.
и пример Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Статья "ACC2000: To Help Prevent Database Bloat, Explicitly Close Recordsets" содержит тот же пример (...Because the recordset memory is not released, each time that you loop through code, DAO may recompile, using more memory and increasing the size of the database. ) и те же рекомендации закрывать.(ms-help://MS.MSDNQTR.2003APR.1033/enu_kbacc2000kb/acc2000kb/209847.htm) и тоже самое для 2002 акеса (ms-help://MS.MSDNQTR.2003APR.1033/enu_kbacc10kb/acc10kb/289562.htm) И еще одна статья "ACC: Explicitly Close Recordsets to Help Prevent Database Bloat" (ms-help://MS.MSDNQTR.2003APR.1033/enu_kbaccesskb/accesskb/186311.htm) с тем же (блин, микрософтоцы Copy-Paste освоили идеально :) примером и с тем же советом. Есть пример с Close после создания нового объекта "HOWTO: Create a Parameter Query via Data Access Objects" (ms-help://MS.MSDNQTR.2003APR.1033/enu_kbvbapps/vbapps/142938.htm) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Не много из справки по С++ Код: plaintext 1. 2. 3. 4. 5.
И еще один пример "ACC2000: "Too Few Parameters. Expected 1" Error Message" (ms-help://MS.MSDNQTR.2003APR.1033/enu_kbacc2000kb/acc2000kb/209203.htm) Код: plaintext 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.
Так же в статье "ACC: "Too few parameters. Expected 1" Error Message" (ms-help://MS.MSDNQTR.2003APR.1033/enu_kbaccesskb/accesskb/105522.htm) имееться пример с Close QueryDef В статье "BUG: Parameterized Queries with JET OLE DB Provider May Run Slow" говориться о необходимости закрывать объект перед его выполнением с новыми парметрами (ms-help://MS.MSDNQTR.2003APR.1033/enu_kboledb/oledb/252883.htm) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Так же при модификации SQL-инструкции вызываеться метод Close (статья "How to Use a Multi-Select List Box to Filter a Form" (ms-help://MS.MSDNQTR.2003APR.1033/enu_kbvbapps/vbapps/135546.htm) Код: plaintext 1. 2. 3. 4. 5. 6.
Ну и напоследок самое интересное: В MSDN так же имеется туева-хуча примеров без Close. вот теперь думайте и решайте для себя к5аждый сам. А я все-таки буду делать Close и Nothing. (Тут заметил что эти 2 слова я уже могу набрать на клаве слепым методом - так что трудозатраты минимальны) == Извиняйте за многословность. === и у кого есть DAO SDK - плиз, see Close method. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2003, 15:31 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Ну а теперь, Саныч, мне нужно твое мнение :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2003, 15:33 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
я тоже теперь ставлю, правда еще вслепую не умею набирать. я считаю из всего сказанного можно сделать вывод не работает (есть Close, Nothig) - попробуй убрать Close, Nothig не работает (нет Close, Nothig) - попробуй поставить Close, Nothig ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2003, 16:07 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Ну, Виктор, я просто обязан оценить твои трудозатраты... Ясности немножко появилось, хотя и не до конца. Можно сформулировать так: Код: plaintext 1. 2.
Все равно никуда не уйти от сказанного Вадей: ставь Close наобум, а если не работает, то убирай. Кстати: я в своем эксперименте попробовал делать Close несколько раз подряд. Нифига. Значения параметров сохраняются, рекордсет стоит, как штык. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2003, 16:50 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Да, Вадя хорошо сформулировал один из основной принципов занятия AcSex'ом == Надо в факе дать ссылку по Close на этот топик - пусть каждый решает сам ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2003, 17:50 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Итак, вот новая версия.\r \r Для рассуждений про Close, увы, места не нашлось. От тех кусков кода, в которых это стояло, я оставил только то, что непосредственно является ответом на вопрос. Close был в тех строках, которые, по идее, у задающего вопрос и так уже написаны на момент задания вопроса.\r \r В вопросе про параметры запроса я добавил Eval - мне кажется, что это был пропущенный всеми баг.\r \r ===\r \r Q: Перестали распознаваться служебные слова, такие как Left, Right, Database и т.д.\r \r A1: Проверь, не слетели ли ссылки. Из окна открытого модуля Tools -> References, и там должны быть помечены:\r \r Кто-нибудь, помогите добавить список ссылок, которые необходимы.\r \r A2: Если в региональных настройках Windows в качестве разделителя списков задана не запятая, а, скажем, точка с запятой, то при обращении к функциям надо ставить между аргументами именно этот разделитель (если обращение находится в запросе, в свойствах контрола и т.п., а не в модуле).\r \r A3: В качестве имени объекта могло случайно оказаться взято служебное слово. Решения: переименовать объект; пользоваться полным синтаксисом (Me!MyControl, а не просто MyControl).\r \r Q: Ставлю MsgBox - работает. Убираю - не работает.\r \r A: Поставь DoEvents вместо MsgBox.\r \r Q: Вылазит сообщение: Expected variable or procedure, not module.\r \r A: Начиная с Access 95, запрещено давать модулям имена, совпадающие с названиями переменных и процедур, а также со служебными словами. Если при компиляции появилось такое сообщение - значит, среди модулей попался такой, имя которого совпадает с чем-то в той строке, на которую Аксесс кричит. Его надо переименовать.\r \r Q: Начинается совершенно непонятное поведение mdb.\r \r A: Скорее всего файл испортился. Надо попробовать его починить. Вот топик, в котором накидано очень много способов, как вылечить испорченный mdb:\r \r /topic/40603\r \r (Правда, оказалось, что тот mdb вроде и не был испорчен, однако топик все равно очень полезный.)\r \r Q: Как избавиться от подтверждений на удаление и т.п.?\r \r A1: Ты, наверно, пользуешься DoCmd.RunSQL? Срочно переходи на CurrentDb.Execute (и т.п.). Только надо учесть, что Execute не будет работать, если команда или один из нижележащих запросов содержит обращения к формам, - все эти обращения будут восприняты как параметры, которым не передано значение. На этот случай см. следующий вопрос на этой же странице.\r \r A2: Иногда советуют поставить DoCmd.SetWarnings False, но это крайне опасно. При неаккуратном использовании этой команды Аксесс просто вообще перестанет выдавать сообщения об ошибках. Это требует добавить DoCmd.SetWarnings True где только можно, особенно в обработчиках ошибок. В противном случае Аксесс в какой-нибудь момент вообще перестанет выдавать сообщения об ошибках до конца работы программы. Вот пример правильного пользования SetWarnings:\r \r /topic/36200\r \r A3: Иногда советуют поменять глобальные настройки аппликации:\r \r Код: plaintext 1. 2.
\r Это тоже крайне опасно. Подтверждения исчезнут во всей аппликации насквозь, в том числе там, где это не планировалось. Это можно делать только в том случае, если соблюдены два условия: 1. Пользователь лишен права на удаление тех объектов, которые нужны для нормальной работы программы, и данных через экран. 2. Подтверждения не отключаются, если в аппликации работает сам разработчик.\r \r Q: Я выполняю запрос в коде, а мне в ответ - "Too few parameters. Expected Число" ("Слишком мало параметров. Ожидалось Число").\r \r A: Если все параметры являются ссылками на контролы форм (Forms![ИмяФормы]![ИмяКонтрола]), тогда самое простое (и красивое) решение (тут и дальше q - переменная типа QueryDef, ссылающаяся на тот запрос, с которым возникла проблема):\r \r Код: plaintext 1. 2. 3.
\r Если вместо обращений к формам ты используешь собственные параметры (например [Введите начальную дату:], тогда нужно задать их значения так:\r \r Код: plaintext 1. 2.
\r Узнать, какие параметры от тебя хочет Аксесс, можно с помощью следующего кода:\r \r Код: plaintext 1. 2. 3.
\r Вроде бы тут не все охвачено. Помнится, Лох говорил, что то ли инсерт иногда запрашивает параметры, а апдейт в тех же случаях нет, то ли наоборот. И с перекрестными запросами вроде тоже была какая-то особенность на ту же тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2003, 20:17 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Вроде вопросы DoCmd.RunSQL & CurrentDb.Execute & Application.SetOption - решили вынести в отдельный FAQ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2003, 09:45 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
2 Sfagnum: Где и когда решили? Есть какие-то наработки по этому поводу? Есть ссылка на какой-то топик? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2003, 11:05 |
|
|
start [/forum/topic.php?fid=45&msg=32238277&tid=1672653]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
50ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 163ms |
0 / 0 |