Как получить форму Microsoft Access для обновления вычисляемого столбца? - PullRequest
4 голосов
/ 28 октября 2009

У меня есть форма Microsoft Access, которая связана со связанной таблицей SQL Server с вычисляемым столбцом. У меня есть элемент управления, связанный с вычисляемым столбцом.

Я уже понимаю, что вычисленное поле не может быть обновлено, пока ПОСЛЕ записи не сохранено. Кроме того, каков наилучший способ обновить это текстовое поле, которое привязано к вычисляемому столбцу после сохранения.

Я бы предпочел не делать me.requery (запрос всего набора записей).

Есть ли способ просто обновить это поле?

Ответы [ 5 ]

7 голосов
/ 28 октября 2009

РЕДАКТИРОВАНИЕ ДЛЯ ЯСНОСТИ: на самом деле есть несколько стратегий, которые следует рассмотреть.

Form.Refresh () обновит источник записей вашей формы, сохраняя изменения и удаления в существующих записях, и останется в текущей записи. Однако вы не увидите никаких НОВЫХ записей, которые были добавлены с момента открытия формы.

Form.Requery () перезапустит запрос источника записей формы. Вы увидите все изменения Form.Refresh () И покажут вам все новые записи. В пользовательском интерфейсе Form.Requery () перемещается к первой записи.

Form.Control.Requery () аналогичен Form.Refresh () в том, что вы не будете изменять позицию записи или видеть новые записи. Он обновит ваш элемент управления, предполагая, что элемент управления основан на запросе / таблице.

Вы должны быть уверены, что инициирующее событие включает обновление базы данных. Могут быть случаи, когда AfterUpdate () элемента управления предшествует вводу-выводу базы данных, что вам не поможет.

1 голос
/ 28 января 2016

2016 (связанный) Ответ: В Access 2016 у меня есть элемент управления, который представляет собой вычисляемое поле на основе значений в 4 других связанных текстовых полях. Я установил контрольный источник для вычисляемого поля равным =gsngCalculatePaymentAmount([txtInterestRate],[txtLengthOfLoanInYears],[txtSalePrice],[txtMoneyDown]).

Но мне нужно было обновлять значение всякий раз, когда ЛЮБОЕ из значений для любого из этих 4 текстовых полей изменяется. Возникли трудности с обновлением рассчитанного значения. РЕШЕНИЕ: В событии AfterUpdate в КАЖДОМ из 4 текстовых полей, значение которых использовалось для вычисляемого поля, я просто сделал следующее:

Dim v1 As Variant
v1 = Me.txtMyCalculatedTextbox

Простое обращение к значению вычисляемого поля разрешило его! Rex

1 голос
/ 30 октября 2009

Спасибо, ребята. Вот это то, что сработало.

В событии Form AfterUpdate я выполнил запрос Me.ControlName.Requery. Это было прекрасно, так как не выполнялось полное обновление формы или запроса.

Я просто экспериментировал с различными комбинациями событий / методов, пока не получил лучший результат.

Спасибо за ввод.

Сет

0 голосов
/ 11 февраля 2018

Я сделал это следующим образом (источник управления txtTextBox - это поле SQL Server, значение которого вычисляется):

On Error Goto ErrorHandler


'After saving data when I wanted to see the updated value of computed field

txtTextBox = txtTextBox & ""

ErrorHandler: If err.Number = -2147352567 Then 'The data has been changed.

                            Resume Next

                  else

                      msgbox  err.description

               end if
0 голосов
/ 29 октября 2009

Вы пробовали .Refresh для базового набора записей или для привязанного элемента управления? Я ожидал бы, что это будет работать для серверной части Jet / ACE, но взаимодействие с различными серверными базами данных будет непредсказуемым.

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

Где это назвать, это другая проблема - я бы предположил, что подходящее место будет в событиях AfterUpdate элементов управления, привязанных к полям, на которых основан расчет. Но вам, возможно, придется сохранить запись для расчета на стороне сервера - только обновление может помочь, а может и нет. Я знаю, что с источниками данных Jet / ACE Refresh сохраняет запись, но я точно не знаю, ведет себя ли он так же, как с источниками данных ODBC.

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