Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
609 / 388 / 8
Регистрация: 14.04.2011
Сообщений: 1,324

Функция dlookup в ленточной форме

15.07.2014, 07:31. Показов 4945. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем привет!
подскажите как реализовать функцию DLookup в ленточной форме?
вешаю на событие после обновления поля со списком эту функцию, значения меняются во всех строках, а нужно чтобы менялось только в текущей(!)
возможно есть какой-то альтернативный способ, рассмотрю любой...

заранее всем спасибо!

Добавлено через 14 минут
вот сам код:
Visual Basic
1
2
3
Private Sub ИдПозиция_AfterUpdate()
Me!Поле66 = DLookup("[сумколНорм]", "сумматпоз", "идпозиции=" & Forms!смета!ИдПозиция)
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.07.2014, 07:31
Ответы с готовыми решениями:

Функция Count на поле в ленточной форме
Я на форме cсоздал свободное поле и написал =Сount () в итоге посчитал сумма все записи я бы хотел он отображал количество уникальных...

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

Автоподстановка в форме (ф-ция DLookup)
Помогите пожалуйста разобраться с ф-цией "DLookup", перелопатил кучу статей, но так толком ничего и не понял! Есть БД в ней таблица...

38
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
22.07.2014, 12:57
Студворк — интернет-сервис помощи студентам
Вы не вставили NZ в условия в Поле1. Там была ошибка. Сделал его видимым для проверки. Все нормально считается.
Вложения
Тип файла: 7z Database1 (13).7z (68.8 Кб, 12 просмотров)
1
Эксперт MS Access
26828 / 14509 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.07.2014, 13:17
Форма перенасыщена вычисляемыми полями с достаточно тяжелыми формулами. Это и медленно, и чревато возможной дестабизизацией формы. Гораздо эффективней и безопасней перетащить все расчеты в исходный запрос и вместо расчетных полей в форме сделать поля на основе полей запроса. Форма станет значительно легче и удобней в работе.
1
609 / 388 / 8
Регистрация: 14.04.2011
Сообщений: 1,324
22.07.2014, 13:22  [ТС]
mobile, здравствуйте
вы имеете в виду: создать отдельно запрос, или модифицировать запрос - источник формы?
0
Эксперт MS Access
26828 / 14509 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.07.2014, 13:26
Хороший вариант это вставить в запрос-источник формы все вычисления. Полям формы, вместо вычислений задать источником эти поля запроса с нужными расчетами.

Добрый день, sekonya
1
609 / 388 / 8
Регистрация: 14.04.2011
Сообщений: 1,324
22.07.2014, 14:45  [ТС]
mobile, ок, сейчас сделаю)
еще маленький вопрос, почему когда я в примечании формы ставлю поле с формулой "=sum([поле6])", в режиме формы возвращает #ошибка?

Добавлено через 20 минут
mobile, вот такая конструкция =Nz(DLookUp("[сумколНорм]";"сумматпоз";"идпозиции=" & Nz([Формы]![смета]![ИдПозиция];0))*DLookUp("[сумЦенаЗаЕдМатСмет]";"сумматпоз";"идпозиции=" & Nz([Формы]![смета]![ИдПозиция];0));0) в запросе возвращает ноль, понятно что ссылка идет на форму, как это обойти? пробовал в запрос - источник формы вставить следующее NNN: Nz(DLookUp("[сумколНорм]";"сумматпоз")*DLookUp("[сумЦенаЗаЕдМатСмет]";"сумматпоз");0), запрос возвращает одинаковые значения для всех строк

Добавлено через 55 минут
mobile, подскажите пожалуйста, как мне в запросе сделать вычисляемые поля?
0
Эксперт MS Access
26828 / 14509 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.07.2014, 15:29
Лучший ответ Сообщение было отмечено sekonya как решение

Решение

Цитата Сообщение от sekonya Посмотреть сообщение
вот такая конструкция =Nz(DLookUp("[сумколНорм]";"сумматпоз";"идпозиции=" & Nz([Формы]![смета]![ИдПозиция];0))*DLookUp("[сумЦенаЗаЕдМатСмет]";"сумматпоз";"идпозиции=" & Nz([Формы]![смета]![ИдПозиция];0));0) в запросе возвращает ноль, понятно что ссылка идет на форму, как это обойти?
Не нужно делать ссылку на форму. В самом запросе есть поле ид Позиция. Смотрите Запрос1
SQL
1
2
3
4
SELECT Смета.Ид, Смета.ИдСмета, Смета.[№ПП], Смета.ИдПозиция, Смета.Колво, ИдПозиция+ Смета.Колво AS s, 
Nz(DLookUp("[сумколНорм]","сумматпоз","идпозиции=" & Nz([ИдПозиция],0))*
DLookUp("[сумЦенаЗаЕдМатСмет]","сумматпоз","идпозиции=" & nz([ИдПозиция],0)),0) AS nnn
FROM Смета
Вложения
Тип файла: rar Database1.rar (72.2 Кб, 6 просмотров)
1
Эксперт MS Access
26828 / 14509 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.07.2014, 15:43
А решение с джойнами вместо лукапов будет побыстрее
SQL
1
2
3
SELECT Смета.Ид, Смета.ИдСмета, Смета.[№ПП], Смета.ИдПозиция, Смета.Колво, ИдПозиция+ Смета.Колво AS s,
      [сумколНорм]*[сумЦенаЗаЕдМатСмет] AS nnn
FROM Смета LEFT JOIN сумматпоз ON Смета.ИдПозиция=сумматпоз.идпозиции
Правда, запрос будет необновляемый. Что, наверное не годится для формы ввода
0
609 / 388 / 8
Регистрация: 14.04.2011
Сообщений: 1,324
22.07.2014, 16:20  [ТС]
подскажите почему при сложении в SQL я использую знак "+", результат выдает как строковое сложение?
т.е. если я складываю поля ЗатратыНаМатериалы и ЗатратыНаМашМех выходит такое:
0,12+3,00=0,123,00
как от этого избавиться?
заранее всем спасибо!
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12511 / 5085 / 814
Регистрация: 07.08.2010
Сообщений: 14,963
Записей в блоге: 4
22.07.2014, 16:28
значит по крайней мере одно из полей --символьное
или проблема с разделителем(точка-запятая)
1
609 / 388 / 8
Регистрация: 14.04.2011
Сообщений: 1,324
22.07.2014, 16:30  [ТС]
shanemac51, у складываемых полей формат "фиксированный" при помощи функции format()
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12511 / 5085 / 814
Регистрация: 07.08.2010
Сообщений: 14,963
Записей в блоге: 4
22.07.2014, 16:58
ЕСТЕСТВЕННО,

FORMAT переводит число в строку
1
609 / 388 / 8
Регистрация: 14.04.2011
Сообщений: 1,324
22.07.2014, 17:51  [ТС]
shanemac51, подскажите пожалуйста, как мне отформатировать числа, а то много знаков после запятой получается, а при отображении этих данных в форме, в свойствах этих полей, выпадает пустой список форматов?

Добавлено через 50 минут
и все же, кто мне ответит на вопрос? почему в примечании ленточной формы в поле прописываю формулу =sum(поле6) а мне акс возвращает #ошибка?
0
Эксперт MS Access
26828 / 14509 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.07.2014, 18:59
Лучший ответ Сообщение было отмечено sekonya как решение

Решение

Цитата Сообщение от sekonya Посмотреть сообщение
почему в примечании ленточной формы в поле прописываю формулу =sum(поле6) а мне акс возвращает #ошибка?
Наиболее вероятная причина в том, что Вы хотите суммировать вычисляемое поле. А суммировать можно только поля исходного запроса. Т.е. если [поле6] имеет источник в виде некоторой формулы из полей запроса, то надо в суммирующем поле писать все это выражение.
SQL
1
=SUM([ПолеЗапроса1]+[ПолеЗапроса2]-[ПолеЗапроса3])
1
609 / 388 / 8
Регистрация: 14.04.2011
Сообщений: 1,324
23.07.2014, 14:09  [ТС]
mobile, здравтсвуйте!
можете подсказать
у меня в форме 2 каскадных поля со списком, при выборе значения в первом поле со списком нужно чтобы во втором поле появилась первая запись из источника строк второго поля со списком...
т.е. если я выбираю страну "Россия" в первом списке, то во втором автоматически появляется "Москва"
заранее спасибо!
0
Эксперт MS Access
26828 / 14509 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
23.07.2014, 15:12
Вообще говоря, связанные списки создать легко. В коде на событии AfterUpdate первого кобобокса пишете (с поправкой на правильные имена)
Visual Basic
1
Me.ВтороКомбобокс.RowSource="select Поле1, Поле2 from Таблица where [Поле связи]=" & Me.ПервыйКомбобокс
Но! Есть существенное НО! Если форма табличная, то практически ничего не удастся сделать. Это сложно. Если форма ленточная, то можно сделать путем добавки скрытого поля и подмены им комбобокса. Тоже нелегко. А если форма простая, то никаких проблем.

Сложность в том, что для любых форм, в том числе многозаписных, контрол на форме ОДИН. И когда Вы меняете ему источник, то он меняется для всех записей в форме. А ведь для каждой записи в связанных комбо он должен быть разный, зависящий от значения первого комбо. Вот поэтому в простой форме все идет, а в многозаписных нет - получаются конфликты в записях.
1
609 / 388 / 8
Регистрация: 14.04.2011
Сообщений: 1,324
23.07.2014, 15:17  [ТС]
mobile, это вы задаете источник строк для второго комбобокса, а он у меня есть!
вопрос в том, чтобы во втором комбобоксе появилась первая запись источника строк, после обновления первого комбобокса...
0
Эксперт MS Access
26828 / 14509 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
23.07.2014, 15:22
Не уверен, что правильно понял.

Установить комбо на первую запись:
Visual Basic
1
Me.МойКомбобокс=Me.МойКомбобокс.Itemdata(0)
1
609 / 388 / 8
Регистрация: 14.04.2011
Сообщений: 1,324
23.07.2014, 15:59  [ТС]
mobile, спасибо огромное!

Добавлено через 33 минуты
mobile, еще маленький вопросик по организации БД
есть таблица "смета", смета делится на разделы (таблица "разделы"), а разделы в свою очередь делятся на позиции (таблица "позиции")...
но иногда смета не делится на разделы, а сразу делится на позиции... как в таком случае организовать схему данных?
0
Эксперт MS Access
26828 / 14509 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
23.07.2014, 16:59
Цитата Сообщение от sekonya Посмотреть сообщение
есть таблица "смета", смета делится на разделы (таблица "разделы"), а разделы в свою очередь делятся на позиции (таблица "позиции")...
но иногда смета не делится на разделы, а сразу делится на позиции... как в таком случае организовать схему данных?
Однозначного ответа я не знаю. Зависит от того, как в дальнейшем используются данные.

Но иногда можно прибегнуть к достаточно простому варианту, причем без какого-либо серьезного увеличения кода. В таблице Разделы образуем запись с "виртуальным" кодом не относящимся ни к одному фактическому разделу. И если Смета делится сразу на позиции без разделов, то пишем этот код. Все матобеспечение сохраняется, ничего добавлять не надо.
Единственно, могут быть трудности, если в справочнике Разделы код раздела типа Счетчик. Хотелось бы это "виртуальный" номер несуществующего раздела сделать выделяющимся из общей массы. Но это тоже нетрудно сделать. Например хотим присвоить "виртуальному" разделу номер 0. Счетчик начинается с 1, так что 0 это удобно
1. Пишем запрос
SQL
1
INSERT INTO Разделы (Код) VALUES(0)
Но теперь счетчик будет пытаться в следующей новой записи присвоить полю Код значение 1, а оно занято. Конфликт. Поэтому делаем еще один запрос
SQL
1
INSERT INTO Разделы (Код) VALUES(МаксимальноеЗначениеСчетчика+1)
Если теперь удалить эту запись с максимальным значением счетчика и сжать БД, то счетчик возвратится к нормальному счету

Вот такой вариант. Если он приемлем.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.07.2014, 16:59

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

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

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

Зависимые поля в форме Access, использование DLookUp
Добрый день! Имеется таблица Patient, в ней два поля - Fio (текстовое) и Address (тоже текстовое). Была создана форма Form2. В форме из...

Функция DLookUp не работает
Есть 2 таблицы - логины и продажа, стоит задача сделать мультиобновление Все логины заменить на Фамилии Использовал функцию DLookUp ,...


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru