![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В MSSQL
___Nikolay © (2003-12-13 10:45:00)
В MSSQL создаю автоинкрементное поле указав его как Identity Column, при мануальном заполнении счетчик отрабатывается, при программном - пишет, что поле ID должно иметь значение, но
Table.FieldByName("ID").AsInteger := ..
выдает оштбку, т.к. поле автоинкрементное!
Возможно не достает триггера..
До этого работал, под Interbase/FireBird
Подскажите пожалуйста как в MSSQL с "генераторами" работать?
____Nikolay (2003-12-14 10:14:00) [1]
2 Evgeny V
Не получилось :(
2 ALL
Спасибо!
После того, как использовал ADO, все нормально заработало
Evgeny V (2003-12-13 13:47:00) [2]
Для поля ID в редакторе полей для Table посмотри свойство Required, если true, поставь false
JibSkeart (2003-12-13 13:35:00) [3]
хмм это действительно странно.
sniknik (2003-12-13 13:32:00) [4]
JibSkeart © (13.12.03 13:14) [4]
"махинации" нужны в какихто случаях, не всегда компоненты понимают что поле автоинкрементное (не сталкивался но вопросы видел, понимаю так бывает от длинных связок MSSQL->ODBC->BDE->Table или/и старых драйверов) и пытаются записать туда значение или Null если значения нет.
(если смотреть в профайлере то Table генерирует запрос типа INSERT INTO xxxx (ID, ....) VALUES (Null, ...))
в этом случае надо явно указывать что значения не нужно.
обычно и так понимают.
JibSkeart (2003-12-13 13:14:00) [5]
Действительн
зачем какието лишние махинации с табличкой .
если поле автоинкреиментное .
elena_mm (2003-12-13 13:00:00) [6]
Если поле идентити, то ничего не нужно делать лишнего, тригеров в том числе, оно работает автоматически.
___Nikolay (2003-12-13 11:51:00) [7]
"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!.........
sniknik (2003-12-13 11:09:00) [8]
а ты туда ничего не вноси, он на то и автоинкремент сам установится.
если при редактировании в гриде тоже выдает, то у поля укажи (попробуй его прописать руками там видно. двойной клик по датасету) что оно AutoInc и все.