Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2011, 23:12   #1
Dmitriy_Egorov
Пользователь
 
Регистрация: 24.03.2011
Сообщений: 19
По умолчанию Ошибка при выполнении функции DSum.

Подскажите, что не так в выражении с функцией Dsum.
Есть запрос "GlavKassaЗапрос", в него включено поле "VyrChistZ" из таблицы "AllKass", в этом же запросе создаю вычисляемое поле "Plan" и ввожу следующее выражение:

Plan: DSum("VyrChistZ";"GlavKassaЗапрос")

где "VyrChistZ" - поле, для которого нужно вычислить сумму, а "GlavKassaЗапрос" - имя запроса.
но при выполнении запроса выскакивает ошибка:

"Введенное в качестве параметра выражение вызывает ошибку: Приложению Microsoft Access не удается найти имя "GlavKassa запрос" из этого выражения.
Dmitriy_Egorov вне форума Ответить с цитированием
Старый 13.08.2011, 02:33   #2
satka
Форумчанин
 
Регистрация: 17.07.2011
Сообщений: 145
По умолчанию

если вам нужно суммирование поля VyrChistZ из таблицы AllKass то не легче ли так
SELECT Sum(AllKass.VyrChistZ) AS [Sum-VyrChistZ]
FROM AllKass;
или так
SELECT DSum("[VyrChistZ]","GlavKassaЗапрос") AS Plan, AllKass.VyrChistZ
FROM AllKass;
но это не нужный вызов одинаковых полей, зачем??
если просто показать на форме сумму в VBA
"какое-то поле".value = = DSum("[VyrChistZ]", "AllKass")

Последний раз редактировалось satka; 13.08.2011 в 03:10.
satka вне форума Ответить с цитированием
Старый 16.08.2011, 01:48   #3
Dmitriy_Egorov
Пользователь
 
Регистрация: 24.03.2011
Сообщений: 19
По умолчанию

Подскажите пож-ста, как создать вычисляемое поле в форме используя третий вариант, т.к. я не знаю VBA.
Я создал поле в форме, на вкладке данные открыл построитель выражений и вставил это выражение:
"какое-то поле".value = = DSum("[VyrChistZ]", "AllKass")
а какое поле надо указать в первых кавычках? На вкладке макет для вычисляемого поля стоит "Plan", я пробовал вставить название этого поля, но выскакивает ошибка
Введенное выражение содержит ошибочные операторы "." (точка), "!" или скобки.
Задан ошибочный идентификатор или добавлены скобки после константы Null.

Подскажите, что не так делаю.
Dmitriy_Egorov вне форума Ответить с цитированием
Старый 16.08.2011, 02:44   #4
satka
Форумчанин
 
Регистрация: 17.07.2011
Сообщений: 145
По умолчанию

1. Выделяем поле —> Вкладка данные —> Данные, пишите = Dsum ... и так далее
2. На событие; например: Загрузка формы, перход по записям
Выделяете форму —> Вкладка События —> Загрузка (Текущая запись) —> ... (три точки) —> программы —> Дописываете в процедуру (Посередине) имяполякотороевысоздали.value = Dsum ... и так далее
3. Либо как сделал бы я, надпись создаём, смотрим имя на вкладке Другие, далле по варианту 2, только в процедуре пишем, имянадписи.Caption = "Сумма денех в самой главной кассе" + Str(Dsum ...)
Как-то так

Последний раз редактировалось satka; 16.08.2011 в 02:49.
satka вне форума Ответить с цитированием
Старый 17.08.2011, 01:04   #5
Dmitriy_Egorov
Пользователь
 
Регистрация: 24.03.2011
Сообщений: 19
По умолчанию

Подскажи пож-ста, а второй и первый пункт обязательно вместе делать или можно один из них.
Как я понимаю, второй пункт позволит обновлять данные при определенных действиях (при загрузке формы, при переходе по полям в форме) это было бы весьма кстати.
У меня вот еще несколько вопросов:
1. В предложенных тобой вариантах данные берутся напрямую из таблиц. При этом сумма по полю "VyrChistZ" включает данные за все даты, которые есть в таблице "AllKass" (я поэтому и хотел вычисляемое поле "Plan" создать в самом запросе, который бы отбирал данные только за определенную дату), но функция DSum позволяет ввести условия отбора данных. Вот я и хочу спросить, как задать такое условие, что данные отбирались только для той даты, запись которой активна в настоящий момент. Т.е. я открываю главную форму и создаю новую запись, в поле дата ввожу дату (например текущую), потом в подчиненной форме ввожу данные по кассам (это таблица "AllKass", в которой находится поле "VyrChistZ").
Или может быть задать такое условие в запросе и указать для функции DSum не таблицу, а запрос.
2. И еще вопрос. Поле "VyrChistZ" - это только одно поле, к которому применена функция DSum, а если будут еще поля, к которым надо применить эту функию, что бы бралась сумма по одному полю потом по другому и складывались друг с другом. Как правильно перечислить эти поля для функции?
Dmitriy_Egorov вне форума Ответить с цитированием
Старый 17.08.2011, 02:42   #6
satka
Форумчанин
 
Регистрация: 17.07.2011
Сообщений: 145
По умолчанию

1.да лучше запрос в котором условием для даты будет значение поля формы (может ещё что-то), и на событие "вешаем" вычислять поле суммы, при исполнении события запрос будет вычислять значение, из него присваивать значение полю, то есть условие отбора конечно можно указать в функции Dsum, но лучше сделать под это дело запрос, а ещё лучше в самом запросе сделать группировку Sum, тогда функция Dfirst (вроде так), она возвратить первое найденое значение, и если запрос выводит одно поле, то оно же и будет возвращаться в фукции
2. так в чем проблема? Функция Dsum возвращает сумму значений поля, можно и так писать поле.value = Dfirst("[Поле1]","Таблица") + Dsum("[Поле2]","Таблица", "Поле3 = " & переменная)
как-то так

Последний раз редактировалось satka; 17.08.2011 в 02:54.
satka вне форума Ответить с цитированием
Старый 18.08.2011, 00:20   #7
Dmitriy_Egorov
Пользователь
 
Регистрация: 24.03.2011
Сообщений: 19
По умолчанию

Дело в том, что я уже пробовал применять группировку Sum в запросе, но в в этом случае форма созданная на этом запросе не позволяет вводить данные, может я что то не так делал, но как только отключил группировку форма заработала. Еще я не понял зачем функция DFirst.
И по пункту 2 тоже не понял. Функция Dfirst возвращает нам первое значение некоторого поля (я никак не пойму зачем, ведь это только первое значение, мне нужна сумма значений) и прибавляет к нему сумму значений другого (поле 2, ну это понятно), а в "поле3" нужно указать поле в которое будет выводиться результат?
А нельзя сделать так =Dsum ("[Поле1]","Таблица1")+Dsum("[Поле2","Таблица1") или вот так =Dsum(("[Поле1]","Таблица1")+("[Поле2","Таблица1"))
Dmitriy_Egorov вне форума Ответить с цитированием
Старый 18.08.2011, 03:46   #8
satka
Форумчанин
 
Регистрация: 17.07.2011
Сообщений: 145
По умолчанию

Да ну ёшь твою ять... Прошу прощения, я спокоен.
К форме подключается запрос (первый), это первое. Второе , на основании первого запроса делаем второй, и в ём делаем группировку, и пусть он выводит одно поле, которое и будет сумма по кассам, следом за этими вообщем-то нехитрыми действиями, делаем поле, на событие (любое на выбор), пишем (в процедуре события) полекотороесделали.Value = Dfirst("[поле_вывода_суммы]", "второй_запрос"), ента хфункция, как уже говорилось ранее, и вернёт нам значение поля из запроса второго. Работает это так:
Открываеться форма пишем в неё всякую ересь, включая и суммы которые надо подсчитать, опосля, что-то делаем чтоб запустить событие (кнопку жимаем, али просто на изменение данных в полях что мы вводим, или ещё чего), событие начинает выполняться, вот тут сложный момент, данные записываются в таблицу не сразу, а после определённых действий, переход на следующюю запись, переход на новую, команда DoCmd.RunCommand acCmdSaveRecord перед присваиванием полю значения решит эту проблему, так вот событие сохранит записи, вызовет запрос второй, он вызовет запрос первый, и присвоит полю значение полученое в запросе втором. Если я правильно понял задачу: Вуаля мы имеем поле с суммой.
А по поводу
Цитата:
Сообщение от Dmitriy_Egorov Посмотреть сообщение
А нельзя сделать так =Dsum ("[Поле1]","Таблица1")+Dsum("[Поле2","Таблица1") или вот так =Dsum(("[Поле1]","Таблица1")+("[Поле2","Таблица1"))
А почему бы не попробовать вдруг это то что вам надо?

Последний раз редактировалось satka; 18.08.2011 в 03:49.
satka вне форума Ответить с цитированием
Старый 18.08.2011, 06:48   #9
Woodlin
Форумчанин
 
Регистрация: 30.03.2010
Сообщений: 153
По умолчанию

Прошу прощения за то что вклиниваюсь в беседу.
Dmitriy_Egorov, может Вам в конечном итоге нужно посчитать сумму значений в поле формы (сумму значений с "столбце", если форма табличного типа)?

Последний раз редактировалось Woodlin; 18.08.2011 в 06:51.
Woodlin вне форума Ответить с цитированием
Старый 19.08.2011, 00:40   #10
Dmitriy_Egorov
Пользователь
 
Регистрация: 24.03.2011
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Woodlin Посмотреть сообщение
Прошу прощения за то что вклиниваюсь в беседу.
Dmitriy_Egorov, может Вам в конечном итоге нужно посчитать сумму значений в поле формы (сумму значений с "столбце", если форма табличного типа)?
Да форма не табличная.
Dmitriy_Egorov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при выполнении запроса dima_r SQL, базы данных 6 14.04.2011 17:47
Ошибка при выполнении 123cmp Помощь студентам 4 22.01.2011 23:45
Странная ошибка при выполнении okolobaxa Общие вопросы Delphi 2 03.07.2007 00:47
Ошибка при выполнении запроса Elena БД в Delphi 3 14.06.2007 15:13
Ошибка при выполнении запроса Elena БД в Delphi 2 25.05.2007 16:19