2014-01-05 4 views
3

Я использую текущее событие для обновления свойства RecordSource подформы на основе идентификатора записи в родительской форме. Проблема возникает в новых записях, поскольку поле ID (которое является автономом) имеет значение NULL. Я тестирую нулевой идентификатор, чтобы избежать ошибок, но мне нужно обновить RecordSource, как только будет создана запись, когда пользователь наберет первый символ.Событие MSAccess при создании новой записи

Проблема заключается в том, что инициируются события как Dirty, так и BeforeInsert до запись фактически создана, тем самым до присвоения идентификатора. Мне нужно событие, которое вызовет после присвоен идентификатор автономера.

Заранее спасибо за помощь

+0

Я не уверен, что вы можете. Вы правы, чтобы беспокоиться о проверке текущего максимального id; значение autonumber может быть выше, если верхние строки просто удалены. http://www.vbdotnetforums.com/ms-access/49272-how-do-i-get-new-row-id-access-database-table-before-insert-new-row.html –

ответ

1

Существует После вставки события, которые будут делать то, что вы want-- это пожары после того, как запись была вставлена ​​и поэтому идентификатор существует.

+0

AfterInsert триггеры после запись сохраняется. Мне нужно событие до этого, то есть как только пользователь наберет символ и будет создан AutoNumber. – ckey

+0

Чтобы уточнить: Когда пользователь вводит текст, единственными событиями, с которыми вы можете работать, будет On Key Down, On Key Up, KeyPress. Когда они перестают печатать и текстовое поле теряет фокус, тогда все события (onchange, beforeupdate, afterupdate и т. Д.) Срабатывают. Аналогично, AutoNumber не создается до тех пор, пока запись не будет сохранена, хотя, если вы используете доступ к ванилью, это произойдет, как только текстовое поле потеряет фокус. То, что я обычно делаю с связанными субформами, это либо Link Master Fields & Link Child Fields, так как доступ может обрабатывать нулевой идентификатор сам по себе, или – serakfalcon

+0

set visible = false после того, как пользователь перейдет к новой записи, и установите visible = true снова послеInsert – serakfalcon

0

Если я вас понимаю, событие, которое вы хотите использовать, - это событие Onchange. Чтобы это работало над вашей формой, первый элемент управления, который получает фокус, должен иметь это событие (т. Е. Текстовое поле). Я не знаю, какой элемент управления фокусируется сначала на вашей форме, но если у него есть это событие, вы можете захватить первый штрих ключа и запустить процедуру, которую вы хотите в это время. При первом нажатии клавиши создается идентификатор, а текстовое поле или любое другое используемое управление захватывает каждое нажатие клавиши до тех пор, пока элемент управления не будет удален. Единственное, о чем нужно знать, это то, что это событие вызывается каждый раз, когда нажата клавиша, поэтому вам нужно будет создать какую-то переменную статуса, чтобы показать, что вы сделали, и вы не сделали этого снова.

dim status as integer(must be declared at form declaration level.) 
    if not status then 
     do procedure 
     Status =-1 
    end if 
0

Я немного опоздал на это, но как насчет совместного использования грязного и нового рекорда?

т.е .:

If Me.NewRecord And Me.Dirty Then 'user has created a new record that has not yet been saved End If

Смежные вопросы