Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Как повесить хранимую процедуру на поле таблицы?

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
Takhir
Гость





СообщениеДобавлено: Пн Фев 17 2003 13:52    Заголовок сообщения: Как повесить хранимую процедуру на поле таблицы? Ответить с цитатой

Как повесить хранимую процедуру на поле таблицы? Процедура берет значение соседнего поля и определенным образом обрабатывает его.
Вернуться к началу
Karabas
Гость





СообщениеДобавлено: Пн Фев 17 2003 14:58    Заголовок сообщения: Re: Как повесить хранимую процедуру на поле таблицы? Ответить с цитатой

Если ты в форме хочешь, то например на OnExit твоего поля ввода(Поле_Источник):
if (DBEdit1->Modified) {
IBStoredProc1->Prepare();
try {
...FieldByName("Поле_Источник")->... = IBStoredProc1->ParamByName("MY_INPUT_PARAMETER")->As...;

IBStoredProc1->ExecProc();

...FieldByName("Поле_Получатель")->... = IBStoredProc1->ParamByName("MY_OUTPUT_PARAMETER")->As...;

}
__finally {
IBStoredProc1->UnPrepare();
}
}
это практичное решение. Потому как ежли в базе повесишь вызов процедуры в триггер вызываемый при обновлении то пока не откоммитишся он не сработает, врядли пользователь будет доволен, им все сразу подай Smile
Ну а если все-таки через базу то что-то типа:
SET TERM !! ;
CREATE TRIGGER NEW_VALUE_POLE2 FOR MY_TABLE ACTIVE BEFORE UPDATE POSITION AS
BEGIN
EXECUTE PROCEDURE MY_PROC NEW.POLE_ISTOZNIK RETURNING_VALUES NEW.POLE_PRIEMNIK;
END !!
SET TERM ; !!
Вернуться к началу
Takhir
Гость





СообщениеДобавлено: Пн Фев 17 2003 15:01    Заголовок сообщения: Re: Как повесить хранимую процедуру на поле таблицы? Ответить с цитатой

Mne nado na tablicu SQL-servera. V Table Design mozhno propisatj proceduru? ili sdelatj 4to-to tipa vi4islimogo polja. Form nikakih net.
Вернуться к началу
Valera
Гость





СообщениеДобавлено: Вт Фев 18 2003 05:40    Заголовок сообщения: Re: Как повесить хранимую процедуру на поле таблицы? Ответить с цитатой

Процедуру повесить на поле нельзя.
Можно только триггер для таблицы.
А вообще зачем это нужно?
В любой момент ты нужные вычисления в селекте можешь сделать.
Вернуться к началу
Takhir
Гость





СообщениеДобавлено: Вт Фев 18 2003 09:24    Заголовок сообщения: Re: Как повесить хранимую процедуру на поле таблицы? Ответить с цитатой

Думаю, это неоптимально. Поставим вопрос по-другому. Хранимая процедура использует char-данные из одного поля, работает с ними, используя GETDATE(), и записывает (возвращает) int в другое поле. Пользоветельскую функцию не могу написать, так как SQL не допускает в ней использование GETDATE(). Как сделать без банального SELECTa?
Вернуться к началу
Valera
Гость





СообщениеДобавлено: Вт Фев 18 2003 09:41    Заголовок сообщения: Re: Как повесить хранимую процедуру на поле таблицы? Ответить с цитатой

напиши триггер на insert, update где и будешь вызывать свою процедуру чтобы поля менять, если так хочешь.

Возникнет вопрос синхронизации данных.
Если поменяешь char поле, надо менять и int.
Причем это надо предусмотреть во ВСЕХ программах способных менять данные в базе.
В конечном счете у тебя появятся 2 поля несущие информацию об одном и том же. И вдруг данные различаются? (и это будет поверь) Какому полю верить?
Вернуться к началу
Takhir
Гость





СообщениеДобавлено: Вт Фев 18 2003 09:43    Заголовок сообщения: Re: Как повесить хранимую процедуру на поле таблицы? Ответить с цитатой

А можно повесить процедуру на VIEW?
Вернуться к началу
Valera
Гость





СообщениеДобавлено: Вт Фев 18 2003 09:46    Заголовок сообщения: Возьми книжку и почитай что такое VIEW (+) Ответить с цитатой

VIEW - это запрос, тот же SELECT.
Вернуться к началу
Takhir
Гость





СообщениеДобавлено: Вт Фев 18 2003 09:50    Заголовок сообщения: Re: Возьми книжку и почитай что такое VIEW (+) Ответить с цитатой

ОК. Тогда так: можно написать пользовательскую функцию, которая вызывала бы мою процедуру? Как? И как тогда эту функцию повесить на поле? Как формулу?
Вернуться к началу
Valera
Гость





СообщениеДобавлено: Вт Фев 18 2003 09:52    Заголовок сообщения: никак (-) Ответить с цитатой

-
Вернуться к началу
Takhir
Гость





СообщениеДобавлено: Вт Фев 18 2003 09:54    Заголовок сообщения: Re: Возьми книжку и почитай что такое VIEW (+) Ответить с цитатой

A esli serjezno?
Вернуться к началу
smirnoffv
Гость





СообщениеДобавлено: Вт Фев 18 2003 17:35    Заголовок сообщения: Ответ на: "Re: Возьми книжку и почитай чт..- Takhir- 18-02-2003 09:54" Re: Как повесить хранимую Ответить с цитатой

CREATE FUNCTION CubicVolume
-- Input dimensions in centimeters
(@CubeLength decimal(4,1), @CubeWidth decimal(4,1),
@CubeHeight decimal(4,1) )
RETURNS decimal(12,3) -- Cubic Centimeters.
AS
BEGIN
RETURN ( @CubeLength * @CubeWidth * @CubeHeight )
END

Пользовательскую функцию можно повесить на поле как формулу в Enterprise Manager:
([dbo].[CubicVolume]([BrickHeight], [BrickLength], [BrickWidth]))

или скриптом

CREATE TABLE Bricks
(
BrickPartNmbr int PRIMARY KEY,
BrickColor nchar(20),
BrickHeight decimal(4,1),
BrickLength decimal(4,1),
BrickWidth decimal(4,1),
BrickVolume AS
(
dbo.CubicVolume(BrickHeight,
BrickLength, BrickWidth)
)
)
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...