|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
Доброго денечка! Вопрос такой. Делаю уже третью форму Access + SQL по стандартному алгоритму: в заголовке формы фильтры, которые по кнопке Применить обновляют содержимое подчиненной табличной формы. Надо просто выводить записи, соответствующие условиям фильтра. Предыдущие 2 формы работают. Но третья... просто чудеса в решете. Делаю, может криво... но тогда прошу подсказок. Сейчас делаю так: на кнопке "Применить фильтры" (далее просто Применить) следующий код Код: vbnet 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.
В подчиненной форме источник записей tmp_PrikazDek. Полям тоже присвоены источники из таблицы. Теперь о чудесах. Начнем с того, что в подчиненную форму выводит всегда только 1 запись, первую в результате запроса. И все! Хотя по циклу бегает, запросы выполняет, ошибок не выдает никаких, но в таблице tmp_PrikazDek только одна запись и в форме соответственно. Что это за ерунда? Почему? В других аналогичных формах все заполняется... Второе чудо, новое. На строчке NumSession = rs("NumSession") теперь выдает ошибку "Невозможно присвоить значение объекту". Ну, это уж вообще красота! В поле rs("NumSession") на дебаге значение 57. Чем не Integer? Откуда объекты, когда просто переменная типа Integer и значение присваивается соответствующее. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2019, 22:28 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
wls1978, это не фильтрация, т.е. не применение фильтра Код: vbnet 1.
ошибка с NumSession - вполне возможно что записей слишком много, rs.count ещё не посчитан, переход на первую строку не выполняется, а в BOF значения нет . т.е. нужно бы rs.movelast, затем уже rs.count... а дальше следствие, поскольку rs.movefirst не выполнен, вполне возможно что к этому моменту rs.count посчитали, где остановились там и остались... в конце. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2019, 20:12 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
alecko, rs.movefirst есть, не написала сюда в код, прошу прощения. Но проверю, где этот movefirst - до присвоения NumSession или после. Спасибо за подсказку. А записей на тесте всего 2, так что не может быть переполнения. По поводу фильтра - я имею ввиду не фильтрацию источника данных, а выбор записей в базе SQL. Т.е. на форме я выставляю условия, по которым отбираю записи. Эти условия и называю фильтрами. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2019, 21:52 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
wls1978, речь про эту строчку Код: vbnet 1.
имел ввиду Код: vbnet 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2019, 23:41 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
wls1978rs.movefirst есть, не написала сюда в код, прошу прощения.избыточно, ADO без прогона записей сразу знает сколько их. Проверять лучше с помощью BOF и EOF , если оба свойства true, то набор пуст. Зачем в коде объект Command если он не используется в дальнейшем? Нужно так Код: vbnet 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 04:12 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
wls1978 Код: vbnet 1.
Избыточно. После того как набор ADO открыт, он сразу на первой записи, если записи есть. wls1978 Код: vbnet 1. 2. 3. 4. 5. 6.
Вот зачем всё мешать? не проще ли Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
? Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 04:26 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
Панург ADO без прогона записей сразу знает сколько ихдобавлю. В некоторых случаях вообще всегда будет -1, хотя записи будут. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 04:30 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
wls1978Второе чудо, новое. На строчке NumSession = rs("NumSession") теперь выдает ошибку "Невозможно присвоить значение объекту". Ну, это уж вообще красота! В поле rs("NumSession") на дебаге значение 57. Чем не Integer? Откуда объекты, когда просто переменная типа Integer и значение присваивается соответствующее.Поставь перед NumSession = rs("NumSession") брекпойнт (или напиши в коде Stop ) открой окно Locals , найди в нём свой набор и посмотри чего там в первой записи в этом поле (там и тип поля будет указан). Кстати, почему Integer ? Поставь тип Long . Жалко что-ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 04:38 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
aleckoошибка с NumSession - вполне возможно что записей слишком много, rs.count ещё не посчитан, переход на первую строку не выполняется,У нас синхронные операции (поток один), потому пока набор не будет заполнен выполнение кода продолжено не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 04:49 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
Панург Код: vbnet 1.
То же сообщение. А с одной добавляемой записью разобралась. Оказывается у меня в таблице ключ стоял на 2 поля, по которым вторая запись оказывалась неуникальной. Поправила ключ, записи добавляются. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 03:48 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
Панургwls1978Второе чудо, новое. На строчке NumSession = rs("NumSession") теперь выдает ошибку "Невозможно присвоить значение объекту". Ну, это уж вообще красота! В поле rs("NumSession") на дебаге значение 57. Чем не Integer? Откуда объекты, когда просто переменная типа Integer и значение присваивается соответствующее.Поставь перед NumSession = rs("NumSession") брекпойнт (или напиши в коде Stop ) открой окно Locals , найди в нём свой набор и посмотри чего там в первой записи в этом поле (там и тип поля будет указан). На прилагаемой картинке видно, что значение есть, поле обзывается так же, а Integer-а мне достаточно будет выше крыши. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 03:54 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
В общем, разобралась в том, что если у меня переменная называется так же, как имя поля, то выдается ошибка. А если переменная по-другому обзывается, то все присваивается, Access не считает ее объектом и прекрасно себя чувствует. Люблю Access! В чем моя ошибка? Почему нельзя переменную обозвать как и поле? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 04:16 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
wls1978В чем моя ошибка? Если есть поле, то к нему можно обратиться просто по его имени, к нему и обращается вместо объявленой переменной, рекордсет не обновляемый, возникает ошибка. Мне не совсем понятно, почему приоритет отдан полю, а не переменной. По идее высший приоритет у локальных переменных, потом у переменных уровня модуля, потом переменным уровня формы и в конце - глобальным. Здесь могу ошибаться. А чтобы такое не повторялось, нужно всегда переменным давать префиксы ипа lng, str..., переменные глобальные и уровня модуля - с дополнительным префиксом типа glng, mlng, а к полям формы обращаться только через Me, тогда подобной путаницы не будет и не придется часами выискивать, почему программа работает неправильно. Это еще повезло, что рекордсет не обновляемый, ошибку выдало, а так и вообще было бы непонятно, почему переменная не меняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 07:08 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
MrShinА чтобы такое не повторялось, нужно всегда переменным давать префиксы ипа lng, str..., переменные глобальные и уровня модуля - с дополнительным префиксом типа glng, mlng, а к полям формы обращаться только через Me, тогда подобной путаницы не будет и не придется часами выискивать, почему программа работает неправильно.+1 любят у нас найти приключений на пятую точку... буквов жалко что-ли... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 07:15 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
добавлю. Контролам на форме тоже давать префиксы в названия, чтобы однозначно понимать, когда обращаешься к контролу, когда к полю источника. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 07:17 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
Панургдобавлю. Контролам на форме тоже давать префиксы в названия, чтобы однозначно понимать, когда обращаешься к контролу, когда к полю источника. Особенно это актуально для подчиненных форм. и потом возникают вопросы типа "не могу обновить подчиненную форму" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 07:33 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
wls1978В общем, разобралась в том, что если у меня переменная называется так же, как имя поля, то выдается ошибка. А если переменная по-другому обзывается, то все присваивается, Access не считает ее объектом и прекрасно себя чувствует. Люблю Access! В чем моя ошибка? Почему нельзя переменную обозвать как и поле?Ну почему нельзя-можно учитывая это из HELP: "Оператор ! указывает, что следующий за ним элемент является элементом, определяемым пользователем (элементом семейства). Оператор . (точка) обычно указывает, что следующий за ним элемент определен в Microsoft Access. " -ни о каких "приоритетах" речи не идет. Но лучше, во избежание проблем, применять префиксы-как и советовали или просто не обзывать поля и переменные одинаково Так все будет работать: Код: vbnet 1.
(наберите в редакторе VBA RS. и RS!-почувствуйте разницу) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 11:52 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
sdkuТак все будет работать Ткк проблема-то в левой части, а не в правой. VBA почему-то читает NumSession в левой части контролом, а не переменной ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 14:41 |
|
Заполнение подчиненной формы
|
|||
---|---|---|---|
#18+
MrShin, а Вы попробуйте проблема во всем выражении,а не в какой-то его части (переменной не может быть присвоено свойство-а именно в правой части определяется что это-значение или свойство (что это значение, в данном случае должно явно указываться) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 15:24 |
|
|
start [/forum/topic.php?desktop=1&fid=45&tid=1610650]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 313ms |
total: | 446ms |
0 / 0 |