Форум: "Базы";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];
ВнизСовместное использование IDENTITY в MSSQL и TDataSet Найти похожие ветки
← →
AlexL (2002-12-12 05:27) [0]Народ!
Общая ситуация:
Есть таблица в MSSQL с ключевым полем Id, имеющим тип int IDENTITY(1, 1) (Primary Index), и есть TDataSet по этой таблице.
Возникла следующая проблема:
При попытке добавления данных в указанный TDataSet возникает ошибка, что полю Id нельзя присвоить значение. Менял тип указанного поля в TDataSet на ptIncrement - результат тот же.
← →
KSergey (2002-12-12 09:23) [1]А этому полю программно присваивается значение?
← →
Shaman (2002-12-12 10:15) [2]Я недавно сам с этим парился, здесь спрашивал, но никто ничего так и не сказал. Похоже ситуация штатным путем не решается. Перестроил программу так, что записи добавляются SQL-запросом. Как вариант можно открывать DataSet как SQL-запрос и в числе выбираемых полей Id не указывать, тогда при добавлении записей ошибки не возникает, но не всегда такой вариант приемлем.
Ежели че другое придумаешь, дай знать.
← →
wicked (2002-12-12 11:50) [3]как вариант - сменить FieldKind поля Id с fkData на fkInternalCalc... у меня такое срабатывало с TBetterADODataSet, возможно, сработает и с другими DataSet"ами....
естественно, речь идёт НЕ о BDE....
← →
Севостьянов Игорь (2002-12-12 12:32) [4]Что-то я не пойму автора вопроса
Интересно как ты в ДатаСет добавляешь запись - не принцип, а код ?
И еще объясни мне - зачем существет понятие IDENTITY (@@IDENTITY) ?
Насколько мне известно - это поле должно формироваться самим SQL Server"ом
@@IDENTITY
Returns the last-inserted identity value.
Syntax
@@IDENTITY
Return Types
numeric
Remarks
After an INSERT, SELECT INTO, or bulk copy statement completes, @@IDENTITY contains the last identity value generated by the statement. If the statement did not affect any tables with identity columns, @@IDENTITY returns NULL. If multiple rows are inserted, generating multiple identity values, @@IDENTITY returns the last identity value generated. If the statement fires one or more triggers that perform inserts that generate identity values, calling @@IDENTITY immediately after the statement returns the last identity value generated by the triggers. The @@IDENTITY value does not revert to a previous setting if the INSERT or SELECT INTO statement or bulk copy fails, or if the transaction is rolled back.
@@IDENTITY, SCOPE_IDENTITY, and IDENT_CURRENT are similar functions in that they return the last value inserted into the IDENTITY column of a table.
@@IDENTITY and SCOPE_IDENTITY will return the last identity value generated in any table in the current session. However, SCOPE_IDENTITY returns the value only within the current scope; @@IDENTITY is not limited to a specific scope.
IDENT_CURRENT is not limited by scope and session; it is limited to a specified table. IDENT_CURRENT returns the identity value generated for a specific table in any session and any scope. For more information, see IDENT_CURRENT.
Examples
This example inserts a row into a table with an identity column and uses @@IDENTITY to display the identity value used in the new row.
INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ("Accountant",12,125)
SELECT @@IDENTITY AS "Identity"
See Also
CREATE TABLE
IDENT_CURRENT
INSERT
SCOPE_IDENTITY
SELECT
System Functions
← →
Севостьянов Игорь (2002-12-12 12:37) [5]Ну нельзя добавлять IDENTITY И все тут
Единственный способ все-таки добавить такую запись это -
SET IDENTITY_INSERT Таблица ON -- отключить
INSERT INTO Таблица (поля) VALUES (значения)
SET IDENTITY_INSERT Таблица OFF -- включить
← →
Севостьянов Игорь (2002-12-12 12:37) [6]И не забудь об уникальности ключа ...
← →
wicked (2002-12-12 12:41) [7]2 Севостьянов Игорь ©
хех, а никто и не говорит, что сам добавляет туда значения....
говорится о том, что датасет сам при сохранении вставленой записи присваивает некое значение этому полю... и хорошо еще, что mssql ole db провайдер не пропускает такие штуки... с jet"ом в 100 раз хуже - он забивал туда значение, переданное из приложения...
приходилось выкручиваться с помощью fkInternalCalc...
← →
Cheshit (2002-12-13 18:22) [8]Поставьте в TDataSet AutoRefresh=True
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c