С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/54: Рейтинг темы: голосов - 54, средняя оценка - 4.93
1 / 1 / 0
Регистрация: 09.04.2010
Сообщений: 459
1

О подстановке в условие запроса с поля со списком...

05.10.2010, 17:36. Показов 10843. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создана форма «Отчеты», на форме имеется иконка, которая запускает отчет.
Отчет запускается нормально.
Но далее, здесь на этой форме, я создаю поле со списком, в котором, например, находятся населенные пункты.
Безусловно, это поле построено на базе таблицы населенных пунктов.
Само поле отлично работает и нормально производится выбор населенных пунктов в нем.
Имя поля со списком «NasPunkt»
Далее в запросе, на котором построен отчет, в условии поля «NasPunkt» пишу –
=[Forms]![Отчеты]![NasPunkt], т.е. в условие вставляю то, что выбрано в поле со списком на форме отчетов и запускаю выполнение отчета.
Выдает сообщение: [Forms]![Отчеты]![NasPunkt] не распознается базы данных Microsoft Jet как допустимое имя поля или выражение.
Ошибки в написании нет.

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

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

Ребята помогите, я целый день не могу решить эту проблему.
В тоже время в основной форме у меня более десятка полей со списками откуда вставляются данные в другие поля и там все ОК.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2010, 17:36
Ответы с готовыми решениями:

Условие на обновление поля со списком
Доброго времени суток! Делаю форму, для внесения данных в таблицу, "перелопатил" весь форум, но...

Поле со списком, условие для поля
Добрый день, подскажите пожалуйста, можно ли как нибудь сделать так, что бы в поле со списком...

Фильтрация запроса-источника поля со списком
Всем доброго дня! Заранее прошу прощения. если повторюсь, но увы не удалось толком ничего найти...

Передача значения поля со списком в качестве параметра запроса
В форме Курсы по кафедрам при нажатии на кнопку Открыть отчет в качестве параметра запроса для...

16
0 / 0 / 0
Регистрация: 20.06.2009
Сообщений: 56
06.10.2010, 07:01 2
Попробуй так:
Код
[Forms]![Отчеты]![NasPunkt].Value
Или воспользуйся 'Построителем выражений' в конструкторе запроса.

СК! 73!
0
1 / 1 / 0
Регистрация: 09.04.2010
Сообщений: 459
06.10.2010, 09:21  [ТС] 3
И так
[Forms]![Отчеты]![NasPunkt].Value

И построителем с формы, получаю то же сообщение:

[Forms]![Отчеты]![NasPunkt] не распознается базой данных Microsoft Jet как допустимое имя поля или выражение.

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

Спасибо Вам.
0
1 / 1 / 0
Регистрация: 09.04.2010
Сообщений: 459
06.10.2010, 09:58  [ТС] 4
Еще раз, отчет построен: Запрос1 - Запрос2(перекрестный). > Отчет

Интересная штука.
1. На базе запроса (минуя перекрестный) создал отчет и в нем использую те же подстановки, с того же поля со списком, все работает. (Т.е. Запрос1 > Отчет)
2. При ручном вводе в условия Запрос1 все работает (т.е. Запрос1 - Запрос2(перекрестный). > Отчет), при попытке выбрать с поля со списком значения параметра для условия запроса выдается сообщение, выше приведенное.

Получается, как только между Запросом1 и Отчетом вклинивается перекрестный запрос Форма Отчеты перестает обнаруживаться, что же может быть?

Благодарю всех.
0
1 / 1 / 0
Регистрация: 09.04.2010
Сообщений: 459
06.10.2010, 10:21  [ТС] 5
Эксперимент следующий:

1. В условии поля запроса «Запрос1» пишу [Введите значение параметра].

2. Запускаю на выполнение «Запрс2_перекрестный» и уже вместо «Введите значение параметра» я получаю сообщение, что :

‘[Введите значение параметра]’ не распознается базой данных Microsoft Jet как допустимое имя поля или выражение.

Наверное ближе к разгадке?

Пожалуйста помогите.
Не хочется писать шесть запросов вместо двух.
0
4 / 4 / 0
Регистрация: 15.09.2010
Сообщений: 228
08.10.2010, 07:34 6
Задай параметр в запросе....

В запросе, в котором имеет место быть '[Forms]![Отчеты]![NasPunkt]'
перед Select-ом пишешь:

Parameters [Forms]![Отчеты]![NasPunkt] Long;
Select..........

(Long - если тип данных числовой... Text(255) - если текстовый)...

Или можно в конструкторе -

Параметры- Параметр=[Forms]![Отчеты]![NasPunkt],Тип данных=Текстовый
0
1 / 1 / 0
Регистрация: 09.04.2010
Сообщений: 459
08.10.2010, 16:57  [ТС] 7
Deminik, спасибо пошло!
Вот в таком виде.

PARAMETERS [Forms]![Отчеты]![SEK] Text ( 255 );

Подскажите еще, допустим в поле со списком выбирается сектор,
имеется ввиду: Частный, Государственный или же и то и другое вместе.

Так вот отдельно 'Част' или 'Гос' (так у меня в поле со списком)
выбираются, а сразу и то и другое не получается.

Если в условии запроса я пишу 'Гос' OR 'Част', у меня выводится в отчете все, а если такое же условие в поле со списком выбираю для условия запроса, не хочет.
Я думаю Вы поняли мою проблему.
Как быть в данном случае?
Благодарю.
0
4 / 4 / 0
Регистрация: 15.09.2010
Сообщений: 228
08.10.2010, 17:03 8
Какой источник строк поля со списком ?
0
1 / 1 / 0
Регистрация: 09.04.2010
Сообщений: 459
08.10.2010, 17:12  [ТС] 9
Источником строк является отдельная таблица, где в поле имеются:

Гос
Част
'Гос' OR 'Част'

Так вот первые две идут, а третья нет.

А когда третье выражение в условие запроса отдельно помещаю, все идет.
0
4 / 4 / 0
Регистрация: 15.09.2010
Сообщений: 228
08.10.2010, 18:39 10
Акес все верно делает.... возможно запрос придеться формировать динамически.... типа: если поле='ВСЕ' то выбираем все записи, иначе где поле в таблице = полю на форме...
0
4 / 4 / 0
Регистрация: 15.09.2010
Сообщений: 228
08.10.2010, 20:20 11
Если в главной таблице этот вид собственности хранится как текст, а не код:

Главная таблица - Текстовое поле 'VidSobstv' (может быть 'Част' или 'Гос')
Поле со списком 'VidSobstv'...
его Тип источника строк - Список значений
его Источник строк - '< ВСЕ >';'Част';'Гос'
его Число столбцов - 1
его Присоединенный столбец - 1

На открытие отчета:
Visual Basic
1
2
3
4
5
6
7
Private Sub MyReport_Open()
   dim strSQL as String
   strSQL = 'Select * From MyTable'
   strSQL = strSQL & iif(Forms!MyForm!VidSobstv <> '< ВСЕ >', _
   ' Where VidSobstv = '' & Forms!MyForm!VidSobstv & ''', '')
   Me.RecordSource = strSQL
End Sub
0
1 / 1 / 0
Регистрация: 09.04.2010
Сообщений: 459
08.10.2010, 22:24  [ТС] 12
У меня с источником строк так как Вы говорите все.
Но не плучается, ниже приведенные строки функции 'красные'
Ошибка компиляции.
Visual Basic
1
2
strSQL = strSQL & iif(Forms!MyForm!СЕК<> '< ВСЕ >', _
' Where СЕК= '' & Forms!MyForm!СЕК& ''', '')
А 'MyForm' оставлять так или это форма 'Отчеты'.
0
4 / 4 / 0
Регистрация: 15.09.2010
Сообщений: 228
08.10.2010, 23:27 13
>>> У меня с источником строк так как Вы говорите все.
>>> Но не плучается, ниже приведенные строки функции 'красные'
>>> Ошибка компиляции.

>>> strSQL = strSQL & iif(Forms!MyForm!СЕК<> '< ВСЕ >', _
>>> ' Where СЕК= '' & Forms!MyForm!СЕК& ''', '')

В этой строке ' Where СЕК= '' & Forms!MyForm!СЕК& ''', '') -
'СЕК' и '&' идут слитно - раздели пробелом Forms!MyForm!СЕК & '''

А вообще, это не 2 строки, а одна:
strSQL = strSQL & iif(..., ..., ...)

>>> А 'MyForm' оставлять так или это форма 'Отчеты'.

А имя формы/отчета, которое я выдумал для примера.... Естественно оно должно быть, как в твоей БД...

Чуть-чуть оптимизируем код:
Visual Basic
1
2
3
4
5
6
7
8
Private Sub MyReport_Open()
Dim strSQL as String
Dim cmb as Object
Set cmb = Forms!Отчеты!СЕК
strSQL = 'Select * From MyTable'
strSQL = strSQL & iif(cmb <> '< ВСЕ >', ' Where VidSobstv = '' & cmb & ''', '') ' Просто здесь в одну строку никак не влазит
Me.RecordSource = strSQL
End Sub
0
1 / 1 / 0
Регистрация: 09.04.2010
Сообщений: 459
09.10.2010, 08:59  [ТС] 14
Visual Basic
1
2
3
4
5
6
7
8
Private Sub MyReport_Open()
Dim strSQL as String
Dim cmb as Object
Set cmb = Forms!Отчеты!СЕК
strSQL = 'Select * From MyTable'
strSQL = strSQL & iif(cmb <> '< ВСЕ >', ' Where VidSobstv = '' & cmb & ''', '') ' Просто здесь в одну строку никак не влазит
Me.RecordSource = strSQL
End Sub
Deminik, простите, но не идет.
Visual Basic
1
strSQL = strSQL & iif(cmb <> '< ВСЕ >', ' Where VidSobstv = '' & cmb & ''', '')
Здесь ошибка компиляции.

Вместо ниже приведенных имен я пробывал вводить имена отчета и таблица (поля со списком) - всеодно не хочет.

MyReport
MyTable
Или эти остаются так, как у ВАс?

Спасибо.
0
0 / 0 / 0
Регистрация: 20.06.2009
Сообщений: 56
09.10.2010, 12:10 15
А если так:
Visual Basic
1
2
strSQL = 'Select * From MyTable'
strSQL = strSQL & 'Where [VidSobstv] Like iif(cmb <> '< ВСЕ >', ' & cmb & ','*')' ' Просто здесь в одну строку никак не влазит
СК! 73!
0
1 / 1 / 0
Регистрация: 09.04.2010
Сообщений: 459
09.10.2010, 12:43  [ТС] 16
Изменил
Visual Basic
1
2
3
4
5
6
7
8
Private Sub MyReport_Open()
Dim strSQL As String
Dim cmb As Object
Set cmb = Forms!Отчеты!СЕК
strSQL = 'Select * From MyTable'
strSQL = strSQL & 'Where [Сектор] Like iif(cmb <> '< ВСЕ >', ' & cmb & ',' * ')'
Me.RecordSource = strSQL
End Sub
Ошибки компиляции нет!
Выбирает 'Гос' и 'Част' , а на 'Все' попрежнему говорит, что
не распознается ядром.....
Заппрос на базе которого все построенно:
SQL
1
2
3
4
PARAMETERS [Forms]![Отчеты]![Сектор] Text ( 255 );
SELECT [Abonent].[LICS], [Abonent].[Uchastok], [Abonent].[NasP], [Abonent].[SEK], [UstObor].[VidObor], [UstObor].[TypObor]
FROM VidObor INNER JOIN (TypObor INNER JOIN (Abonent INNER JOIN UstObor ON [Abonent].[LICS]=[UstObor].[LICS]) ON [TypObor].[TypObor]=[UstObor].[TypObor]) ON [VidObor].[IdVid]=[TypObor].[IdVid]
WHERE ((([Abonent].[SEK])=[Forms]![Отчеты]![Сектор]));
Затем следует перекпестный.

Еще, у меня отчет открывается кнопочкой, для чего присутствует еще одна функция, приведенная ниже.
Они не конфликтуют случайно?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Кнопка11_Click()
On Error GoTo Err_Кнопка11_Click
 
    Dim stDocName As String
 
    stDocName = 'По видам гос'
    DoCmd.OpenReport stDocName, acPreview
 
Exit_Кнопка11_Click:
    Exit Sub
 
Err_Кнопка11_Click:
    MsgBox Err.Description
    Resume Exit_Кнопка11_Click
    
End Sub
Кажется все.
0
1 / 1 / 0
Регистрация: 09.04.2010
Сообщений: 459
09.10.2010, 21:04  [ТС] 17
Чтобы меньше терять Вам времени, сообщаю итог по данной теме.

Ребята, описываю еще раз проблему.

Отчет построен на базе перекрестного запроса 'Х', который, в свою очередь построен на базе простого запроса 'Y'.

1. Отчет открывается кнопкой с формы 'Отчеты', где с поля со списком выбирается вид сектора 'Гос' или 'Част'. Поле со списком построено на базе отдельной таблицы «Sec».

Из-за того, что отчет построен на базе перекрестного запроса, открыть отчет не удавалось, было сообщение о том, что «не распознается базой данных Microsoft Jet как допустимое имя поля или выражение.»
По рекомендации Deminik, в запрос была добавлена строка:
PARAMETERS [Forms]![Отчеты]![SEK] Text ( 255 );
Проблема была решена.

2. С целью уменьшения количества запросов, необходимых для создания отчетов, я разместил в таблице «Sec», в поле «Сектор» такие записи: «Гос», «Част» и «Все».
Хотелось бы, чтобы при выборе в списке «Все», в отчет попадали и «Гос» и «Част» секторы.

Deminik предложил для этой цели использовать функцию:
Visual Basic
1
2
3
4
5
6
7
Private Sub MyReport_Open()
Dim strSQL as String
Dim cmb as Object
Set cmb = Forms!Отчеты!Сектор
strSQL = 'Select * From MyTable'
strSQL = strSQL & iif(cmb <> '< ВСЕ >', ' Where Сектор = '' & cmb & ''', '') Me.RecordSource = strSQL
End Sub
Строка этой функции
Visual Basic
1
 strSQL = strSQL & iif(cmb <> '< ВСЕ >', ' Where Сектор = '' & cmb & ''', '') Me.RecordSource = strSQL
вызывала ошибку компиляции.

Telekast предлагает видоизменение этой строки
Visual Basic
1
strSQL = strSQL & 'Where [Сектор] Like iif(cmb <> '< ВСЕ >', ' & cmb & ','*')'
т.е. мы имеем функцию:
Visual Basic
1
2
3
4
5
6
7
Private Sub MyReport_Open()
Dim strSQL as String
Dim cmb as Object
Set cmb = Forms!Отчеты!Сектор
strSQL = 'Select * From MyTable'
strSQL = strSQL & 'Where [Сектор] Like iif(cmb <> '< ВСЕ >', ' & cmb & ','*')' 
End Sub
Компиляция пошла, но результата нет, при выборе в поле со списком «Все», выдает сообщение:
«Не распознается базой данных Microsoft Jet как допустимое имя поля или выражение.»

То же самое сообщение выдается, если я эту функцию убираю с модуля формы «Отчеты» вообще.

Кроме того, такая штука, когда функция вообще отсутствует в модуле и я открываю отчет с параметром «Все», просто выдается сообщение «Не распознается базой данных Microsoft Jet как допустимое имя поля или выражение.».Если выбираю другие параметры условия, все работает.

Если я помещаю функцию в модуль формы «Отчеты», то ситуация другая:
При выборе «Все» сначала получаю то же сообщение, но если я после этого стану на строку, допустим, «Гос», то отчет откроется с правильно выбранными данными, но при этом в таблице «Sec», на базе которого построено поле со списком строка «Все» заменится на «Гос».

Благодарю всех, за оказание помощи.
0
09.10.2010, 21:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2010, 21:04
Помогаю со студенческими работами здесь

Ограничение поля со списком по полю текущей записи запроса
Автоматизирую подстановку активных абонементов в программе учета фитнес-клуба: Таблицы:...

Необходимо передать из поля данные в условие отбора запроса
Необходимо передать из поля данные в условие отбора запроса: Делаю типа...

Выбор значения из поля со списком, исходя из предыдущего поля со списком
Дана БД. Форма на добавление данных. Необходимо сделать следующее: 1) В поле &quot;Свободно...

Тема Подскажите как сделать так чтобы данные поля со списком брались из запроса, но если он пустой то из таблицы .
Данные в форме берутся из запросов, поле подрядчик имеет всего три значения (заданы в свойствах...

Значение поля со списком по значениям другого поля со списком
Привет всем. Требуется помощь со связанными полями со списками. В форме доходы федерации в первом...

Выполнение запроса и построитель выражений. Поля появляются, а значения не вытягивает в поля запроса
Запрос НАРАХОВАНО Поля для значений появляются, а значения не вытягивает в поля запроса, нужное не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru