Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Значение полей формы из предыдущей записи / 25 сообщений из 28, страница 1 из 2
25.01.2017, 11:22
    #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
25.01.2017, 11:59
    #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
25.01.2017, 12:10
    #39390944
Значение полей формы из предыдущей записи
Например:
1. На Form_Load перейти на последнюю запись в RecordsetClone и присвоить значения DefaultValue контролов.
2. На Form_AfterInsert присвоить DefaultValue значения из добавленной записи.
...
Рейтинг: 0 / 0
25.01.2017, 12:16
    #39390951
HB
HB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение полей формы из предыдущей записи
Панург , Респект! Дай Бог здоровья! Работает как надо.
...
Рейтинг: 0 / 0
25.01.2017, 12:37
    #39390983
HB
HB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение полей формы из предыдущей записи
Упс... если a - Двойное с плавающей точкой, то не работает(((
...
Рейтинг: 0 / 0
25.01.2017, 12:59
    #39391026
Значение полей формы из предыдущей записи
HBУпс... если a - Двойное с плавающей точкой, то не работает(((
Вероятно у вас десятичный разделитель - запятая. А дробное число должно в это свойство попадать с точкой.
А так?
Me.a.DefaultValue = Trim( Str (.Fields("a") & ""))
...
Рейтинг: 0 / 0
25.01.2017, 13:10
    #39391044
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение полей формы из предыдущей записи
Анатолий ( Киев ),

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

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

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

?"a=" & str(cdbl(1/3)),"" & 1/3, replace("" & 1/3,",",".")
a= .333333333333333 0,333333333333333 0.333333333333333
...
Рейтинг: 0 / 0
25.01.2017, 15:22
    #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
25.01.2017, 16:05
    #39391287
Значение полей формы из предыдущей записи
HBMe.a.DefaultValue = Replace(CStr(Nz(.Fields("a"), 0)), ",", ".") Если поле было пустым, то в новую запись будет подставляться 0. Вас это устраивает?
HBMe.b.DefaultValue = """" & Nz(.Fields("b"), vbNullString) & """" Стоило бы проверить ситуацию, если внутри текста есть кавычки.

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

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

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

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

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

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

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

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

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

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

Усё.

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

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



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

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

Можно сымитировать нажатие Enter через SendKeys, а затем сразу выполнить Dirty=False.
Но это сомнительный способ, хотя бы потому, что начиная с Win7 операц. система трактует SendKeys
как "потенциально вредоносную" команду (просто так, на всякий случай) и нужно проделать
предварительно некоторые манипуляции с учетной записью пользователя, чтобы SendKeys работала.
...
Рейтинг: 0 / 0
26.01.2017, 19:06
    #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
26.01.2017, 19:07
    #39392429
HB
HB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение полей формы из предыдущей записи
Думаю, даже без поля b обойтись!
...
Рейтинг: 0 / 0
26.01.2017, 19:29
    #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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Значение полей формы из предыдущей записи / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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