|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
Есть формы: Главная, подчиненная 1-го уровня, в ней подчиненная 2-го уровня. Пытаюсь создать кнопку, по нажатию которой, первые 3 записи в подчиненной форме заполняются определенным образом (в формулах участвуют поля с [Подчиненная У1]). При этом, если записи уже созданы и заполнены, после нажатия, они должны пересчитаться. Записи заполняю так: Forms![Главная]![Подчиненная У1]![Подчиненная У2].Form![Поле А] = Forms![Главная]![Подчиненная У1].Form![Поле 1] Forms![Главная]![Подчиненная У1]![Подчиненная У2].Form![Поле Б] = Forms![Главная]![Подчиненная У1].Form![Поле 2] * Forms![Главная]![Подчиненная У1].Form![Поле 3] Проблемы начинаются, когда начинаю проверять наличие записей и передвигаться по ним. Делаю это через .Form.Recordset... =Текущий код представляет собой мешанину проб и ошибок, часть его выглядит примерно так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
тут заполнение 2-х записей Постоянно возникающие ошибки заставляют думать, что я пошел не по тому пути. Подскажите как реализовать задуманное? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2017, 15:47 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
Что-то странное случилось с видом кодом, переписал. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2017, 16:00 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
А если упростить: Как удалить все записи в подчиненной форме? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2017, 11:42 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
Иожет так? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2017, 12:49 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), Работает, если есть 3 или больше записей. Если нет ни одной записи, ошибка "Текущая запись отсутствует" на Код: vbnet 1.
Если записей <3, ошибка "Текущая запись отсутствует" на Код: vbnet 1.
Что я упустил? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2017, 18:04 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
MaKaKЕсли нет ни одной записи, ошибка "Текущая запись отсутствует" на Код: vbnet 1.
Если записей <3, ошибка "Текущая запись отсутствует" на Код: vbnet 1.
Что я упустил? Странно! В коде есть проверка If rs.EOF Then rs.AddNew Else rs.Edit Если rs.EOF = True, значит вы вышли за пределы набора записи. В этом случае должен выполняться метод AddNew, а не Edit. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2017, 09:46 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), Я мог что-нибудь неверно задать Access 2010 Весь код кнопки Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2017, 11:05 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
MaKaKЯ мог что-нибудь неверно задать Да нет, все правильно, разве только Dim rs As DAO. Recordset (Если, конечно, у вас БД, а не проект). Проверяйте в пошаговом режиме и контролируйте rs.EOF. И еще. Если "подчиненная 1-го уровня, в ней подчиненная 2-го уровня." связаны по полям, то значение в поле здесь нужно вносить явно Хотя у вас на rs.Update никаких ошибок не возникает. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2017, 12:00 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
немного подправил - может сработает? Код: vbnet 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2017, 12:27 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), alecko, Нашел здесь , в описании свойств EOF и BOF: "Вызов метода MoveNext или MovePrevious, когда, соответственно, свойство EOF или BOF имеет значение True, приводит к возникновению ошибки." Добавил проверку перед rs.MoveNext: Код: vbnet 1.
и, вроде бы, ошибка пропала. Значения заполняются. Осталось заставить сохраняться внесенные кнопкой изменения. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2017, 16:27 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
MaKaK, если не сохраняются данные, то работать нужно с таблиц(ами)-(ей) а не с рекордсорсом формы-подформ. нужна база с формой. и тут лучше поставить- If rs.EOF AND rs.BOF Then rs.AddNew Else rs.Edit это соответсвует отсутствию записей в рекордсете. - хотя этому соответствует и rs.AbsolutePosition=-1 с другой стороны Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
что-то не понял логику кода - Вы создаете новую запись, потом выходите за пределы рекордсета, проверяете (а вы там точно после addnew и решаете снова добавить...), почему просто не добавить? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 11:56 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
aleckoчто-то не понял логику кода - Вы создаете новую запись, потом выходите за пределы рекордсета, проверяете (а вы там точно после addnew и решаете снова добавить...), почему просто не добавить? Это на случай, если уже существуют записи. Пытаюсь сделать, чтобы нажатие кнопки пересчитывало значения первых 3-х записей. Есть ли разница между Код: vbnet 1.
и Код: vbnet 1.
для проверки наличия записей в рекордсете? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 13:54 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
MaKaK, разницы как бы нет(в нашем случае проверки наличия записей), но она как бы есть - свойство recordCount получает истинное значение спустя некоторое время, либо если оказаться на последней записи, а absolutePosition =-1 если записей нет - сразу. "Это на случай, если уже существуют записи. Пытаюсь сделать, чтобы нажатие кнопки пересчитывало значения первых 3-х записей." почему просто не очистить таблицу перед пересчетом? и заполнить её нужными значениями... - это как то привычнее и не надо городить огород с проверками. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 21:41 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
aleckoПочему просто не очистить таблицу перед пересчетом? и заполнить её нужными значениями... - это как то привычнее и не надо городить огород с проверками. Как в этом случае удалить все записи (очистить подчиненную форму) и обновить информацию о записях перед повторным нажатием? Заполняю форму так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Кто бы знал, что .SetFocus поможет избавиться от ошибки на .Form.Recordset.AddNew... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 12:03 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
MaKaK, ну как... CurrentDB.Execute "Delete * From tmptbl" где tmptbl - временная таблица.-рекордсорс формы. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 19:40 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
Благодарю за помощь отписавшихся. Получившийся код: Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2017, 16:30 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
кстати можно облагородить код таким... Dim frm2 as form set frm2=Forms![Главная]![подчиненная форма СписаниеДД].form ... и выкинуть все эти длинные конструкции... и цикл и Select выкинуть - идет же последовательное наполнение For i = 1 To 4 Select Case i Case 1 ![подчиненная форма СписаниеДД].Form.Recordset.AddNew ![подчиненная форма СписаниеДД].Form![КодДД] = 1 ![подчиненная форма СписаниеДД].Form![Количество] = Int(x) + IIf(x - Int(x) > 0, 1, 0) Case 2 ![подчиненная форма СписаниеДД].Form.Recordset.AddNew ![подчиненная форма СписаниеДД].Form![КодДД] = 2 ![подчиненная форма СписаниеДД].Form![Количество] = v1 * v2 * 4 Case 3 If .Form![USB] = True Then ![подчиненная форма СписаниеДД].Form.Recordset.AddNew ![подчиненная форма СписаниеДД].Form![КодДД] = 3 ![подчиненная форма СписаниеДД].Form![Количество] = 1 End If Case 4 If .Form![Температура] = True Then ![подчиненная форма СписаниеДД].Form.Recordset.AddNew ![подчиненная форма СписаниеДД].Form![КодДД] = 4 ![подчиненная форма СписаниеДД].Form![Количество] = 1 End If End Select Next i можно записать как end with with frm2 .Recordset.AddNew: ![КодДД] = 1:![Количество] = Int(x) + IIf(x - Int(x) > 0, 1, 0) .Recordset.AddNew: ![КодДД] = 2:![Количество] = v1 * v2 * 4 If Forms![Заказ]![БегущиеСтроки].Form![USB] Then .Recordset.AddNew:![КодДД] = 3:![Количество] = 1 If Forms![Заказ]![БегущиеСтроки].Form![Температура] Then .Recordset.AddNew: ![КодДД] = 4:![Количество] = 1 end with типа такого сделать-читается получше ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 09:16 |
|
Заполнение подчиненной формы по нажатию кнопки
|
|||
---|---|---|---|
#18+
aleckoкстати можно облагородить код и выкинуть все эти длинные конструкции... и цикл Select выкинуть - идет же последовательное наполнение Верно... Сделал отдельными действиями .Form![КодДД] = 1, чтобы можно было управлять присваиваемым кодом, и .Form.Recordset.AddNew потому что есть условия на добавления, а цикл убрать забыл. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 13:21 |
|
|
start [/forum/topic.php?fid=45&fpage=74&tid=1612392]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 17ms |
total: | 161ms |
0 / 0 |