2010-04-01 2 views
1

У меня проблемы с каскадным списком со списком. Все отлично работает с полями со списком, и значения заполняются правильно.cascading combo box, вызывающий пустые поля в следующей записи

Private Sub cmbAdjComp_AfterUpdate() 
Me.cboAdjOff.RowSource = "SELECT AdjusterCompanyOffice.ID, 
AdjusterCompanyOffice.Address1, 
AdjusterCompanyOffice.Address2, 
AdjusterCompanyOffice.Address3, 
AdjusterCompanyOffice.Address4, 
AdjusterCompanyOffice.Address5 FROM" & _ 
" AdjusterCompanyOffice WHERE 
AdjusterCompanyOffice.AdjCompID = " & Me.cmbAdjComp.Column(1) & _ 
" ORDER BY AdjusterCompanyOffice.Address1" 
Me.cboAdjOff = Me.cboAdjOff.ItemData(0) 
End Sub 

Выпадающий список имеет вторичный источник строки запроса:

SELECT AdjusterCompanyOffice.ID, AdjusterCompanyOffice.Address1,  
AdjusterCompanyOffice.Address2, AdjusterCompanyOffice.Address3, 
AdjusterCompanyOffice.Address4, AdjusterCompanyOffice.Address5 FROM 
AdjusterCompanyOffice ORDER BY AdjusterCompanyOffice.Address1; 

Оба ComboBoxes имеют один и тот же ControlSource.

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

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

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

Как-то использование каскадных комбинированных полей создает конфликт с источником строки вторичного поля со списком.

Надеюсь, что это ясно! Они рылись в поисках ответа, но ничего не нашли.

всякая помощь была бы принята с благодарностью.

Благодаря

Noel

+0

Вы уверены, что оба комбинированных блока привязаны к одному и тому же элементу ControlSource? Это действительно не имеет никакого смысла. –

+0

Привет, Дэвид, у меня были оба комбинированных блока с использованием одного и того же источника управления. В то время в разумном смысле! Теперь с большим пониманием я мог видеть, где я ошибся. – noelmcg

ответ

0

Причина выпадающие пустая, когда вы переходите к следующей записи, потому что у вас есть NotInList установлены в TRUE (который является то, что вы хотите), но когда вы приедете на запись, источник строк был отфильтрован, чтобы не включать значение, хранящееся в поле, к которому привязано поле со списком. Таким образом, он пуст - значение есть, но оно не может быть отображено, так как его нет в списке.

Чтобы исправить это, вам необходимо очистить фильтр во втором поле со списком. Чтобы сделать это, в случае OnCurrent вашей формы, установите RowSource отфильтрованного со списком быть нефильтрованным:

Me!cboAdjOff.RowSource = "SELECT AdjusterCompanyOffice.ID, AdjusterCompanyOffice.Address1, AdjusterCompanyOffice.Address2, AdjusterCompanyOffice.Address3, AdjusterCompanyOffice.Address4, AdjusterCompanyOffice.Address5 FROM AdjusterCompanyOffice ORDER BY AdjusterCompanyOffice.Address1" 

Я обычно справиться с этим путем создания двух констант в верхней части модуля формы, а один для SELECT и один для заказа:

cstrRecordsourceSelect = "SELECT AdjusterCompanyOffice.ID, AdjusterCompanyOffice.Address1, AdjusterCompanyOffice.Address2, AdjusterCompanyOffice.Address3, AdjusterCompanyOffice.Address4, AdjusterCompanyOffice.Address5 FROM AdjusterCompanyOffice" 
    cstrRecordsourceOrderBy = "ORDER BY AdjusterCompanyOffice.Address1" 

Тогда его гораздо проще в обращении. В OnCurrent это выглядит следующим образом:

Me!cboAdjOff.RowSource = cstrRecordsourceSelect & " " & cstrRecordsourceSelect 

... и в AfterUpdate вашего первого комбинированного окна:

Me!cboAdjOff.RowSource = cstrRecordsourceSelect & _ 
    "WHERE AdjusterCompanyOffice.AdjCompID = " & Me!cmbAdjComp.Column(1) & _ 
    " " & cstrRecordsourceSelect 

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

+0

Привет, Дэвид, это именно то, что я пытался понять. Я не думал, что это потребует столько усилий, если можно так выразиться, но вместе с вашей помощью у меня это работает. Большое спасибо за то, что нашли время ответить, очень оценили. Ноэль – noelmcg