Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.04.01;
Скачать: [xml.tar.bz2];

Вниз

узнать значение автоинкрементного поля   Найти похожие ветки 

 
_qwerty_   (2011-12-13 12:45) [0]

можно ли до Post узнать какое значение будет иметь автоинкрементное поле AutoId таблицы ItemsTable (AutoId, Code, Name)?

у меня есть метод, который добавлят запись в таблицу и для поля "code" назначает значение, если Code = "", то полю "code" нужно назначить значение поля "AutoId". Проблема в том, что до Post я не могу узнать каким будет значение "AutoId".


procedure TItems.AddItem(Code: string);
begin
 // ...
 ItemsTable.Append;
 try
   if Code = "" then
     // <- полю "Code" назначить значение поля "AutoId"
   else
     ItemsTable.FieldByName("code").AsString := Code;
 except
   ItemsTable.Cancel;
   raise;
 end;
end;


 
И. Павел ©   (2011-12-13 12:54) [1]

> [0] _qwerty_   (13.12.11 12:45)

Можно сперва создать транзакцию и запросом записать строку в таблицу (заодно можно вычленить id &#151; есть много способов). Потом, если окажется, что строка не нужна, откатите транзакцию.

Если БД используете монопольно, то можно и узнать значение автоинкрементного поля. Только вы не указали название БД. Вот пример: http://asweb.ru/notes/mysql/next-auto-increment/


 
И. Павел ©   (2011-12-13 12:55) [2]

> Если БД используете монопольно

Конечно, в немонопольном режиме тоже можно, но эта информация будет бесполезной, т.к. другой клиент может записать поле в таблицу раньше вас.


 
Ega23 ©   (2011-12-13 13:05) [3]


> Конечно, в немонопольном режиме тоже можно, но эта информация
> будет бесполезной, т.к. другой клиент может записать поле
> в таблицу раньше вас.


Смотря что за природа автоинкремента. Сиквенсы транзакционно независимы.


 
DiamondShark ©   (2011-12-13 13:07) [4]


> если Code = "", то полю "code" нужно назначить значение поля "AutoId".

Не нужно назначить значение поля "AutoId". Пусть будет пустое.
Если пустое нельзя, то AutoId -- это всё равно не допустимое значение, а заплатка для дырки в протекающем дизайне.

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

Решайте реальную проблему, а не выстругивайте затычку.


 
OW ©   (2011-12-13 14:16) [5]

code := "БРЕД"

update table set code = autoid where code = "БРЕД"


 
Jeer ©   (2011-12-13 14:39) [6]

Вот не пользуюсь AutoInc из партийных соображений :)


 
OW ©   (2011-12-13 14:44) [7]


> Jeer ©   (13.12.11 14:39) [6]
не пользуюсь AutoInc из партийных соображений

зря.
Самому надо еще добиться уникальности, а в СУБД autoinc он integer, т.е. работает быстрее и думать не надо как она там при этом уникальности добьется.

А id он и есть id. Он как номер паспорта или Родина, которых не выбирают :)


 
Ega23 ©   (2011-12-13 15:14) [8]


> Вот не пользуюсь AutoInc из партийных соображений :)


Зря.


 
Jeer ©   (2011-12-13 16:13) [9]


> зря.


Это философский вопрос


> Самому надо еще добиться уникальности,


Нет проблем


а в СУБД autoinc
> он integer, т.е. работает быстрее


А у меня бывает и байт :)


> и думать не надо как она
> там при этом уникальности добьется.


Думать - люблю, ибо..


 
Jeer ©   (2011-12-13 16:28) [10]


> Ega23 ©   (13.12.11 15:14) [8]
> > Вот не пользуюсь AutoInc из партийных соображений :)
> Зря.


Не надо забывать, что практика и задачи у всех разная.
Кто-то на OLTP сидит, а кто-то OLAP практикует.
Отсюда и подходы могут быть разные.

Сентенции от некоторых:
***********
Игорь Шевченко ©   (2006-11-10 17:25) [74]
to Jeer ©   (10.11.06 17:02) [68]

..потому что всякий autoincrement есть зло, порочащее реляционную теорию, хотя в ряде случаев..

ANB ©   (2006-11-10 17:28) [76]
автоинкремент - зло, хоть и небольшое.


 
Jeer ©   (2011-12-13 16:34) [11]

Ну и тут - полезные мысли:
http://baks.gaz.ru/oradoc/ora/ora368.htm


 
OW ©   (2011-12-13 16:49) [12]


> Это философский вопрос

как нить приеду на ММП, привезу мордовский бальзам, пофилософствуем :)

> Самому надо еще добиться уникальности,
нет проблем

согласен. Но это время, а СУБД выполняет это быстрее.
тот же Oracle с сиквенсом. Все равно он бронирует за один запрос одно число, что может быть проще для него, сервера. Ты, клиент, так не можешь себе позволить. Ну гайд возьмешь, ну + время или там рандом + что-то или еще как хитро. Сервер с автоинком не переплюнуть все равно.


> А у меня бывает и байт :)

тогда зачем БД :)


> Думать - люблю, ибо..

нет, определенно надо все же думательной смеси прихватить как нить :)


 
OW ©   (2011-12-13 16:50) [13]


> Игорь Шевченко ©   (2006-11-10 17:25) [74]


> ANB ©   (2006-11-10 17:28) [76]


> автоинкремент - зло


Хотелось бы послушать/почитать этих людей еще раз. Не переменилась ли т.з.
и почему


 
Jeer ©   (2011-12-13 17:15) [14]


> > А у меня бывает и байт :)
>
> тогда зачем БД :)
>


Миллион-с взаимосвязанных таблиц с пределом каждая в 255 записей.
Запись не одним полем, есс-но :)
Ниче ? :)


 
Jeer ©   (2011-12-13 17:19) [15]


> Но это время, а СУБД выполняет это быстрее.


Если основная операция "чтение", а не вставка - какая разница, сколько будет длиться запись ( в разумных пределах ).
Еще раз - разные системы бывают.
То, что преобладают OLTP, не означает, что OLAP должны использовать достигнутое первыми.


 
OW ©   (2011-12-13 17:47) [16]


> Jeer ©

ну не знаю.. чем OLAP цифра не понравится?
да даже join лучше пройдет с цифрой, нежели с чем-то еще..


 
Jeer ©   (2011-12-13 17:53) [17]

Хм.. а кто был против "цифры" ?

Речь шла о разных способах генерации уникального суррогатного ключа aka PK, в качестве которого, есс-но, выступает один из целочисленных типов.


 
Cobalt ©   (2011-12-13 18:33) [18]

Вот жеж люди придумывают себе геморрой...
Если нужен тебе ID - генерируй его сам.
А Автоинкремент - он для целей, когда тебя не заботит какой будет ID у вставленной записи.



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

Форум: "Начинающим";
Текущий архив: 2012.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
2-1323684737
igorium
2011-12-12 14:12
2012.04.01
Проблемы с Chart


2-1323787418
tj.nelson
2011-12-13 18:43
2012.04.01
Помогите разобраться с реестром windows 7


15-1323125240
Дмитрий С
2011-12-06 02:47
2012.04.01
Где можно купить декоративные световоды?


15-1322725585
Pazitron_Brain
2011-12-01 11:46
2012.04.01
Как в Делфи написать паскалевскую программу?


2-1323747986
Drowsy
2011-12-13 07:46
2012.04.01
Не работает опция "Build with runtime packages"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский