Фильтрация данных с помощью combo box

julietta_ukr
Дата: 27.02.2008 11:19:47
Помогите разобраться, что делаю неправильно.
У меня есть подчиненная форма, на которой отображаются данные из нескольких таблиц. На главной форме я создаю combo box с помощью мастера.
Хочу фильтровать данные подчинённой формы с помощью этого элемента.
Record source подчиненной формы выглядит так
Me.RecordSource = "SELECT TECH_MODEL.TM_CODE, TECH_PRICE_RCMND.TP_PRICE, ..., TECH_CATEGORY.TC_NAME" & _
                " FROM (((TECH_MODEL INNER JOIN TECH_PRICE_RCMND ON TECH_MODEL.TM_ID = TECH_PRICE_RCMND.TM_ID) INNER JOIN" & _
                " TECH_CATEGORY ONTECH_MODEL.TC_ID = TECH_CATEGORY.TC_ID) LEFT OUTER JOIN " & _
                " INSPECT_DETAIL ON TECH_MODEL.TM_ID = INSPECT_DETAIL.TM_ID)"

Record source combo box-a:
SELECT "TECH_CATEGORY"."TC_ID", "TECH_CATEGORY"."TC_NAME" FROM "TECH_CATEGORY" ORDER BY "TC_NAME";
Но когда я пытаюсь это всё дело всязать у меня ничего не получается.
Пишу такой код:
Private Sub Combo5_AfterUpdate(Cancel As Integer)
If IsNull(Me!Combo5) Then
    tech_model_subform.Form.Filter = ""
    tech_model_subform.Form.FilterOn = False
Else
    tech_model_subform.Form.Filter = "TC_NAME = " & Me!Combo5
    tech_model_subform.Form.FilterOn = True
End If

End Sub

Подскажите, где ошибка...
FORMAT
Дата: 27.02.2008 12:32:13
julietta_ukr

Me.RecordSource = "SELECT TECH_MODEL.TM_CODE, TECH_PRICE_RCMND.TP_PRICE, ..., TECH_CATEGORY.TC_NAME" & _
" FROM (((TECH_MODEL INNER JOIN TECH_PRICE_RCMND ON TECH_MODEL.TM_ID = TECH_PRICE_RCMND.TM_ID) INNER JOIN" & _
" TECH_CATEGORY ONTECH_MODEL.TC_ID = TECH_CATEGORY.TC_ID) LEFT OUTER JOIN " & _
" INSPECT_DETAIL ON TECH_MODEL.TM_ID = INSPECT_DETAIL.TM_ID)"[/src]


По-моему, к подчиненной форме надо не так обращаться.
Forms![Главная форма]!tech_model_subform.Form!.RecordSource = ".....
mds_world
Дата: 27.02.2008 13:02:10
Такое выражение противоречит синтаксису
SELECT "TECH_CATEGORY"."TC_ID", "TECH_CATEGORY"."TC_NAME" FROM "TECH_CATEGORY" ORDER BY "TC_NAME";

Если "TECH_CATEGORY"."TC_ID", "TECH_CATEGORY"."TC_NAME" это поля, а "TECH_CATEGORY" таблица, то помещение их в кавычки недопустимо. Наверное так имелось в виду
SELECT [TC_ID], [TC_NAME] FROM [TECH_CATEGORY] ORDER BY [TC_NAME];


Второе. Судя по имени, поле TC_NAME текстовое. Тогда его замыкать в кавычки или апострофы, подчеркивая стринговую природу
tech_model_subform.Form.Filter = "TC_NAME = '" & Me!Combo5 & "'"
Но здесь может быть еще одна скрытая загвоздка. Если контрол Combo5 комбобокс, то, скорее всего, у него есть скрытый столбец и почти наверное этот столбец первый. Обращение же прямо к комбо даст ссылку, в этом случае, на совсем другое значение, не то которое ожидалось. Скажем, вместо имени будет его код. Если так, то надо обращаться к свойству комбо Column. Например так
tech_model_subform.Form.Filter = "TC_NAME = '" & Me!Combo5.Column(1) & "'"
Индекс Column начинается с нуля, поэтому видимый столбец имеет индекс 1
julietta_ukr
Дата: 27.02.2008 13:27:45
Всё это я уже перепробывала первым делом, всё равно получаю ошибку на функции AfterUpdate().
И кавычки там не причем (кроме тех, когда значение фильтра присваиваем), Access сам подставляет такой синтаксис. Всё таки подозреваю, что дело в Combo5.Column(0). Я уже попробывала сделать рядом текстовое поле и в него писать при изменении значение Combo5.Column(0) (и 0, и 1 уже подставляла). Получаю #Name?... Не могу понять, что ему не нарвится.
mds_world
Дата: 27.02.2008 13:35:20
А как вы писали в это поле? Покажите код.
Владимир Саныч
Дата: 27.02.2008 13:38:41
julietta_ukr
Дата: 27.02.2008 13:52:45
mds_world
А как вы писали в это поле? Покажите код.

Поле создается мастером, в него идут записи из таблицы. Ну и как всегда, первой (скрытой) колонкой он подставляет ID.
Но суть не в том. Можете мне помочь, сделать пример, в котором можно из combo выбрать значение, и чтоб оно присваивалось соседнему текстовому полю? Выходит, что у меня не получается уже эта простая функция...
FORMAT
Дата: 27.02.2008 13:58:48
Гляньте этот пример По-моему аналог вашего ( см форму2 )
Он уже, кстати, был на форуме
mds_world
Дата: 27.02.2008 14:05:27
Пожалуйста. Пример на основе БД Борей. Засуньте форму из этой БД в Борей и выполните.
julietta_ukr
Дата: 27.02.2008 14:17:44
FORMAT
Гляньте этот пример По-моему аналог вашего ( см форму2 )
Он уже, кстати, был на форуме

Спасибо большое! Всё получилось!