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

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

15.07.2014, 07:31. Показов 4802. Ответов 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,959
Записей в блоге: 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,959
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru