Access 2000 Combo box oldvalue свойство - PullRequest
1 голос
/ 20 июня 2011

Я использую Access 2000, у меня есть таблица с 2 столбцами, в столбце 1 хранится 26 имен, а в столбце 2 хранится логическое значение (используется для проверки того, отображается ли это имя в 1 из 8 полей со списком).

TableColumns:
ColumnName(Text) &
NameSelected(Yes/No)

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

Проблема:
Я пытался получить доступ к combobox.oldvalue из нескольких различных событий, но всегда кажется, что он содержит новое значение.

Я что-то не так делаю? Если да, то есть какие-нибудь идеи?

Или есть лучший способ сделать это? Я попытался не иметь 2-й столбец и просто иметь запросы для каждого выпадающего списка, который выбирает все имена из таблицы, где они не равны выбранному тексту других элементов управления, но это никогда не отображает ничего.

1 Ответ

2 голосов
/ 20 июня 2011

OldValue свойство

OldValue работает только на связанных полях. документация гласит:

Свойство OldValue содержит неотредактированные данные из связанного элемента управления и доступно только для чтения во всех представлениях.

Если вам нужно отслеживать старое значение для несвязанного элемента управления, вы можете сделать это вручную из кода: например, вы можете использовать событие формы Current или Load или событие BeforeUpdate поля со списком, чтобы загрузите ваши начальные значения в переменные, определенные в модуле VBA вашей формы.

(потенциально) лучший подход

Вам не нужно поддерживать отдельный логический столбец, чтобы узнать, отображалось ли поле в другом комбо или нет.

Давайте рассмотрим конкретный пример:

Предполагая, что у вас есть 3 поля со списком на вашем Form1: Combo1, Combo2, Combo3.

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

Установите RowSource из Combo1 в:

  SELECT Country.ID, 
         Country.CountryName 
  FROM Country 
  WHERE (Country.ID Not In ([Forms]![Form1]![Combo2], 
                            [Forms]![Form1]![Combo3])) 
  ORDER BY Country.[CountryName]; 

Установите RowSource из Combo2 в:

  SELECT Country.ID, 
         Country.CountryName 
  FROM Country 
  WHERE (Country.ID Not In ([Forms]![Form1]![Combo1], 
                            [Forms]![Form1]![Combo3])) 
  ORDER BY Country.[CountryName]; 

Установите RowSource из Combo3 в:

  SELECT Country.ID, 
         Country.CountryName 
  FROM Country 
  WHERE (Country.ID Not In ([Forms]![Form1]![Combo1], 
                            [Forms]![Form1]![Combo2])) 
  ORDER BY Country.[CountryName]; 

Затем установите событие GotFocus для каждого поля со списком, чтобы запросить его содержимое по мере необходимости:

  Private Sub Combo1_GotFocus()
      Combo1.Requery
  End Sub

  Private Sub Combo2_GotFocus()
      Combo2.Requery
  End Sub

  Private Sub Combo3_GotFocus()
      Combo3.Requery
  End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...