2016-12-16 2 views
0

Я использую Access 2007. У меня есть форма (подробная информация о ребенке), которая содержит список, в котором перечислены особые потребности ребенка. Список содержит отношения «многие ко многим» с таблицей детей и таблицей с контролируемым списком особых потребностей. RowSource из ListBox являетсяясный список при добавлении новой записи в форму

SELECT Child.ID, Need.Category 
FROM Need INNER JOIN 
    (Child INNER JOIN [Child-Need] ON Child.ID = [Child-Need].[Child FK]) 
    ON Need.ID = [Child-Need].[Need FK] 
ORDER BY [Category]; 

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

Как очистить содержимое списка, чтобы пользователь мог добавлять потребности, относящиеся к новому ребенку?

Впоследствии я обнаружил, что при переходе от записи к записи в форме содержимое списка остается таковым для первой записи, которая появляется. Похоже, что у меня есть серьезная ошибка, по-видимому, в моем SQL!

+1

'listboxName.requery' ?? – GavinP

+0

Увы, нет. Пробовал это! –

+0

Является ли это связанной формой? – GavinP

ответ

0

Попробуйте использовать приведенный ниже код в виде нагрузки:

Dim intItemsInList As Integer 
Dim intCounter As Integer 

intItemsInList = Me![lstTest].ListCount 

For intCounter = 0 To intItemsInList - 1 
    Me![lstTest].RemoveItem 0 
Next 
+0

К сожалению, это не сработает. Я получаю сообщение об ошибке на RemoveItem, потому что записи заблокированы. –

1

RowSource не имеет никакого отношения к текущему ребенку, который отображается в форме.

Я думаю, что вам нужно будет что-то вроде

SELECT Child.ID, Need.Category 
FROM Need INNER JOIN 
    (Child INNER JOIN [Child-Need] ON Child.ID=[Child-Need].[Need FK]) 
    ON Need.ID=[Child-Need].[Need ID] 
WHERE Child.ID = Forms!frmChild!ID 
ORDER BY [Category]; 

(заменить frmChild на ваше имя формы).

И тогда вам нужно myListbox.Requery в событии OnCurrent, поэтому он отображает текущие данные при переходе на другую запись.

Edit: если это подчиненная, это что-то вроде

WHERE Child.ID = Forms!frmFamily!frmChild.Form!ID 

см Refer to Form and Subform properties and controls

+0

Это кажется правильным, за исключением того, что я не могу найти формулировку для второй части предложения WHERE, которое Access примет. Он запрашивает у меня идентификатор в качестве параметра при открытии формы и при каждом изменении дочерней записи. Когда я его поставлю, появятся правильные данные. Вы очень близки: мой будет «Child.ID = Forms! FrmFamilies! FrmChild.Form! ID». –

+0

Если я добавил список RowSource как часть кода в событии OnCurrent формы Child, Access не запрашивает параметры при открытии формы. И теперь это работает. Спасибо! –