Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ADO и SQL Server  [new]
AndreyJordan
Member

Откуда: Екатеринбург, Россия
Сообщений: 657
Работаю с SQL Server через ADO. Есть группа пользователей, которые в один и тот же промежуток времени начинают циклично добавлять данные в одну и ту же таблицу (порядка 10000 записей каждый пользователь). Регулярно вылетает ошибка: EDatabaseError error raised, with message : Violation of PRIMARY KEY constraint 'PK_CommandsContent'. Cannot insert duplicate key in object 'dbo.CommandsContent'. Т.е. 2 пользователя пытаются сохранить запись с одним и тем же ID.
Приложение написано на Delphi. В датасете используется Серверный курсор с типом блокировки Optimistic. ID = PRIMARY KEY.
Проблема в типе блокировки? Или еще что-либо надо учесть.
Заранее благодарю
26 май 11, 11:09    [10711462]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Проблема в вашем приложении, которое зачем-то пытается вставить дубликаты.
26 май 11, 11:11    [10711484]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
AndreyJordan,

Тоже пишу на Delphi.
Тип ID = integer? Как он формируется?
26 май 11, 11:24    [10711595]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
AndreyJordan
Работаю с SQL Server через ADO. Есть группа пользователей, которые в один и тот же промежуток времени начинают циклично добавлять данные в одну и ту же таблицу (порядка 10000 записей каждый пользователь). Регулярно вылетает ошибка: EDatabaseError error raised, with message : Violation of PRIMARY KEY constraint 'PK_CommandsContent'. Cannot insert duplicate key in object 'dbo.CommandsContent'. Т.е. 2 пользователя пытаются сохранить запись с одним и тем же ID.
Приложение написано на Delphi. В датасете используется Серверный курсор с типом блокировки Optimistic. ID = PRIMARY KEY.
Проблема в типе блокировки? Или еще что-либо надо учесть.
Заранее благодарю
Покажи скрипт таблицы CommandsContent...
26 май 11, 11:58    [10711909]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
VGalamakh
Member

Откуда: Киев (Альба)
Сообщений: 66
Ваше приложение само определяет ключевое поле, а нужно это делать средствами SQL.
26 май 11, 12:03    [10711956]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
AndreyJordan
Member

Откуда: Екатеринбург, Россия
Сообщений: 657
Начинающий SQL 2008,

ID - integer

Значение формируется автоматически (Спец. идентификатора)
26 май 11, 13:55    [10712946]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
AndreyJordan
Начинающий SQL 2008,

ID - integer

Значение формируется автоматически (Спец. идентификатора)
У тебя поле [ID] имеет IDENTITY ?
И какая формируется строка для вставки, покажи...
26 май 11, 13:59    [10712984]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
AndreyJordan
Member

Откуда: Екатеринбург, Россия
Сообщений: 657
Владимир СА
AndreyJordan
Начинающий SQL 2008,

ID - integer

Значение формируется автоматически (Спец. идентификатора)
У тебя поле [ID] имеет IDENTITY ?
И какая формируется строка для вставки, покажи...


Да IDENTITY (1,1)

В строке для вставки ID не фигурирует.
26 май 11, 14:20    [10713158]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
AndreyJordan
Member

Откуда: Екатеринбург, Россия
Сообщений: 657
AndreyJordan
Владимир СА
пропущено...
У тебя поле [ID] имеет IDENTITY ?
И какая формируется строка для вставки, покажи...


Да IDENTITY (1,1)

В строке для вставки ID не фигурирует.


Блин, извините, слажал. ID не Identity (была написана процедура формирования ID (когда-то так надо было)) .
Скорее всего проблема в этом.
Сегодня проверю.
26 май 11, 14:23    [10713177]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
AndreyJordan
Да IDENTITY (1,1)
В строке для вставки ID не фигурирует.
Еще раз прошу "Покажи скрипт таблицы CommandsContent..."
Если не знаешь что такое скрипт таблицы, например:
CREATE TABLE [dbo].[T_NIOKR_STAGE] (
  [N_ID] int IDENTITY(1, 1) NOT NULL,
  [N_ID_NIOKR] int NOT NULL,
  [D_BEGIN] datetime NULL,
  [D_END] datetime NULL,
  [F_COST] float NULL,
  [S_DESCRIPTION] varchar(4000) COLLATE Cyrillic_General_CI_AS NULL,
  CONSTRAINT [T_NIOKR_STAGE_pk] PRIMARY KEY CLUSTERED ([N_ID])
)
ON [PRIMARY]
GO
26 май 11, 14:25    [10713189]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
AndreyJordan
Member

Откуда: Екатеринбург, Россия
Сообщений: 657
Владимир СА,

Исправил уже IDENTITY.

CREATE TABLE [dbo].[_CommandsContent](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ID_Command] [int] NOT NULL,
[ID_Product] [int] NOT NULL,
[Cantity] [int] NOT NULL,
[Price] [decimal](18, 2) NOT NULL,
[SellType] [int] NOT NULL,
[Document] [bit] NOT NULL,
[InBox] [int] NOT NULL,
CONSTRAINT [PK__CommandsContent] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
26 май 11, 15:01    [10713492]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
И теперь при вставке записи что говорит?
26 май 11, 15:04    [10713526]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
AndreyJordan
Member

Откуда: Екатеринбург, Россия
Сообщений: 657
Все и раньше было нормально, просто иногда когда пользователи одновременно импортировали большой объем данных вылетала ошибка, описанная выше. Сегодня еще они этим не занимались. Завтра отпишусь о результатах.
26 май 11, 15:12    [10713598]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Блин, тогда строку создания INSERT приведи...
Как это, если ранее на поле не было наложено IDENTITY(1,1), то как вообще вводили записи?
26 май 11, 15:21    [10713683]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Владимир СА,

а вто ето нам расскажут завтра,когда сегодня все упадет
26 май 11, 15:22    [10713707]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
AndreyJordan
Member

Откуда: Екатеринбург, Россия
Сообщений: 657
Владимир СА
Блин, тогда строку создания INSERT приведи...
Как это, если ранее на поле не было наложено IDENTITY(1,1), то как вообще вводили записи?

В поле Значение по умолчанию стояла написанная мною фунция GenerateID(param) - которая возвращала в зависимости от param следующий ID.
26 май 11, 15:32    [10713815]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
AndreyJordan
В поле Значение по умолчанию стояла написанная мною фунция GenerateID(param) - которая возвращала в зависимости от param следующий ID.

Значит эта функция была написано неправильно, раз генерировала дубликаты
26 май 11, 15:33    [10713831]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
AndreyJordan
В поле Значение по умолчанию стояла написанная мною фунция GenerateID(param) - которая возвращала в зависимости от param следующий ID.
Покажи скрипт этой функции...
26 май 11, 15:37    [10713887]     Ответить | Цитировать Сообщить модератору
 Re: ADO и SQL Server  [new]
AndreyJordan
Member

Откуда: Екатеринбург, Россия
Сообщений: 657
Используйте IDENTITY(n,step) - для формирования уникального ID, и все будет отлично!
Проблема решена.
Всем спасибо!
27 май 11, 09:10    [10717057]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить