Программы "Простой софт" www.prostoysoft.ru

ВНИМАНИЕ! РЕКЛАМНЫЕ СООБЩЕНИЯ И ГИПЕРССЫЛКИ В ФОРУМЕ ЗАПРЕЩЕНЫ (посты удаляются автоматически часто с пользователем)
Текущее время: 28.10.2024 19:19

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Триггер на DATEDIFF
СообщениеДобавлено: 25.09.2013 11:20 
Не в сети

Зарегистрирован: 10.07.2013 09:38
Сообщения: 48
Не получается вычислить разницу в днях между датами.
В таблице tblRashody пытаюсь это сделать с помощью триггера:
UPDATE tblRashody SET DneyOtsr = Select DATEDIFF (dd, <PredData>, <Data>)
Тот же результат в представлении qdfRashodyRasch в вычисляемом поле Data2Calc ругается на формулу:
Select DATEDIFF (dd, PredData, Data).


Вложения:
скрин 2.jpg
скрин 2.jpg [ 329.72 КБ | Просмотров: 73235 ]
скрин 1.jpg
скрин 1.jpg [ 278.58 КБ | Просмотров: 73235 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 25.09.2013 13:48 
Не в сети

Зарегистрирован: 10.07.2013 09:38
Сообщения: 48
И ещё вопрос который меня давно интересует про триггеры, существует ли возможность сделать триггер, который бы пересчитывал все строчки поля по формуле, указанной по умолчанию в свойствах поля? Грубо говоря обновлял бы значения строчек поля?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 25.09.2013 14:08 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Попробуйте так:
UPDATE tblRashody SET DneyOtsr = DATEDIFF('d', <PredData>, <Data>)

И где часть WHERE? Или вы хотите, чтобы у вас обновились все записи?

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 25.09.2013 14:36 
Не в сети

Зарегистрирован: 10.07.2013 09:38
Сообщения: 48
Да, хотел бы чтобы обновлялось все поле, но для каждой строчки значение бы высчитывалось отдельно.
В представлении эта формула не работает.
А в триггере вставляет одно и то же значение во все ячейки поля, либо при прописывании условия по ID вставляет только в одну ячейку, что логично.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 25.09.2013 15:18 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Да, все так.
Инструкция на обновление UPDATE ... SET не может "работать в представлении" (которое типа SELECT... FROM).
Если вам нужно обновить все записи таблицы, а не текущую, то так:
UPDATE tblRashody SET DneyOtsr = DATEDIFF('d', PredData, Data)

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 25.09.2013 15:51 
Не в сети

Зарегистрирован: 10.07.2013 09:38
Сообщения: 48
Т.е. в представлении в вычисляемом поле это никак не сделать?
И ещё заметил, триггер UPDATE tblRashody SET DneyOtsr = DATEDIFF('d', PredData, Data) - работает как мне надо, но если PredData заменить на выражение (Select ..... From..... - формулу по которой высчитывается PredData), то в триггере предыдущая дата становится одно число для всего поля опять таки, а не высчитывается каждый раз заново, можно ли как то сделать чтобы считалась каждый раз заново? Либо Как уже спросил ранее, есть ли возможность триггером обновить все поле по заданным формулам в умолчании??


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 25.09.2013 16:00 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
>Т.е. в представлении в вычисляемом поле это никак не сделать?
В представлении, в формуле вычисляемого поля вам надо убрать стартовый "select ", и формула из вашего первого скриншота должна работать.

>есть ли возможность триггером обновить все поле по заданным формулам в умолчании??
Нет.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 26.09.2013 08:57 
Не в сети

Зарегистрирован: 10.07.2013 09:38
Сообщения: 48
Убираю Select, не работает, ругается на неоднозначность имени столбца Data, при подставлении впереди tblRashody. либо qdfRashodyRasch. тоже не работает, ругается на неверный идентификатор.
'd' - и в кавычках и нет ничего не меняют, по крайней мере пока на Data ругается.
Либо подскажите в каком направлении мыслить в триггере:
UPDATE tblRashody SET DneyOtsr = ISNULL(DATEDIFF( 'd', (SELECT MIN(Data) FROM tblRashody WHERE Data > <Data> AND NomerIshod = <NomerIshod>), Data), 0)

Просто хотелось бы вообще избавиться от поля PredData? которое вычисляется по формуле:
(SELECT MIN(Data) FROM tblRashody WHERE Data > <Data> AND NomerIshod = <NomerIshod>)
Но триггер высчитывает эту дату 1 раз, а не для каждой строчки заново.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 26.09.2013 10:15 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Переименуйте поле Data в любое другое название, это похоже одно из запрещенных слов для имен объектов в MS SQL Server.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 01.10.2013 14:13 
Не в сети

Зарегистрирован: 10.07.2013 09:38
Сообщения: 48
Да, переименовал, помогло, Спасибо.
Но как мне сделать обновляемым поле PredData?
В представлении qdfRashody пишу формулу:
(select top 1 Dat from tblRashody where Dat < tblRashody.Dat order by tblRashody.Dat desc) - и независимо оттого ставлю я везде перед названиями полей названия таблицы с точкой tblRashody. или qdfRashody., или не ставлю - все равно результат один - пустое поле, хотя вроде условия соблюдены, должна возвращаться одна дата.
Либо как в предыдущем сообщении написал, написать правильно триггер, это вообще возможно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 02.10.2013 19:31 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
>Но как мне сделать обновляемым поле PredData?
Обновляемым может быть только хранимое поле в случае, если вся таблица не является необновляемым представлением.

>В представлении qdfRashody пишу формулу...
>все равно результат один - пустое поле
Где именно пишите формулу?
Как именно выглядит "пустое поле".

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 03.10.2013 09:21 
Не в сети

Зарегистрирован: 10.07.2013 09:38
Сообщения: 48
Приложил скриншот, на нем пытаюсь и триггером вывести предыдущую дату и вычисляемым полем.
Вычисляемое поле - пустое, хотя вроде формула написана верно, должно выводиться только одно значение.
Мне нужно чтобы для каждой записи выводилась своя предыдущая дата, соответствующая этой записи.


Вложения:
скрин.jpg
скрин.jpg [ 366.08 КБ | Просмотров: 73056 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 03.10.2013 11:35 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
А где в триггере уточнение текущей записи в запросе типа WHERE ID = <ID> ?

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 03.10.2013 12:26 
Не в сети

Зарегистрирован: 10.07.2013 09:38
Сообщения: 48
если я пишу условие для триггера, то он срабатывает под это условие - если ID = <ID> - то только в данной записи, остальные не тронуты, но ведь если добавить записи задним числом, тогда для других записей уже будут неактуальные значения.
Мне нужно чтобы триггер обновил все поле с датами, так как если бы я в триггере написал обычную формулу умножения к примеру - то результат высчитывается для каждой записи свой. Вот и хочу того же добиться в данном случае.
Мне без разницы как этого добиться, главное результат, либо через триггер, либо через вычисляемое поле, либо ещё как то....
Но что то не получается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Триггер на DATEDIFF
СообщениеДобавлено: 04.10.2013 11:54 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Вы можете обратиться к нам с копией вашей БД и подробным описанием данной задачи в отдельном Word-документе. Мы рассмотрим и предложим вам сумму за реализацию. Возможно, придется доработать программу.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB