Как всегда возникла проблема на простейшем:
Имеем форму и в ней поле со списком с перечнем стран (берется из таблицы).
Таблица имеет вид:
State_ID - счетчик
State_Name - название страны
В связанных таблицах идет подстановка - реально везде хранятся индексы стран из поля State_ID - счетчик, а выводятся названия стран из State_Name.
Соответственно в поле со списком
Данные = SELECT [Страны].[State_ID], [Страны].[State_Name] FROM Страны ORDER BY [Страны].[State_Name];
Число столбцов = 2
Присоединенный столбец = 1
Ширина столбцов = 0см;4см
Задача - при вводе новой страны в поле формы:
1) Проверить - нет ли его в списке
2) В случае, если нет - добавить в таблицу и выбрать в поле формы
Что сделано (использована функция NotInList для объекта DropDownBox):
1) Сама функция NotInList + для подстраховки от пробелов Trim + DCount - если по введеному значению ф-ция возвращает 0, значит такой страны нет и переходим ко второму
2) Добавление делаю через:
DBEngine(0).BeginTrans
CurrentDb.Execute ("INSERT INTO " & "[Страны]" & "(" & "[State_Name]" & ")SELECT '" & NewData & "'"), dbFailOnError
DBEngine.CommitTrans
Проканывает
Обновляю список
Me!DropDownBox.ListIndex = 0
(Если без этой строки требует сохранить значение поля)
Me!DropDownBox.Requery
Теоретически осталось только выполнить
Me!DropDownBox.ListIndex = NN, где NN это номер той самой записи, которую мы добавляли. НО
а) не знаю как выловить только что добавленное значение, поскольку DropDownBox сортируется по алфавиту...
б) при присвоении ListIndex = NN при экспериментах с фиксированными NN выявилось, что после этой операции список остается открытым/выпавшим. Иначе как уходом фокуса на другой объект формы решить не смог. А хотелось бы остаться на этом поле.
Ну, на крайняк - как заблокировать поле со списком от ввода туда чего либо с клавиатуры, при том, что в форме еще есть поля куда ввод блокировать Точно не стоит
Имеем форму и в ней поле со списком с перечнем стран (берется из таблицы).
Таблица имеет вид:
State_ID - счетчик
State_Name - название страны
В связанных таблицах идет подстановка - реально везде хранятся индексы стран из поля State_ID - счетчик, а выводятся названия стран из State_Name.
Соответственно в поле со списком
Данные = SELECT [Страны].[State_ID], [Страны].[State_Name] FROM Страны ORDER BY [Страны].[State_Name];
Число столбцов = 2
Присоединенный столбец = 1
Ширина столбцов = 0см;4см
Задача - при вводе новой страны в поле формы:
1) Проверить - нет ли его в списке
2) В случае, если нет - добавить в таблицу и выбрать в поле формы
Что сделано (использована функция NotInList для объекта DropDownBox):
1) Сама функция NotInList + для подстраховки от пробелов Trim + DCount - если по введеному значению ф-ция возвращает 0, значит такой страны нет и переходим ко второму
2) Добавление делаю через:
DBEngine(0).BeginTrans
CurrentDb.Execute ("INSERT INTO " & "[Страны]" & "(" & "[State_Name]" & ")SELECT '" & NewData & "'"), dbFailOnError
DBEngine.CommitTrans
Проканывает
Обновляю список
Me!DropDownBox.ListIndex = 0
(Если без этой строки требует сохранить значение поля)
Me!DropDownBox.Requery
Теоретически осталось только выполнить
Me!DropDownBox.ListIndex = NN, где NN это номер той самой записи, которую мы добавляли. НО
а) не знаю как выловить только что добавленное значение, поскольку DropDownBox сортируется по алфавиту...
б) при присвоении ListIndex = NN при экспериментах с фиксированными NN выявилось, что после этой операции список остается открытым/выпавшим. Иначе как уходом фокуса на другой объект формы решить не смог. А хотелось бы остаться на этом поле.
Ну, на крайняк - как заблокировать поле со списком от ввода туда чего либо с клавиатуры, при том, что в форме еще есть поля куда ввод блокировать Точно не стоит