Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
148 / 35 / 6
Регистрация: 01.11.2013
Сообщений: 803

Dlookup

03.12.2015, 18:54. Показов 3545. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот такой код:
Visual Basic
1
2
dim a as integer
a = dlookup("[ID]", "T1", "[Товар] = " & forms!Forma1!Список1.Column(1))
Не хочет работать.
При установлении курсора в Списке на запись, где Column(1) = Топор (одно слово) появляется ошибка 2471: "Введенное в качестве параметра запроса выражение вызывает ошибку:Топор"
При установлении курсора в Списке на запись, где Column(1) = Грабли деревянные (два слова) появляется ошибка 3075: "...Ошибка синтаксиса...[Товар] = Грабли деревянные "

И как тут разобраться?
Выручайте....
Спасибо
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.12.2015, 18:54
Ответы с готовыми решениями:

Дата в DLookup
День добрый. Возникла загвоздка с синтаксисом: См.рис Значение переменной OldNachDost получаю из Recordset Dim OldNachDost As...

DLookup, критерий
Здравствуйте.. Возникла трудность с одним критерием, в общем в Proekt я получаю слово ( допустим Аром ) Потом передаю его во вторую...

Функция Dlookup
Уважаемые форумчане! Подскажите плиз такой момент. Есть в базе две формы ф_Клиент и ф_Заказ. В форме ф_Клиент проверяется есть...

17
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
03.12.2015, 19:00
Цитата Сообщение от govorun Посмотреть сообщение
dlookup("[ID]", "T1", "[Товар] = " & forms!Forma1!Список1.Column(1))
Текстовые нужно заключать в одиночные кавычки. Попробуйте так
Visual Basic
1
a = dlookup("[ID]", "T1", "[Товар] = '" & forms!Forma1!Список1.Column(1) & "'")
1
148 / 35 / 6
Регистрация: 01.11.2013
Сообщений: 803
03.12.2015, 20:06  [ТС]
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Попробуйте так
Спасибо, завтра (на работе) попробую и отпишусь.
А как правильно написать, когда будет несколько Column()
Visual Basic
1
a = dlookup("[ID]", "T1", "[Товар1] = '" & forms!Forma1!Список1.Column(1) & "' and [Вид] = '" & forms!Forma1!Список1.Column(2) & "'  and  [Сорт] = '" & forms!Forma1!Список1.Column(3) & "' ")
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,937
Записей в блоге: 4
03.12.2015, 20:16
чтобы не воевать с кавычками и для наглядности пишу с заменой

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dim s1
s1= "[Товар1] = '%1' and [Вид] = '%2'  and  [Сорт] = '%3' ")
s1=replace(s1,"%1",forms!Forma1!Список1.Column(1))
s1=replace(s1,"%2",forms!Forma1!Список1.Column(2))
s1=replace(s1,"%3", forms!Forma1!Список1.Column(3)) 
 
a = dlookup("[ID]", "T1", s1)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
'с учетом типов данных
 
s1= "[номер] = %1 and [дата] =#%2#  and  [Сорт] = '%3' ")
s1=replace(s1,"%1",forms!Forma1!Список1.Column(1))
s1=replace(s1,"%2",format(forms!Forma1!Список1.Column(2),"mm\/dd\/yyyy")
s1=replace(s1,"%3", forms!Forma1!Список1.Column(3)) 
 
a = dlookup("[ID]", "T1", s1)
3
148 / 35 / 6
Регистрация: 01.11.2013
Сообщений: 803
03.12.2015, 20:23  [ТС]
Цитата Сообщение от shanemac51 Посмотреть сообщение
чтобы не воевать с кавычками и для наглядности пишу с заменой
Интересный вариант, знаете ли... Обязательно попробую....
Спасибо.
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
04.12.2015, 00:22
Цитата Сообщение от govorun Посмотреть сообщение
Visual Basic
1
dim a as integer
Тут потенциальные грабли:
1) если поле ID имеет тип "Счетчик", то это не Integer, а Long
2) но если DLookup не найдет запись, удовлетворяющую условию, то вернет Null. а его нельзя присвоить переменной числового типа.

Варианты выхода: либо описать переменную как Variant, либо "обернуть" DLookup в Nz
3
148 / 35 / 6
Регистрация: 01.11.2013
Сообщений: 803
08.12.2015, 21:33  [ТС]
Цитата Сообщение от texnik-san Посмотреть сообщение
если поле ID имеет тип "Счетчик", то это не Integer, а Long
Это критично?
Цитата Сообщение от texnik-san Посмотреть сообщение
сли DLookup не найдет запись
проверку на Null я еще не сделел, но планирую примерно так:
Visual Basic
1
if isNull(a).....
Пока столкнулся с другой бедой. На форме Список. И в этот список нуна обязательно тыркнуть, что бы правильно отработал Dlookup. Поэтому нужна помощь: как проверить, что в Списке выбрана запись (установлен курсор на любую запись)?

Добавлено через 5 минут
ltv_1953, shanemac51
Воспользовался советом ltv_1953, поскольку запутался с типами данных в примере shanemac51 (вторую части сообщения увидел только сейчас). Хотя все-равно застрял с Датой. Но сейчас почитал и увидел решение. Спасибо.
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
08.12.2015, 22:16
Цитата Сообщение от govorun Посмотреть сообщение
Это критично?
Конечно. Если бы наоборот (поле в таблице Integer, а переменная - Long) не было бы, а вот именно так - да. В таблице вполне может найтись ID больший, чем максимальное значение Integer, и на операторе присвоения программа вылетит по ошибке.

Добавлено через 1 минуту
[quote="govorun;8458713"]проверку на Null я еще не сделел, но планирую примерно так:

Visual Basic
1
if isNull(a).....
не дойдет программа до этого оператора. Null целочисленной переменной a просто не присвоится.
1
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
08.12.2015, 22:30
Цитата Сообщение от govorun Посмотреть сообщение
На форме Список. И в этот список нуна обязательно тыркнуть, что бы правильно отработал Dlookup. Поэтому нужна помощь: как проверить, что в Списке выбрана запись (установлен курсор на любую запись)?
Проверить можно разными способами. Если список с мультиселектом, то проверять надо Список.ItemSelected.Count. Впрочем, эта проверка пойдет и для списка без мультиселекта. Для списка без мультиселекта к тому же можно проверять чему он равен. Если Null, значит ничего не выбрано.
1
148 / 35 / 6
Регистрация: 01.11.2013
Сообщений: 803
08.12.2015, 23:11  [ТС]
Цитата Сообщение от texnik-san Посмотреть сообщение
Null целочисленной переменной a просто не присвоится.
А разве Null можно присвоить? Как говаривал Mobile, Null ничему не равен, даже самому себе...
Следовательно (это уже мои думки) Null нельзя ничему присвоить. Но вот определить, что на определенном этапе кода значение переменной есть Null наверное возможно.
Как дойдут руки - попробую. Самому интересно....

Добавлено через 5 минут
Цитата Сообщение от mobile Посмотреть сообщение
то проверять надо Список.ItemSelected.Count.
А можно с синтаксисом...
Visual Basic
1
If... Список.ItemSelected.Count ...Then.
Честно говоря пока затрудняюсь....
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
08.12.2015, 23:20
Visual Basic
1
2
3
4
5
If Список.ItemsSelected.Count>0 Then
    ' (операторы для случая, если в списке что-то выбрано)
 else
    ' (операторы для случая, если в списке ничего выбрано)
end if
1
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
09.12.2015, 01:10
Лучший ответ Сообщение было отмечено alvk как решение

Решение

Цитата Сообщение от govorun Посмотреть сообщение
А разве Null можно присвоить
Конечно можно. В нуллах нет никакой мистики, это вполне определенное состояние машинного слова. И когда говорят, что нулл ничему не равен, имеется в виду, что любые арифметические и логические операции с нуллом также равны NULL. Не TRUE или FALSE, а NULL.

О проверке списка. У Вас действительно список? Не поле со списком? Проверка списка на выбранное значение:
Visual Basic
1
2
3
4
5
If Список.ItemSelected.Count=0 Then 'В списке ничего не выбрано
   'Что-то делаем, когда в списке ничего не выбрано
Else
   'Что-то делаем, когда в списке выбрано значение
End If
Если будет выбрано значение, а в списках с мультиселектом выбрать можно несколько, количество ItemSelected списка (ItemSelected.Count) будет больше нуля.

Добавлено через 1 час 42 минуты
Цитата Сообщение от mobile Посмотреть сообщение
Конечно можно
В ВБА присвоить можно только не типизированной переменной. Любой тип, кроме Variant не примет NULL, будет ошибка. Но это не касается полей таблиц, хотя любое из них обязательно имеет определенный тип.
2
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
09.12.2015, 06:58
Цитата Сообщение от mobile Посмотреть сообщение
Но это не касается полей таблиц, хотя любое из них обязательно имеет определенный тип.
К слову, тут уже можно проверять так на NULL:

Visual Basic
1
If len(поле & "") = 0 then
1
148 / 35 / 6
Регистрация: 01.11.2013
Сообщений: 803
09.12.2015, 18:52  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
ВБА присвоить можно только не типизированной переменной.
Ну вот еще немного науки в голову запихнул. Пригодится....
Я тут с Dlookup, вернее с датой все-таки застрял.
1. Присвоил переменным значения полей Списка.
2. В Dlookup записал условие с переменными. Получилась такая беда. Без условия на поле Дата все работает, а с условием на поле Дата не хочет. Вернее все время возвращает Null. Т.е. не находит, хотя в действительности оно есть.
По-этому прошу посмотреть, что у меня не так нацарапано:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Dim s1, s2, s3, s4, s5
Dim a
......
s5 = format(Forms!T1!Список1.Column(6), "dd\/mm\/yyyy")   'Дата вида 15.01.2015
...
a = Dlookup("ID"........& " and [Дата] = #" & s5 & "#" )
....
if isNull(a) then
msgbox "траляля"
else
Me.Надпись1.Caption = a
end if
Без проверки на поле Дата в Списке получается либо траляля либо a=чему-то равно.
а с проверкой - всегда траляля....
Что-то я с датой не так пишу....
Спасибо.
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
09.12.2015, 19:29
Цитата Сообщение от govorun Посмотреть сообщение
s5 = format(Forms!T1!Список1.Column(6), "dd\/mm\/yyyy") * 'Дата вида 15.01.2015
Дата должна быть в американском формате "mm\/dd\/yyyy" где месяц впереди
1
148 / 35 / 6
Регистрация: 01.11.2013
Сообщений: 803
10.12.2015, 18:52  [ТС]
mobile, А insert into тоже таким макаром делается, если нужно вставить данные из формы?
Visual Basic
1
w= "insert into T1 ( AAA ) select " & forms!Forma1!Список1.Column(3)
или в случае с переменной
Visual Basic
1
w= "insert into T1 ( AAA ) select " & s1
Спасибо
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
10.12.2015, 22:49
Одна запись по конкретным значениям вставляется иной формой Insert Into с помощью Values
Visual Basic
1
w= "insert into T1 ( AAA ) Values (" & forms!Forma1!Список1.Column(3) & ")"
1
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
11.12.2015, 05:40
Цитата Сообщение от mobile Посмотреть сообщение
любые арифметические и логические операции с нуллом также равны NULL. Не TRUE или FALSE, а NULL.
Это не всегда верно. Например
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
? false and null
False
?null and false
False
?true or null
True
?null or true
True
?false imp null
True
?null imp true
True
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.12.2015, 05:40
Помогаю со студенческими работами здесь

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

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

Проблемы с DLookup
Ребят, смотрите есть 2 формы Пациент и Справка. На форме Пациент я жму кнопку Выдать справку. Поля, которые мне нужны из формы Пациент у...

Функция DLookup
Доброго времени суток. Нужно присвоить значение строковой переменной в соответствии со значением Истина/Ложь из таблицы. Изменить...

DLookUp и поиск
Приветствую всех. Делаю поиск клиента, на форме поле где вводиться имя и кнопка поиск. На кнопке висит это: Укажите на ошибку, а то...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
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 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru