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

Вниз

Получение значение ключевого поля, сразу после его создания   Найти похожие ветки 

 
SaS   (2004-02-07 14:19) [0]

Уважаемые Мастера. Есть Две таблицы, в 1ой поле Id identity, то бишь автоинкремент, необходимо считать его значение, сразу после вставки записи, чтобы использовать его для вставки во вторую таблицу. Для вставки использую AdoDataSet.AppendRecord...
Единственный вариант, до которого добрался сам - это OnPost читать последнюю запись... при событии OnInsert Дельфа не дает...
А при OnPost другой пользователь уже может добавить еще одну запись. Помогите плиз.


 
just me   (2004-02-07 16:44) [1]

можно по OnPost сделать select @@IDENTITY


 
SaS   (2004-02-09 16:28) [2]

Спасибочки.... Разбираюсь...
Вот мысля умная: Может мне запись добавлять через SQL директом, чтобы выходом запроса было значение @@identity, т.к. событие OnPost кажется мне ненадежным.... Попробую и так и так.


 
VLAD-MAL   (2004-02-09 16:32) [3]

Генерация ID ПЕРЕД его использованием:
Варианты:
- специальные процедуры (хранимые);
- GUID.


 
Ega23   (2004-02-09 17:05) [4]

Declare @X int set NoCount ON
Insert into Table1 (....)
values (....)
Select @X=@@IDENTITY
Set NoCount OFF
Select X=@X

Через Query.Open открываем и
FieldByName("X").AsInteger
Вот и ID нашей записи.


 
VLAD-MAL   (2004-02-09 17:09) [5]

http://www.rsdn.ru/article/db/midas_migration.xml

"
Добавление записей в таблицу

Для абстрагирования метода генерации уникальных идентификаторов для каждой записи можно вынести его в хранимую процедуру, которая будет возвращать ID новой записи. Это позволяет легко добавлять записи в подчиненную таблицу, не производя никаких дополнительных манипуляций. В дальнейшем вы можете возложить на эту процедуру, например, генерацию идентификаторов в заданном диапазоне, или обеспечить сквозную нумерацию. Для хранения идентификаторов проще всего иметь отдельную таблицу примерно следующего вида:

create table Seeds (
TableName varchar(30), --имя таблицы
ID int, --ID последней вставленной записи в данную таблицу
LowOffset int --нижняя граница диапазона
)
go



При добавлении пользовательских таблиц необходимо не забывать вставлять в эту таблицу соответствующие записи. Ниже приведен пример SQL-запроса, делающего это:

insert into Seeds(TableName, ID, LowOffset, HiOffset)
values("MyCoolTable", 0, 0, 1000000)
go



Текст процедуры в простейшем случае будет выглядеть так:

create procedure CLIENT_ID
@TableName varchar(30),
@ID int output
as
update Seeds
set ID = ID + 1,
@ID = ID + LowOffset
where TableName = @TableName
go

"


 
SaS   (2004-02-09 23:18) [6]

Так... вариантов много... Я сделал как и говорил, только с одной разницей: вместо @@Identity использвал Scope_Identity, т.к. мне значение после триггеров ни к чему. Для пробы на трех компьютерах запустил такое добавление одновременно, ни одного перехлеста при добавленни по 1000 записей с каждого компа...


 
KSergey   (2004-02-10 07:32) [7]

> вместо @@Identity использвал Scope_Identity

Во-во, это очень правильно.
Одно из двух новшеств, собственно и нужных в MS SQL 2k


 
ЮЮ   (2004-02-10 08:03) [8]

>Для пробы на трех компьютерах запустил такое добавление одновременно, ни одного перехлеста при добавленни по 1000 записей с каждого компа

А если потребуется сделать тоже самое в рамках одной транзакции ?



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

Форум: "Базы";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-12390
TUser
2004-02-24 18:48
2004.03.05
Что там 2200 потоков ...


3-12282
Andreich
2004-02-06 15:34
2004.03.05
Как добавить фотографию в поле Graphic?


1-12317
RomCom
2004-02-21 07:05
2004.03.05
RichEdit и OEM_CHARSET


6-12470
ALEIIIKA
2003-12-29 10:17
2004.03.05
Как на сервер отправить запрос?


1-12353
ффф
2004-02-21 23:29
2004.03.05
TImage





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский