Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.13;
Скачать: CL | DM;

Вниз

В MSSQL   Найти похожие ветки 

 
___Nikolay ©   (2003-12-13 10:45) [0]

В MSSQL создаю автоинкрементное поле указав его как Identity Column, при мануальном заполнении счетчик отрабатывается, при программном - пишет, что поле ID должно иметь значение, но

Table.FieldByName("ID").AsInteger := ..

выдает оштбку, т.к. поле автоинкрементное!
Возможно не достает триггера..

До этого работал, под Interbase/FireBird
Подскажите пожалуйста как в MSSQL с "генераторами" работать?


 
sniknik ©   (2003-12-13 11:09) [1]

а ты туда ничего не вноси, он на то и автоинкремент сам установится.
если при редактировании в гриде тоже выдает, то у поля укажи (попробуй его прописать руками там видно. двойной клик по датасету) что оно AutoInc и все.


 
___Nikolay ©   (2003-12-13 11:51) [2]

"AutoInc" я указывал в окне свойств таблицы MSSQL MMC (в консоле)
Там конкретно "AutoInc" написано не было.. был список целочисленных полей и заголовок Identity Column, после того как я выбрал из списка ID - это поле начало само заполняться при заполнении таблицы в той же консоли "ручками", но может это не "AutoInc" или что? Если при выполнении кода

with Table do
begin
Append;
// ID не заполняю !!!
FieldByName("").As...
FieldByName("").As...
FieldByName("").As...
Post;
end;

вываливается ошибка, что "полю ID должно быть присвоено значение"

Как можно написать триггер на MSSQL аналогичный Interbase

CREATE TRIGGER AI_TASKS_ID FOR TASKS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(GEN_ID_TASKS, 1);
END

Как в MSSQL называется NEW? (GEN_ID, видимо, вообще нет..)
Подскажите pls!.........


 
elena_mm   (2003-12-13 13:00) [3]

Если поле идентити, то ничего не нужно делать лишнего, тригеров в том числе, оно работает автоматически.


 
JibSkeart ©   (2003-12-13 13:14) [4]

Действительн
зачем какието лишние махинации с табличкой .
если поле автоинкреиментное .


 
sniknik ©   (2003-12-13 13:32) [5]

JibSkeart © (13.12.03 13:14) [4]
"махинации" нужны в какихто случаях, не всегда компоненты понимают что поле автоинкрементное (не сталкивался но вопросы видел, понимаю так бывает от длинных связок MSSQL->ODBC->BDE->Table или/и старых драйверов) и пытаются записать туда значение или Null если значения нет.
(если смотреть в профайлере то Table генерирует запрос типа INSERT INTO xxxx (ID, ....) VALUES (Null, ...))
в этом случае надо явно указывать что значения не нужно.
обычно и так понимают.


 
JibSkeart ©   (2003-12-13 13:35) [6]

хмм это действительно странно.


 
Evgeny V ©   (2003-12-13 13:47) [7]

Для поля ID в редакторе полей для Table посмотри свойство Required, если true, поставь false


 
____Nikolay   (2003-12-14 10:14) [8]

2 Evgeny V
Не получилось :(

2 ALL
Спасибо!
После того, как использовал ADO, все нормально заработало



Страницы: 1 вся ветка

Текущий архив: 2004.01.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
4-37990
Ranger
2003-11-10 18:33
2004.01.13
Создание диалога


1-37760
andruxin
2003-12-29 17:22
2004.01.13
Как разукрасить TListView.


1-37645
Mike_forewer
2003-12-27 02:46
2004.01.13
Resource Editor


1-37742
Ego
2003-12-30 08:27
2004.01.13
Вставить фрейм


14-37921
Ломброзо
2003-12-20 17:54
2004.01.13
Ваши соображения по архитектуре?