как сбросить форму (которая привязана к запросу присоединения)

#ms-access #vba

#ms-access #vba

Вопрос:

В моей базе данных Access 2010 у меня есть две таблицы: клиенты (со столбцами: client_id, имя) и заказы (со столбцами: order_id, client_id, описание). У меня есть запрос с именем orders_with_clients, который объединяет клиентов и их заказы (что-то вроде «выберите orders.client_id, orders.description, clients.name из заказов присоединяйтесь к клиентам в orders.client_id=clients.client_id»). Я могу вставить в этот запрос. Я могу вставить в нее двумя способами:

  1. Я могу предоставить client_id и description (что-то вроде «вставить в значения orders_with_clients (client_id, description) (3, ‘три пары носков’)») — в таком случае Access создает новую строку в таблице orders, связанную (внешним ключом) с существующей строкой из таблицы clients.

  2. Я могу предоставить имя и описание (что-то вроде «вставить в значения orders_with_clients (name, description) (‘Zenon’, ‘три пары носков’)») — в таком случае Access создает новую строку в таблице clients, а затем новую строку в таблице orders, связанную (внешним ключом) с этим новым клиентом.

У меня есть форма, связанная с запросом orders_with_clients. В нем есть три поля: client_id (это может быть поле со списком или текстовое поле — мне все равно), имя и описание (оба текстовых поля). Конечно, в любое время пользователь использует только два из этих полей: client_id и description или name и description.

Поле client_id контролируется (устанавливается) некоторым кодом VBA на основе того, что происходит в некоторых других формах. Я имею в виду, когда происходят некоторые события, мой код VBA устанавливает поле client_id в некоторое значение. Я также хочу, чтобы иногда код VBA сбрасывал эту форму в чистое, пустое состояние, включая настройку поля client_id для очистки нового пустого состояния. И вот тут у меня проблема. Я пытался выполнить «fieldname.value = 0» и «fieldname.value=null», но Access говорит, что здесь указано значение null. Я также пытался сделать что-то вроде «formname.requery», но это привело к сохранению текущего состояния в базе данных.

Как я могу это сделать?

Ответ №1:

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

После этого все зависит от того, что вы хотите сделать. Вы хотите использовать форму для ввода данных? В этом случае откройте форму с новыми аргументами. Вы хотите открыть с другим идентификатором? Затем снова откройте форму или установите recordsource.

Комментарии:

1. Да, после того, как я сброшу поле client_id, я позволю пользователю использовать его для ввода данных (заполняя только поля name и description). Как мне открыть форму с новыми аргументами? Я не понимаю, что вы под этим подразумеваете.

2. Похоже, здесь немного путаницы. Вы используете эту форму для поиска кого-либо или для добавления нового пользователя? Является ли идентификатор клиента ключевым полем с автономером? Как вы вообще открыли эту форму? Вы можете прочитать об OpenForm здесь: msdn.microsoft.com/en-us/library/aa141520 (v = office.10).aspx