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

Вниз

Свойство IDENTITY   Найти похожие ветки 

 
Patrick ©   (2004-04-14 11:36) [0]

Добрый день! Вопрос таков : есть у меня таблица FUELS, в ней 2 поля FuelCode (tinyint) и FuelName (char(10)), у поля FuelCode стоит свойство IDENTITY, проблема состоит в том, что добавляя новую запись INSERT INTO FUELS (FUELNAME) VALUES ("Новое значение"), вылезает ошибка по поводу дублирования ключа, хотя в других таблицах, где вроде бы все также всё в норме.


 
bushmen ©   (2004-04-14 11:46) [1]

А у тебя не превышено ли значение на тип tinyint ?


 
Patrick ©   (2004-04-14 11:56) [2]

Это исключено, таблица пустая. А значения IDENTITY SEED и IDENTITY INCREMENT установлены в 1.


 
clickmaker ©   (2004-04-14 12:00) [3]


> хотя в других таблицах, где вроде бы все также

Значит все-таки не все также


 
A_N_D ©   (2004-04-14 12:04) [4]

Поставь IDENTITY SEED
SELECT IDENT_CURRENT("FUELS")


 
bushmen ©   (2004-04-14 12:05) [5]

Попробуй выполнить insert из Query Analyser
И попробуй обнулить счетчик
dbcc checkident("MyTabel", reseed, 1)


 
Patrick ©   (2004-04-14 12:18) [6]

Счетчик, обнулял, а выполняя SELECT IDENT_CURRENT("FUELS") получил значение 0, разницей между данным случаем и другими работающими объектами является то, что там тип поля с IDENTITY не TINYINT, а INTEGER. Может в этом причина, хотя не должно быть.


 
Nikolay M. ©   (2004-04-14 12:32) [7]

Вместо того, чтобы устраивать ромашка "тоже - не тоже", лучше донеси народу мысль, чем оправдано использование в качестве IDENTITY именно типа tinyint?


 
Patrick ©   (2004-04-14 13:18) [8]

Так что же в этом кривого такого, ежели не давать юзеру самому заносить значение кода, а пусть при добавлении само формируется, мож я чего то не понимаю, ты уж просвети?


 
bushmen ©   (2004-04-14 13:23) [9]

А заменить на тин INTEGER трудно? Давно бы уже проверил.


 
Patrick ©   (2004-04-14 13:33) [10]

Поменял, ситуция та же, одну строчку добавляет нормально, а вторую ругается на дублирование ключа, такое впечатление, что счетчик не срабатывает.


 
sniknik ©   (2004-04-14 13:40) [11]

если счетчик не срабатывает значит это не счетчик, проверил с тиниинт все работает.


 
31512 ©   (2004-04-14 13:42) [12]

Для Patrick
У меня была такая проблема. Я ещё успешно разрешил
http://delphimaster.net/view/3-1080281412/

ОТКАЖИСЬ ОТ IDENTITY, ПОСКОЛЬКУ DB КОМПОНЕНТЫ ПРИНЦИНИАЛЬНО НЕ ПОНИМАЮТ, ЧТО ЭТО ТАКОЕ.

Или пытай Romkinа, который говорит, чту у него есть друг, которому удалось подружиться с identity.


 
A_N_D ©   (2004-04-14 13:43) [13]

А ты IDENTITY в Yes установил?


 
bushmen ©   (2004-04-14 13:44) [14]

>ОТКАЖИСЬ ОТ IDENTITY, ПОСКОЛЬКУ DB КОМПОНЕНТЫ ПРИНЦИНИАЛЬНО НЕ ПОНИМАЮТ, ЧТО ЭТО ТАКОЕ.

А какое отношение DB компоненты имеют к MSSQL ?


 
31512 ©   (2004-04-14 13:47) [15]

Для bushmen ©
Никакого, в том-то и дело. А тип identity есть только в MSSQL.


 
sniknik ©   (2004-04-14 13:50) [16]

люди! откровение века! на мерседесах ездить нельзя! у запорожцев тормоза неисправны.


 
Ega23 ©   (2004-04-14 13:53) [17]

ОТКАЖИСЬ ОТ IDENTITY, ПОСКОЛЬКУ DB КОМПОНЕНТЫ ПРИНЦИНИАЛЬНО НЕ ПОНИМАЮТ, ЧТО ЭТО ТАКОЕ.

Бред какой-то, прости меня Господи...


 
Ega23 ©   (2004-04-14 13:53) [18]

А ежели по-существу, то это сильный ход IDENTITY на tinyint ставить...


 
31512 ©   (2004-04-14 13:55) [19]

Ega23
Где ты был, дорогой, когда я с ним маялся?
http://delphimaster.net/view/3-1080281412/


 
Patrick ©   (2004-04-14 13:58) [20]

Да компоненты DB не причем, т.к. я всё в Enterprise"е делаю, без компонент Delphi.


 
31512 ©   (2004-04-14 14:04) [21]

Для Patrick ©
Тьфу, прости меня, не разобрался. Ну конечно! Только запросом записи вставляешь?


 
Ega23 ©   (2004-04-14 14:27) [22]

Где ты был, дорогой, когда я с ним маялся?

Ну читал я ту ветку, ещё тогда, в марте. Я не понял, почему "DB КОМПОНЕНТЫ ПРИНЦИНИАЛЬНО НЕ ПОНИМАЮТ, ЧТО ЭТО ТАКОЕ".
Вот уже 4 года базами занимаюсь и НИ РАЗУ проблем с IDENTITY не встречал. В смысле, программных проблем. Проблемы были, но логические.
А насчёт метода ApplyUpdates - никогда не пользовался. Ибо с сервером работаю ТОЛЬКО через SP.


 
Ega23 ©   (2004-04-14 14:28) [23]

Да компоненты DB не причем, т.к. я всё в Enterprise"е делаю, без компонент Delphi.

А как ты в Enterprise"е INSERT INTO ... делаешь, если не секрет?


 
Patrick ©   (2004-04-14 14:54) [24]

Какой же тут секрет, если есть там обычный SQL-редактор, когда открываешь таблицу (полный SELECT)


 
bushmen ©   (2004-04-14 14:56) [25]

А ты попробуй непосредственно вводить дданные в сетку Enterprise. Тоже ругаться будет. А через Query Analyser пробовал. И где просимая мной версия сервера?


 
Patrick ©   (2004-04-14 14:58) [26]

B еще дополнение,в один момент как бы всё нормализуется, после Disconnecta и снова Коннекта, и записи добавляются корректно, но стоит запустить климентское приложение, начинается та же фигня, и даже в Manager"е она не дает добавлять руками, пока снова не сделаешь Disconnect.


 
bushmen ©   (2004-04-14 15:04) [27]

Подождите, а Вы Enterprise Manager запускаете на клиенте, т.е. не с машины, на которой стоит SQL Server?


 
sniknik ©   (2004-04-14 15:04) [28]

климентское приложение виновато. не запускай.


 
bushmen ©   (2004-04-14 15:07) [29]

С какими компонентами ты работаешь в клиентском приложении? ADO или BDE ?


 
Patrick ©   (2004-04-14 15:07) [30]

MS SQL-2000, работаю на клиентской машине. и ругается даже тогда , когда работаю через обычную сетку ввода данных.


 
Patrick ©   (2004-04-14 15:10) [31]

Компоненты ADO пробовал, и ADO из библиотеки vg2lib (вроде как достаточно известная)


 
bushmen ©   (2004-04-14 15:42) [32]

А если запустить Enterprise Manager запустить на самом сервере?


 
Ega23 ©   (2004-04-14 15:55) [33]

Что-то здесь не так... В самом деле, чудес не бывает.
Попробуй чётко проперти таблицы посмотреть.


 
Fay ©   (2004-04-14 16:46) [34]

Проверь - что в ключе.
Проверь триггеры.


 
paul_k ©   (2004-04-14 19:02) [35]

1. а ключ не составной ли из нескольких полей?
2. см. 1


 
Fay ©   (2004-04-14 19:06) [36]

2paul_k ©   (14.04.04 19:02) [35]
>> 1. а ключ не составной ли из нескольких полей?
1. Так, конечно, бывает. Но identity - уже возможный ключ, поэтому хоть из 878 полей...
2. см. 3
3. см. 1


 
sniknik ©   (2004-04-14 19:24) [37]

> поэтому хоть из 878 полей...
особенно с tinyint у которого 255 максимум. ;)


 
Fay ©   (2004-04-14 19:35) [38]

2sniknik ©   (14.04.04 19:24) [37]
В случае с IDENTITY  - это пофинг. Даже для tinyint 8)
А вот
Server: Msg 8115, Level 16, State 1, Line 6
Arithmetic overflow error converting IDENTITY to data type tinyint.
Arithmetic overflow occurred.

- это запросто.


 
Patrick ©   (2004-04-15 15:07) [39]

Добрый день! В продолжение вчерашней дисскурсии, наметился один момент, оказывается клиентская часть нипричем, т.к. экспериментирую чисто в Manager"е убираю свойство IDENTITY, сохраняю, заново ставлю это свойство, добавляю запись - работает,
INSERT INTO T1(F2) VALUES ("Новая строка"), в таблице 2 поля F1-integer (IDENTITY (1,1)) и F2 - char(20), добавляю еще запись - сообщение "дублирование ключа", опять изменяю свойство - картина повторяется, а у другой таблички - "структура почти такая же" - всё хорошо, может всё таки кто подскажет, в чем может быть дело?
что еще можно проверить, такое подозрение, что со счетчиком что-то неладное, таблица достаточно простая - никаких триггеров нет.


 
bushmen ©   (2004-04-15 15:41) [40]

>а у другой таблички - "структура почти такая же" - всё хорошо

А если таблицу "убить" и заново создать - глюк повторяется? А у тебя sp3 на SQL Server стоит?


 
sniknik ©   (2004-04-15 15:46) [41]

непонятен конечно смысл этого убирания/установки но проверил как написано, убрал сохранил опять поставил, работает (почти не сомневался) и после 5 инсертов ключь не дублируется (и для инт и для тиниинт).
может конечно у тебя F2 ключом является...

распиши подробно как получить ошибку (по шагам). а то неполучается нифига.


 
Patrick ©   (2004-04-16 08:28) [42]

Добрый день!
Вчера ответить не удалось, Инет у нас срубили, пробовал и таблицу "убивать" и хранимую процедуру (в которой делаю инсерт)естественно тоже, ничего не помогает, ну а подробное описание таково, ну создаю табличку заново. указываю первичный ключ только по полю тиниинт и ставлю идентити по этому полю, далее создаю процедуру, в ней по входным опциям операции для этой таблицы (SELECT,UPDATE,INSERT,DELETE). Ну и потом выполняю эту процедуру для инсерта один раз - нормально, возможно и второй раз нормально, но далее - идет дублирование. Меня заинтересовало предложение по поводу SP3 посмотрел на диске, там отдельно от установки сервака есть SP1 и SP2, а также какие-то Security Hotfix Update (3шт.) различных версий (откровенно не знаю что это такое) и не помню ставили мы их или нет. А вот SP3 там нет, может подскажите где его можно нарыть в Инете.


 
sniknik ©   (2004-04-16 10:42) [43]

ну во первых это не подробное описание.
а во вторых совмещая описание [39] с [42] понял так, что ты делаеш все возможное чтобы запутать MSSQL и нас заодно. (про процедуру сказал только в 42м посте, это как? у тебя цель какая, решить чтото или на судьбу и била пожаловаться? )
извини но проверять это уже ломает (так и не понял последовательность, и в результате уверен на 99.8%, не будет глюка).
кстати смысл программирования не в том чтобы найти глюк в чужом продукте а в написании своего безглючного, даже если приходится обходить дыры разработчика (которых немного кстати говоря и это не из их числа).  

> А вот SP3 там нет, может подскажите где его можно нарыть в Инете.
3 сервис пак затыкает дырку от вируса, в основном. раскопками можно занятся на сайте производителя продукта.


 
bushmen ©   (2004-04-16 10:46) [44]

>3 сервис пак затыкает дырку от вируса, в основном

Он еще много чего делает. В том числе и калечит некоторые вещи :)


 
Patrick ©   (2004-04-16 12:17) [45]

Да нет, моя цель - именно решить проблему, а про хранимую не говорил т.к. там всё прозрачно (наверное), текст создания таблицы и хранимой процедуры привожу ниже, уж не знаю куда пробнее.

CREATE TABLE [dbo].[Fuels] (
[FuelCode] [tinyint] IDENTITY (1, 1) NOT NULL ,
[FuelName] [char] (10) COLLATE Cyrillic_General_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Fuels] WITH NOCHECK ADD
CONSTRAINT [PK_Fuels] PRIMARY KEY  CLUSTERED
(
 [FuelCode]
)  ON [PRIMARY]
GO

и хранимая

CREATE PROCEDURE dbo.FuelAction
@Option smallint,
@pFuelCode tinyint,
@pFuelName char(5)
AS

BEGIN

IF @Option = 0
SELECT f.FuelCode, f.FuelName
FROM NSI.dbo.Fuels f

BEGIN TRANSACTION

IF @Option = 1
UPDATE NSI.dbo.Fuels
SET FuelName = @pFuelName
WHERE FuelCode = @pFuelCode

IF @Option = 2
INSERT INTO NSI.dbo.Fuels (FuelName)
VALUES (@pFuelName)

IF @Option = 3
IF EXISTS(SELECT * FROM NSI.dbo.Marks WHERE FuelCode = @pFuelCode)
    RAISERROR ( "Удаление невозможно. Данный тип топлива есть в справочнике моделей.", 16, 127)
ELSE
DELETE FROM NSI.dbo.Fuels
WHERE FuelCode = @pFuelCode

IF @Option = 4
DELETE FROM NSI.dbo.Fuels
DBCC CHECKIDENT("NSI.dbo.Fuels", RESEED, 0);

COMMIT TRANSACTION

END
GO


 
paul_k ©   (2004-04-16 12:47) [46]

А каков тайный смысл строки

> DBCC CHECKIDENT("NSI.dbo.Fuels", RESEED, 0);

если её коментаришь все работает.

This example forces the current identity value in the jobs table to a value of 30.
USE pubs
GO
DBCC CHECKIDENT (jobs, RESEED, 30)
GO
то есть после выполнения твоей строки у тебя следующий ID  обязан быть 1. вот тебе и ннарушение ключа


 
Patrick ©   (2004-04-16 13:27) [47]

ВСЕМ ПАРДОН ЗА БЕСПОКОЙСТВО и НАПРЯГ. ОШИБКА ОКАЗАЛАСЬ БОЛЕЕ ЧЕМ БАНАЛЬНОЙ - ЗАБЫЛ BEGIN ... END ПОСТАВИТЬ, ЕЩЕ РАЗ ВСЕМ SORRY.


 
bushmen ©   (2004-04-16 13:35) [48]

>Patrick ©  

С тебя по ящику пива для каждого за напрасное беспокойство! :)))


 
Patrick ©   (2004-04-16 14:09) [49]

Обязательно, где встречаемся для совместного пития?


 
sniknik ©   (2004-04-16 14:19) [50]

ну наконец то подробно, но опоздал...


 
paul_k ©   (2004-04-16 14:22) [51]

кстати если вместо
DELETE FROM NSI.dbo.Fuels
DBCC CHECKIDENT("NSI.dbo.Fuels", RESEED, 0);

написать просто
truncate table NSI.dbo.Fuels
будеи эффект тот-же а исполнение быстрее


 
bushmen ©   (2004-04-16 14:38) [52]

>Patrick ©   (16.04.04 14:09) [49]

На УАЗе :)



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

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

Наверх




Память: 0.6 MB
Время: 0.04 c
8-1077020922
Gast1
2004-02-17 15:28
2004.05.16
Как создать анимацию для кнопки


9-1067790741
Unknown user
2003-11-02 19:32
2004.05.16
Оцените возможности 3D OpenGL движка.


4-1080211220
Volodya_
2004-03-25 13:40
2004.05.16
Потоки


1-1083159928
IceMaster
2004-04-28 17:45
2004.05.16
RichEdit Жирный текст


3-1082570720
alle
2004-04-21 22:05
2004.05.16
Проблема в DataModule