Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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(); } } это практичное решение. Потому как ежли в базе повесишь вызов процедуры в триггер вызываемый при обновлении то пока не откоммитишся он не сработает, врядли пользователь будет доволен, им все сразу подай  Ну а если все-таки через базу то что-то типа: 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) ) ) |
|
Вернуться к началу |
|
 |
|