powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Значение полей формы из предыдущей записи
25 сообщений из 28, страница 1 из 2
Значение полей формы из предыдущей записи
    #39390880
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
Здравствуйте. Помогите, пожалуйста, решить задачу.

Есть форма, поля ID, a и b.
ID - счетчик
a - число
b - текстовое

Нужно, чтобы при создании новой записи, предыдущие данные полей a и b появлялись по умолчанию в соответствующих полях формы.
Сортировка происходит по полю ID.
Данные в поле ID не непрерывные - некоторые записи периодически удаляются.
После создания новой записи, нужно, чтобы данные полей a и b можно было редактировать.
Вариант поставить на событие Выход Me![a].DefaultValue = Me![a].Value не проходит, так как предполагает создание новой записи вслед за текущей. В моем варианте новая запись может быть создана при нахождении в любой записи.
В запросе работает:
DLookUp("[a]";"Data";"ID=" & DMax("ID";"Data";"ID<" & [Data].[ID])) As d
Но тут данные кладутся в другое поле (d), а мне надо, чтобы появлялись в поле a (числовом), и чтоб потом его отредактировать можно было.
Так же и с полем b (текстовым).
База во вложении.
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39390923
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HB,
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Form_Current()
    If Me.NewRecord Then
        With Me.RecordsetClone
            If Not (.BOF And .EOF) Then
                .MoveLast
                Me.a.DefaultValue = CStr(Nz(.Fields("a"), 0))
                Me.b.DefaultValue = """" & Nz(.Fields("b"), vbNullString) & """"
            End If
        End With
    End If
End Sub
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39390944
Например:
1. На Form_Load перейти на последнюю запись в RecordsetClone и присвоить значения DefaultValue контролов.
2. На Form_AfterInsert присвоить DefaultValue значения из добавленной записи.
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39390951
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
Панург , Респект! Дай Бог здоровья! Работает как надо.
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39390983
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
Упс... если a - Двойное с плавающей точкой, то не работает(((
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391026
HBУпс... если a - Двойное с плавающей точкой, то не работает(((
Вероятно у вас десятичный разделитель - запятая. А дробное число должно в это свойство попадать с точкой.
А так?
Me.a.DefaultValue = Trim( Str (.Fields("a") & ""))
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391044
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев ),

не очень корректно выглядит

?"a=" & str(1/3)
a= .333333333333333
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391048
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев ),

все 3 варианта

?"a=" & str(cdbl(1/3)),"" & 1/3, replace("" & 1/3,",",".")
a= .333333333333333 0,333333333333333 0.333333333333333
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391242
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
Вот так работает. Спасибо колллеге Панургу

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Form_Current()
    If Me.NewRecord Then
       With Me.RecordsetClone
            If Not (.BOF And .EOF) Then
                .MoveLast
                Me.a.DefaultValue = Replace(CStr(Nz(.Fields("a"), 0)), ",", ".")
                Me.b.DefaultValue = """" & Nz(.Fields("b"), vbNullString) & """"
            End If
        End With
    End If
End Sub
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391287
HBMe.a.DefaultValue = Replace(CStr(Nz(.Fields("a"), 0)), ",", ".") Если поле было пустым, то в новую запись будет подставляться 0. Вас это устраивает?
HBMe.b.DefaultValue = """" & Nz(.Fields("b"), vbNullString) & """" Стоило бы проверить ситуацию, если внутри текста есть кавычки.

"Двойное с плавающей точкой" не лучший числовой тип. Какое назначение поля?
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391321
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
Анатолий ( Киев ) Большое спасибо. Я взял на заметку Ваши рекомендации. Моя больная голова до реплейса почему-то не додумалась)))

Если поле было пустым, то в новую запись будет подставляться 0. Вас это устраивает?

Да, поле не может быть пустым, но идею понял, спасибо!

"Двойное с плавающей точкой" не лучший числовой тип. Какое назначение поля?

Поле досталось по наследству, пока не знаю, какое может быть максимальное значение. Но также благодарю за подсказку, если окажется, что слишком громоздко, переделаю на одинарное.
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391377
HBПоле досталось по наследству, пока не знаю, какое может быть максимальное значение. Но также благодарю за подсказку, если окажется, что слишком громоздко, переделаю на одинарное. Одинарное еще хуже. Если в поле указываются цена/сумма, то тип лучше "Денежный".
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391424
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выдержка из HELP : Совет. Денежный тип данных рекомендуется использовать для полей, в которых планируется хранить числовые значения с одним-четырьмя знаками в дробной части. При обработке значений полей типа «С плавающей точкой (4 байт)» (Single) и «С плавающей точкой (8 байт)» (Double) выполняются вычисления с плавающей точкой. Для значений денежных полей используются более быстрые вычисления с фиксированной точкой.
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391432
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
Анатолий ( Киев )Одинарное еще хуже. Если в поле указываются цена/сумма, то тип лучше "Денежный".

Одно из полей - денежное. Остальные значения. Денежное тоже нормально работает. Все работает как надо! Спасибо!!!
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391494
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
Столкнулся с другой проблемой.

При создании новой записи все поля формы заполняются из предыдущей записи, однако, встречаются ситуации, когда ничего менять в полях не надо. Однако, по понятным причинам, пока запись не редактируется, она в таблицу не заносится.

Что, коллеги, посоветуете, кнопочку ли поставить, чтобы данные из формы переносила в таблицу, или какой другой вариант?
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391662
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HB,
как вариант-источник формы запрос с TOP 1 (с соответствующей сортировкой или отбором);редактирование;сохранение записи в таблицу при закрытии формы
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391710
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
sdkuHB,
как вариант-источник формы запрос с TOP 1 (с соответствующей сортировкой или отбором);редактирование;сохранение записи в таблицу при закрытии формы

Так я не хочу закрывать форму, а хочу перейти на новую запись. А сейчас не могу...
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39391717
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HBкнопочку ли поставить, чтобы данные из формы переносила в таблицу, или какой другой вариант?Тут как тебе удобно (я не знаю, ни как это выглядит (стиль), ни какие задачи) - кнопочку поставь, лови нажатие спец. клавиши и т.д.
HBПри создании новой записи все поля формы заполняются из предыдущей записи, однако, встречаются ситуации, когда ничего менять в полях не надо. Однако, по понятным причинам, пока запись не редактируется, она в таблицу не заносится.И что? Ты хочешь чтобы добавилось само? Тут всё просто - в процедуре события вышеназванных объектов пробегись по контролам (по тем где значения есть!) и присвой им их дефолтное значение. Далее сохрани новую запись
Код: vbnet
1.
Me.Dirty = False

Усё.
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39392133
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
Панург
И что? Ты хочешь чтобы добавилось само? Тут всё просто - в процедуре события вышеназванных объектов пробегись по контролам (по тем где значения есть!) и присвой им их дефолтное значение. Далее сохрани новую запись
Код: vbnet
1.
Me.Dirty = False

Усё.

Погоди, мы же и так присваиваем этим полям дефолты

Код: vbnet
1.
Me.a.DefaultValue = Replace(CStr(Nz(.Fields("a"), 0)), ",", ".")



Ты прости, пожалуйста, я тут с питона))) Логика немного другая... Если мы контролу присвоили уже дефолтное значение откуда тут появится Dirty?
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39392182
HBвстречаются ситуации, когда ничего менять в полях не надо. Однако, по понятным причинам, пока запись не редактируется, она в таблицу не заносится. Так надо начать редактирование. Например скопировать/вставить значение или добавить в конце текста пробел.
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39392337
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
Анатолий ( Киев )Так надо начать редактирование. Например скопировать/вставить значение или добавить в конце текста пробел.

Это понятно, только тут появляется опасность ошибки оператора, например, забудет убрать пробел, или откопипастит не то... и тогда в первом случае данные по полю уже не сгруппировать, а во втором вообще непонятно что произойдет, но точно, ничего хорошего.
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39392416
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И пробела не нужно - достаточно нажать Enter, находясь в любом поле новой записи.
Запись "оживет", и можно ее сохранить, перейдя, например, в предыдущую запись или в любую другую.

Можно сымитировать нажатие Enter через SendKeys, а затем сразу выполнить Dirty=False.
Но это сомнительный способ, хотя бы потому, что начиная с Win7 операц. система трактует SendKeys
как "потенциально вредоносную" команду (просто так, на всякий случай) и нужно проделать
предварительно некоторые манипуляции с учетной записью пользователя, чтобы SendKeys работала.
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39392428
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
Вот решение:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub Form_Current()
    If Me.NewRecord Then
       With Me.RecordsetClone
            If Not (.BOF And .EOF) Then
                .MoveLast
                Me.a.DefaultValue = Replace(CStr(Nz(.Fields("a"), 0)), ",", ".")
                Me.b.DefaultValue = """" & Nz(.Fields("b"), vbNullString) & """"
                Me.a.Value = Me!a
                Me.b.Value = Me!b
            End If
        End With
    End If
End Sub



Спасибо коллеге Панургу .
Как только мы присваиваем значению поля его дефолтное значение Me.a.Value = Me!a, тут же происходит инициализация записи данных в таблицу. Вуаля)))
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39392429
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
Думаю, даже без поля b обойтись!
...
Рейтинг: 0 / 0
Значение полей формы из предыдущей записи
    #39392435
HB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HB
Гость
Финальная рабочая версия скрипта:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub Form_Current()
    If Me.NewRecord Then
       With Me.RecordsetClone
            If Not (.BOF And .EOF) Then
                .MoveLast
                Me.a.DefaultValue = Replace(CStr(Nz(.Fields("a"), 0)), ",", ".")
                Me.b.DefaultValue = """" & Nz(.Fields("b"), vbNullString) & """"
                Me.a.Value = Me!a
            End If
        End With
    End If
End Sub
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Значение полей формы из предыдущей записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]