Как обновить другое текстовое поле при вводе в форму доступа 2007? - PullRequest
0 голосов
/ 02 января 2012

У меня есть несколько текстовых полей, которые должны быть заполнены числовыми значениями от 0 до 100. Под ними есть еще одно текстовое поле, которое обозначает общую сумму (сумму значений из текстовых полей выше). Как я могу обновить текстовое поле суммы при вводе любого из других текстовых полей выше?

Ответы [ 4 ]

1 голос
/ 02 января 2012

Если вы счастливы, что поле сумм обновляется после того, как поле обновлено (нажата клавиша ввода, вкладка или тому подобное), то это можно сделать без какого-либо кода.Сначала вам нужно установить формат текстовых полей для суммирования в числовые значения, затем источником управления для поля суммы станет:

=Nz([text0],0)+Nz([text2],0)+Nz([text4],0)+Nz([text6],0)+Nz([text8],0) ...

Обратите внимание на использование Nz, возможно, это можно устранитьпутем задания значения по умолчанию свойства различных текстовых полей для суммирования.

Большой набор элементов управления, которые необходимо суммировать таким образом, часто указывает на ошибку в проектировании базы данных.Обычно вы ожидаете, что подобные вещи будут отдельным набором записей, который можно было бы проще суммировать.

1 голос
/ 07 октября 2015

Я знаю, что это старая версия, но Google мало что придумал для этой темы, и эта тема тоже не помогла. Мне удалось найти очень простой способ сделать это, так что, надеюсь, любой, кто ищет это, найдет это полезным.

Мне нужен был текст, а не цифры, но то же самое относится.

Чтобы сделать то, о чем просит ОП, вам потребуется как минимум 3 текстовых поля. 1 - это текстовое поле, которое вы хотите обновлять при каждом вводе, 2 - это текстовое поле, в которое вы будете вводить, а 3 - скрытое текстовое поле.

Установите для текстового поля 1 ссылку на значение скрытого текстового поля 3 в его источнике управления:

="something in my textbox " & [textbox3]

В событии OnChange текстового поля 2 вправо строка, в которой значение скрытого текстового поля 3 будет установлено равным свойству Text текстового поля 2, которое вы вводите:

Private Sub textbox2_Change()
    Me.textbox3.Value = Me.textbox2.Text
End Sub

Каждый раз, когда значение скрытого текстового поля 3 обновляется, расчет / ссылка в отображаемом текстовом поле 1 будет обновляться. Нет необходимости сохранять каретки или что-либо еще, упомянутое в этом посте.

0 голосов
/ 24 мая 2019

Мне удалось сделать это в Access 2007 с помощью события «На потерянном фокусе» текстового поля.Просто поместите что-то вроде этого в событие фокуса On Lost каждого текстового поля, которое вы хотите добавить, просто установите значение по умолчанию для каждого текстового поля равным 0.

Me.Totals.Value = Me.Text1.Value + Me.Text2.Value + и т. Д.

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

0 голосов
/ 02 января 2012

Это проблематично из-за изначального требования в Access, что вам нужно установить фокус на текстовые области, прежде чем вы сможете получить их значение.Я бы порекомендовал вам изменить свой дизайн так, чтобы текстовое поле обновлялось в ответ на нажатие кнопки, а не на изменение.

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

Вот пример для двух текстовых полей (txt1 и txt2).Поле вывода называется txtOutput.

Private Sub txt1_Change()
    Dim caret_position As Variant

    caret_position = Array(txt1.SelStart, txt1.SelLength)

    UpdateSum

    txt1.SetFocus
    txt1.SelStart = caret_position(0)
    txt1.SelLength = caret_position(1)
End Sub

Private Sub txt2_Change()
    Dim caret_position As Variant

    caret_position = Array(txt2.SelStart, txt2.SelLength)

    UpdateSum

    txt2.SetFocus
    txt2.SelStart = caret_position(0)
    txt2.SelLength = caret_position(1)
End Sub

Private Sub UpdateSum()
    Dim sum As Variant
    sum = CDec(0)

    txt1.SetFocus
    If IsNumeric(txt1.Text) Then
        sum = sum + CDec(txt1.Text)
    End If

    txt2.SetFocus
    If IsNumeric(txt2.Text) Then
        sum = sum + CDec(txt2.Text)
    End If

    txtOutput.SetFocus
    txtOutput.Text = sum
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...