|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.08.2011, 23:12 | #1 |
Пользователь
Регистрация: 24.03.2011
Сообщений: 19
|
Ошибка при выполнении функции DSum.
Подскажите, что не так в выражении с функцией Dsum.
Есть запрос "GlavKassaЗапрос", в него включено поле "VyrChistZ" из таблицы "AllKass", в этом же запросе создаю вычисляемое поле "Plan" и ввожу следующее выражение: Plan: DSum("VyrChistZ";"GlavKassaЗапрос") где "VyrChistZ" - поле, для которого нужно вычислить сумму, а "GlavKassaЗапрос" - имя запроса. но при выполнении запроса выскакивает ошибка: "Введенное в качестве параметра выражение вызывает ошибку: Приложению Microsoft Access не удается найти имя "GlavKassa запрос" из этого выражения. |
13.08.2011, 02:33 | #2 |
Форумчанин
Регистрация: 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. |
16.08.2011, 01:48 | #3 |
Пользователь
Регистрация: 24.03.2011
Сообщений: 19
|
Подскажите пож-ста, как создать вычисляемое поле в форме используя третий вариант, т.к. я не знаю VBA.
Я создал поле в форме, на вкладке данные открыл построитель выражений и вставил это выражение: "какое-то поле".value = = DSum("[VyrChistZ]", "AllKass") а какое поле надо указать в первых кавычках? На вкладке макет для вычисляемого поля стоит "Plan", я пробовал вставить название этого поля, но выскакивает ошибка Введенное выражение содержит ошибочные операторы "." (точка), "!" или скобки. Задан ошибочный идентификатор или добавлены скобки после константы Null. Подскажите, что не так делаю. |
16.08.2011, 02:44 | #4 |
Форумчанин
Регистрация: 17.07.2011
Сообщений: 145
|
1. Выделяем поле —> Вкладка данные —> Данные, пишите = Dsum ... и так далее
2. На событие; например: Загрузка формы, перход по записям Выделяете форму —> Вкладка События —> Загрузка (Текущая запись) —> ... (три точки) —> программы —> Дописываете в процедуру (Посередине) имяполякотороевысоздали.value = Dsum ... и так далее 3. Либо как сделал бы я, надпись создаём, смотрим имя на вкладке Другие, далле по варианту 2, только в процедуре пишем, имянадписи.Caption = "Сумма денех в самой главной кассе" + Str(Dsum ...) Как-то так Последний раз редактировалось satka; 16.08.2011 в 02:49. |
17.08.2011, 01:04 | #5 |
Пользователь
Регистрация: 24.03.2011
Сообщений: 19
|
Подскажи пож-ста, а второй и первый пункт обязательно вместе делать или можно один из них.
Как я понимаю, второй пункт позволит обновлять данные при определенных действиях (при загрузке формы, при переходе по полям в форме) это было бы весьма кстати. У меня вот еще несколько вопросов: 1. В предложенных тобой вариантах данные берутся напрямую из таблиц. При этом сумма по полю "VyrChistZ" включает данные за все даты, которые есть в таблице "AllKass" (я поэтому и хотел вычисляемое поле "Plan" создать в самом запросе, который бы отбирал данные только за определенную дату), но функция DSum позволяет ввести условия отбора данных. Вот я и хочу спросить, как задать такое условие, что данные отбирались только для той даты, запись которой активна в настоящий момент. Т.е. я открываю главную форму и создаю новую запись, в поле дата ввожу дату (например текущую), потом в подчиненной форме ввожу данные по кассам (это таблица "AllKass", в которой находится поле "VyrChistZ"). Или может быть задать такое условие в запросе и указать для функции DSum не таблицу, а запрос. 2. И еще вопрос. Поле "VyrChistZ" - это только одно поле, к которому применена функция DSum, а если будут еще поля, к которым надо применить эту функию, что бы бралась сумма по одному полю потом по другому и складывались друг с другом. Как правильно перечислить эти поля для функции? |
17.08.2011, 02:42 | #6 |
Форумчанин
Регистрация: 17.07.2011
Сообщений: 145
|
1.да лучше запрос в котором условием для даты будет значение поля формы (может ещё что-то), и на событие "вешаем" вычислять поле суммы, при исполнении события запрос будет вычислять значение, из него присваивать значение полю, то есть условие отбора конечно можно указать в функции Dsum, но лучше сделать под это дело запрос, а ещё лучше в самом запросе сделать группировку Sum, тогда функция Dfirst (вроде так), она возвратить первое найденое значение, и если запрос выводит одно поле, то оно же и будет возвращаться в фукции
2. так в чем проблема? Функция Dsum возвращает сумму значений поля, можно и так писать поле.value = Dfirst("[Поле1]","Таблица") + Dsum("[Поле2]","Таблица", "Поле3 = " & переменная) как-то так Последний раз редактировалось satka; 17.08.2011 в 02:54. |
18.08.2011, 00:20 | #7 |
Пользователь
Регистрация: 24.03.2011
Сообщений: 19
|
Дело в том, что я уже пробовал применять группировку Sum в запросе, но в в этом случае форма созданная на этом запросе не позволяет вводить данные, может я что то не так делал, но как только отключил группировку форма заработала. Еще я не понял зачем функция DFirst.
И по пункту 2 тоже не понял. Функция Dfirst возвращает нам первое значение некоторого поля (я никак не пойму зачем, ведь это только первое значение, мне нужна сумма значений) и прибавляет к нему сумму значений другого (поле 2, ну это понятно), а в "поле3" нужно указать поле в которое будет выводиться результат? А нельзя сделать так =Dsum ("[Поле1]","Таблица1")+Dsum("[Поле2","Таблица1") или вот так =Dsum(("[Поле1]","Таблица1")+("[Поле2","Таблица1")) |
18.08.2011, 03:46 | #8 |
Форумчанин
Регистрация: 17.07.2011
Сообщений: 145
|
Да ну ёшь твою ять... Прошу прощения, я спокоен.
К форме подключается запрос (первый), это первое. Второе , на основании первого запроса делаем второй, и в ём делаем группировку, и пусть он выводит одно поле, которое и будет сумма по кассам, следом за этими вообщем-то нехитрыми действиями, делаем поле, на событие (любое на выбор), пишем (в процедуре события) полекотороесделали.Value = Dfirst("[поле_вывода_суммы]", "второй_запрос"), ента хфункция, как уже говорилось ранее, и вернёт нам значение поля из запроса второго. Работает это так: Открываеться форма пишем в неё всякую ересь, включая и суммы которые надо подсчитать, опосля, что-то делаем чтоб запустить событие (кнопку жимаем, али просто на изменение данных в полях что мы вводим, или ещё чего), событие начинает выполняться, вот тут сложный момент, данные записываются в таблицу не сразу, а после определённых действий, переход на следующюю запись, переход на новую, команда DoCmd.RunCommand acCmdSaveRecord перед присваиванием полю значения решит эту проблему, так вот событие сохранит записи, вызовет запрос второй, он вызовет запрос первый, и присвоит полю значение полученое в запросе втором. Если я правильно понял задачу: Вуаля мы имеем поле с суммой. А по поводу А почему бы не попробовать вдруг это то что вам надо? Последний раз редактировалось satka; 18.08.2011 в 03:49. |
18.08.2011, 06:48 | #9 |
Форумчанин
Регистрация: 30.03.2010
Сообщений: 153
|
Прошу прощения за то что вклиниваюсь в беседу.
Dmitriy_Egorov, может Вам в конечном итоге нужно посчитать сумму значений в поле формы (сумму значений с "столбце", если форма табличного типа)? Последний раз редактировалось Woodlin; 18.08.2011 в 06:51. |
19.08.2011, 00:40 | #10 |
Пользователь
Регистрация: 24.03.2011
Сообщений: 19
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при выполнении запроса | 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 |