Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154

Создание запроса в access vba

11.09.2016, 02:56. Показов 2651. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
приветствую,
У меня есть в форме есть список,который ссылается на запрос, и я хочу при помощи полей со списком фильтровать его, т.е. в самом запросе есть ссылки на контролы в форме(кусок кода ниже и выше), изменяя запрос я меняю логику и/или между полями со списком,для этого я сделал блоки переключателей
вот код
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Dim StrSql As String
Dim Desiro1 As Database
Dim KL_filter As QueryDef
Dim tokpriemnik_bereg_s As String
Dim bereg_110v_s As String
Dim v110_zazemlen_s As String
Dim zazemlen_pm_s As String
Dim pm_tm_s As String
 
Set Desiro1 = CurrentDb
Desiro1.QueryDefs.Refresh
For Each KL_filter In Desiro1.QueryDefs
If KL_filter.Name = "KL_filter" Then
End If
Next KL_filter
 
If (tokpriemnik_bereg = 1) Then tokpriemnik_bereg_s = "OR" Else tokpriemnik_bereg_s = "AND"
If (bereg_110v = 1) Then bereg_110v_s = "OR" Else bereg_110v_s = "AND"
If (v110_zazemlen = 1) Then v110_zazemlen_s = "OR" Else bereg_110v_s = "AND"
If (zazemlen_pm = 1) Then zazemlen_pm_s = "OR" Else zazemlen_pm_s = "AND"
If (pm_tm = 1) Then zazemlen_pm_s = "OR" Else pm_tm_s = "AND"
 
Next KL_filter
 
 
StrSql = "SELECT KL.ID, KL.Opisanie_id, KL.Sort, KL.[Nomer dokumenta], KL.Punkt, KL.Titel, KL.Mesto, KL.[Vagon A_kod], " & _
"KL.[Vagon B_kod], KL.[Vagon C_kod], KL.[Vagon D_kod], KL.[Vagon E_kod], [Sostoyanie poezda].[Akkumulyatornaya batareya 110 V], " & _
"[Sostoyanie poezda].[Pnevmaticheskij tormoz], [Sostoyanie poezda].[Pnevmosnabzhenie cherez pitatelnuyu magistral], " & _
"[Sostoyanie poezda].[Aktivnaya kabina mashinista], [Sostoyanie poezda].[Energosnabzhenie cherez vneshnee pitanie], " & _
"[Sostoyanie poezda].Tokopriemnik, [Sostoyanie poezda].[Stoyanochnyj pruzhinnyj tormoz], [Sostoyanie poezda].[Elektropoezd zazemlen]" & _
"FROM [Sostoyanie poezda] INNER JOIN KL ON [Sostoyanie poezda].[Sostoyanie poezda_id]=KL.Opisanie_id" & _
"WHERE (((KL.[Nomer dokumenta]) Like " * " & (Forms!KL_for_KL_LISTE!nomer_instr) & " * ")" & _
"And" &(([Sostoyanie poezda].Tokopriemnik) Like " * " & (Forms!KL_for_KL_LISTE!vysok_napr) & " * ")" & _
"& tokpriemnik_bereg_s &" & "(([Sostoyanie poezda].[Energosnabzhenie cherez vneshnee pitanie]) Like " * " & _ (Forms!KL_for_KL_LISTE!bereg_napr) & " * ")" & " & bereg_110v_s & _
" & "(([Sostoyanie poezda].[Akkumulyatornaya batareya 110 V]) Like " * " & (Forms!KL_for_KL_LISTE!akum_napr) & " * ")" & " & _ v110_zazemlen_s & " & "(([Sostoyanie poezda].[Elektropoezd zazemlen]) Like " * " & _
(Forms!KL_for_KL_LISTE!zazem) & " * "))" & " & zazemlen_pm_s & " & _
"(([Sostoyanie poezda].[Pnevmaticheskij tormoz]) Like " * " & (Forms!KL_for_KL_LISTE!tm_vozd) & " * ")" & " & pm_tm_s & _
" & "(([Sostoyanie poezda].[Pnevmosnabzhenie cherez pitatelnuyu magistral]) Like " * " & (Forms!KL_for_KL_LISTE!pm_vozd) & " * ")"
Set KL_filter = Desiro1.CreateQueryDef("KL_filter", StrSql)
DoCmd.OpenQuery "KL_filter", acViewNormal
KL_filter.Close
ошибка происходит в коде sql
в этом куске
(((KL.[Nomer dokumenta]) Like " * " & (Forms!KL_for_KL_LISTE!nomer_instr) & " * ")" &

vba не нравятся звезды и кавычки и амперсанд
в чем пробдема? при обычном создании запроса все работает

Добавлено через 23 минуты
номер ошибки #13 Type Mismatch
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.09.2016, 02:56
Ответы с готовыми решениями:

Создание запроса Access VBA
Всем привет... Имеются две таблицы Локальная и вторая на сервере SQL Server... пробовал их объединить..но к что то не так...я в...

Создание запроса VBA
Как сформировать запрос с параметрами из VBA, что бы он в таком виде был.

Ошибка при выполнении запроса в коде на VBA Access
Здравствуйте. Делаю в БД на аксесс форму для вывода данных. На форме есть комбобокс, где выбирается значение для условия отбора в запросе....

28
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
11.09.2016, 03:08
Все дело в кавычках
те которые по тексту запроса должны быть заменены на апострофы '
SQL
1
(((KL.[Nomer dokumenta]) LIKE ' * " & (Forms!KL_for_KL_LISTE!nomer_instr) & " * ')"
Добавлено через 3 минуты
еще
при сборке запроса в vba внимательно следите за наличием пробелов
из того что я вижу (отсутствуют пробелы)
SQL
1
2
3
4
[Elektropoezd zazemlen]" & _
"FROM [Sostoyanie poezda] INNER JOIN KL ON [Sostoyanie poezda].[Sostoyanie poezda_id]=KL.Opisanie_id" & _
"WHERE (((KL.[Nomer dokumenta]) LIKE " * " & (Forms!KL_for_KL_LISTE!nomer_instr) & " * ")" & _
"AND" &(([Sostoyanie poezda].Tokopriemnik) Like " * " & (Forms!KL_for_KL_LISTE!vysok_napr) & " * ")" & _
перед словом from
перед словом where
перед и после слова and
может и еще где есть
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
11.09.2016, 03:20  [ТС]
теперь говорит missing item
Миниатюры
Создание запроса в access vba  
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
11.09.2016, 03:23
лишняя (отсутствующая) скобка
выложите весь получившийся текст запроса

еще
оператор Like может сделать пакость - он не отбирает поля значения в которых Null
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
11.09.2016, 03:29  [ТС]
Visual Basic
1
2
3
4
5
StrSql = "SELECT KL.ID, KL.Opisanie_id, KL.Sort, KL.[Nomer dokumenta], KL.Punkt, KL.Titel, KL.Mesto, KL.[Vagon A_kod], KL.[Vagon B_kod], KL.[Vagon C_kod], KL.[Vagon D_kod], KL.[Vagon E_kod], [Sostoyanie poezda].[Akkumulyatornaya batareya 110 V], [Sostoyanie poezda].[Pnevmaticheskij tormoz], [Sostoyanie poezda].[Pnevmosnabzhenie cherez pitatelnuyu magistral], [Sostoyanie poezda].[Aktivnaya kabina mashinista], [Sostoyanie poezda].[Energosnabzhenie cherez vneshnee pitanie], [Sostoyanie poezda].Tokopriemnik, [Sostoyanie poezda].[Stoyanochnyj pruzhinnyj tormoz], [Sostoyanie poezda].[Elektropoezd zazemlen]" & _
" FROM [Sostoyanie poezda] INNER JOIN KL ON [Sostoyanie poezda].[Sostoyanie poezda_id]=KL.Opisanie_id" & _
" WHERE (((KL.[Nomer dokumenta]) like '*" & Forms!KL_for_KL_LISTE!nomer_instr & "*'"
Set KL_filter = Desiro1.CreateQueryDef("KL_filter", StrSql)
DoCmd.OpenQuery "KL_filter", acViewNormal
Добавлено через 2 минуты
ладно бы не отбирал, так он вообше не создает
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
11.09.2016, 03:31
вот смотрите
SQL
1
WHERE (((KL.[Nomer dokumenta]) LIKE '*" & Forms!KL_for_KL_LISTE!nomer_instr & "*'"
скобок "(" целых 3 штуки
а скобок ")" всего одна
в строке where должно быть равное количество
правильно будет так
SQL
1
WHERE (((KL.[Nomer dokumenta]) LIKE '*" & Forms!KL_for_KL_LISTE!nomer_instr & "*'))"
или так
SQL
1
WHERE (KL.[Nomer dokumenta]) LIKE '*" & Forms!KL_for_KL_LISTE!nomer_instr & "*'"
или так
SQL
1
WHERE (((KL.[Nomer dokumenta]))) LIKE '*" & Forms!KL_for_KL_LISTE!nomer_instr & "*'"
или так
SQL
1
WHERE KL.[Nomer dokumenta] LIKE '*" & Forms!KL_for_KL_LISTE!nomer_instr & "*'"
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
11.09.2016, 03:34  [ТС]
вот добавка, правда ошибка теперь возникает на следующей строке
Миниатюры
Создание запроса в access vba  
0
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
11.09.2016, 03:36  [ТС]
Спасибо огромное!! все работает!! ура!! целый день уже маюсь(((
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
11.09.2016, 03:37
это где же у нас день - у меня только утро
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
11.09.2016, 03:44  [ТС]
погорячился тут я запрос теперь такой выдает после создания
SQL
1
2
3
SELECT KL.ID, KL.Opisanie_id, KL.Sort, KL.[Nomer dokumenta], KL.Punkt, KL.Titel, KL.Mesto, KL.[Vagon A_kod], KL.[Vagon B_kod], KL.[Vagon C_kod], KL.[Vagon D_kod], KL.[Vagon E_kod], [Sostoyanie poezda].[Akkumulyatornaya batareya 110 V], [Sostoyanie poezda].[Pnevmaticheskij tormoz], [Sostoyanie poezda].[Pnevmosnabzhenie cherez pitatelnuyu magistral], [Sostoyanie poezda].[Aktivnaya kabina mashinista], [Sostoyanie poezda].[Energosnabzhenie cherez vneshnee pitanie], [Sostoyanie poezda].Tokopriemnik, [Sostoyanie poezda].[Stoyanochnyj pruzhinnyj tormoz], [Sostoyanie poezda].[Elektropoezd zazemlen]
FROM [Sostoyanie poezda] INNER JOIN KL ON [Sostoyanie poezda].[Sostoyanie poezda_id]=KL.Opisanie_id
WHERE (((KL.[Nomer dokumenta]) LIKE '**'));
нет ссылки на контрол формы

Добавлено через 1 минуту
ну да утро.... три часа ночи))

Добавлено через 39 секунд
в лайке нет ссылки на контрол
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
11.09.2016, 03:46
правильно
видимо в контроле, на который ссылаетесь, значение установлено null (проще говоря не выбрано)

Добавлено через 1 минуту
по идее этот запрос должен выбрать все записи по условию что текстовое поле KL.[Nomer dokumenta] не равно null
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
11.09.2016, 03:46  [ТС]
хм... а как так тогда жить? было бы строго желательно чтобы он появлялся даже при значении null
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
11.09.2016, 03:58
тут можно схитрить
собирать строку where отдельно
например так
Visual Basic
1
2
3
4
5
6
dim strWhere$, strSQL$
strSQL = "Select ........."
strSQL = strSQL & " From ........."
strWhere=""
if Nz(KL.[Nomer dokumenta],"")<>"" Then strWhere="KL.[Nomer dokumenta] LIKE '*" & Forms!KL_for_KL_LISTE!nomer_instr & "*'"
if strWhere<>"" Then  strSQL=strSQL & " Where " & strWhere
Добавлено через 4 минуты
не правильно
прошу прощения
вот правильный вариант
Visual Basic
1
2
3
4
5
6
dim strWhere$, strSQL$
strSQL = "Select ........."
strSQL = strSQL & " From ........."
strWhere=""
if Nz(Forms!KL_for_KL_LISTE!nomer_instr,"")<>"" Then strWhere="KL.[Nomer dokumenta] LIKE '*" & Forms!KL_for_KL_LISTE!nomer_instr & "*'"
if strWhere<>"" Then  strSQL=strSQL & " Where " & strWhere
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
11.09.2016, 04:02  [ТС]
object required
Миниатюры
Создание запроса в access vba  
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
11.09.2016, 04:04
чуть выше посмотрите
я в коде ошибся
Visual Basic
1
if Nz(Forms!KL_for_KL_LISTE!nomer_instr,"")<>"" Then strWhere="KL.[Nomer dokumenta] LIKE '*" & Forms!KL_for_KL_LISTE!nomer_instr & "*'"
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
11.09.2016, 04:09  [ТС]
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim strWhere$, strSQL$
strSQL = "SELECT KL.ID, KL.Opisanie_id, KL.Sort, KL.[Nomer dokumenta], KL.Punkt, KL.Titel, KL.Mesto, KL.[Vagon A_kod], KL.[Vagon B_kod], KL.[Vagon C_kod], KL.[Vagon D_kod], KL.[Vagon E_kod], [Sostoyanie poezda].[Akkumulyatornaya batareya 110 V], [Sostoyanie poezda].[Pnevmaticheskij tormoz], [Sostoyanie poezda].[Pnevmosnabzhenie cherez pitatelnuyu magistral], [Sostoyanie poezda].[Aktivnaya kabina mashinista], [Sostoyanie poezda].[Energosnabzhenie cherez vneshnee pitanie], [Sostoyanie poezda].Tokopriemnik, [Sostoyanie poezda].[Stoyanochnyj pruzhinnyj tormoz], [Sostoyanie poezda].[Elektropoezd zazemlen]"
strSQL = strSQL & " FROM [Sostoyanie poezda] INNER JOIN KL ON [Sostoyanie poezda].[Sostoyanie poezda_id]=KL.Opisanie_id"
strWhere = ""
If Nz(Forms!KL_for_KL_LISTE!nomer_instr, "") <> "" Then strWhere = "KL.[Nomer dokumenta] LIKE '*" & Forms!KL_for_KL_LISTE!nomer_instr & "*'"
If strWhere <> "" Then strSQL = strSQL & " Where " & strWhere
 
Set KL_filter = Desiro1.CreateQueryDef("KL_filter", strSQL)
DoCmd.OpenQuery "KL_filter", acViewNormal
KL_filter.Close
 
 
End Sub
Хитрость не удалась) при нулевом значении просто не выходит where
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
11.09.2016, 04:12
ПОчему не удалась?
Как раз таки удалась
если по полю нет условия отбора то выберутся все записи
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
11.09.2016, 04:17  [ТС]
т.е. мне никогда не получить запрос такого вида при помощи VBA
SQL
1
2
3
SELECT .....
FROM ............
WHERE (((KL.[Nomer dokumenta]) LIKE "*" & (Forms!KL_for_KL_LISTE!nomer_instr) & "*")
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
11.09.2016, 04:27
с чего вы взяли - что никогда не получить?
как раз наоборот
тут вся хитрость в операторе Like
из-за того что этот оператор выбирает из таблицы только записи с текстом и если в табле (в поле) есть пустое значение а именно NULL (не путать с "") то такая запись отобрана не будет
что бы отобрать все записи (в том числе со значением NULL в данном поле) нужно убрать условие по этом полю из строки Where
т.к. пример строился на значении всего одного поля формы то при значении этого поля равное NULL строка Where в запросе не нужна вообще
попробуйте выбрать какое-то значение в комбобоксе и посмотрите какой запрос получится
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
11.09.2016, 04:37  [ТС]
я понимаю что если я выберу не null то все будет отлично запрос мне выведет значения равные комбубоксу
но если я хочу именно лайк с апострофами то ничего не выйдет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2016, 04:37
Помогаю со студенческими работами здесь

Проверка SQL-запроса в VBA и отчет из Access в Excel
Здравствуйте! Учусь писать SQL-запросы и VBA, нужна помощь с проверкой на ошибки. Схема данных Имеется форма договоры, с...

Запуск запроса к таблице на SQL server через VBA access 2007
Здравствуйте! дано: база данных аксес 2007, к ней прилинкованы две таблицы с sql server...

Создание запроса в MS Access
Помогите составить запрос: &quot;Определите из какого из представленных городов учится наибольшее число студентов и выведите информацию о...

Создание запроса в Access
Добрый день! Требуется создать базу данных по иерархической файловой системе: создать 2 таблицы - Папки(Уникальный идентификатор...

Создание запроса в access
Всем привет! Мне нужна помощь в создании запроса в access, нужно сделать так, чтобы запрос выдавал в одном блоке рабочие номера...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru