powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как после INSERT получить значение IDENTITY на клиенте?
15 сообщений из 15, страница 1 из 1
Как после INSERT получить значение IDENTITY на клиенте?
    #32173909
KompaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем!

Подскажите пожалуйста, как мне получить после INSERTа записи значение
присвоенного поля типа INDENTITY, также хотелось чтобы после INSERT и
UPDATE эта запись на клиенте обновлялась, т.к. те данные
что вставляются или изменяются, могут быть подправлены триггерами на
стороне сервера, а клиенту об этом ничего не известно.

Хотелось бы реализовать такую последовательность на клиенте:
1. Вставить/изменить запись
2. Обновить данную запись из сервера.
3. Работата с полученными полями записи...

Заранее всем благодарен.
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32173935
KompaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Маленькая оговорочка, немного неправильно поставил вопрос,
как получить последнее значение IDENTITY поля для заданной
таблицы я знаю (есть функции, позволяющие это сделать).
Хотелось бы узнать, как можно сделать так,
чтобы после INSERT или UPDATE автоматически на клиенте
обновлялась запись с сервера, т.к. триггеры могут форматировать
данные, которые ввел пользователь (использую компоненты ADO в
Дельфи)
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32173940
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну знаещь есть различные способы ...

в триггере на INSERT ставищь какуюнибудь XP Procedure
которая передает как нить ну допустим применяя СОМ тех.
уник номер записи итд.
можно даже Raiserror (опять же в триггере) и в try...exception перехватить
причем делать еще проверку на то , точно тебе число пришло, а то вдруг
это ошибка а не товй ун код ... :)

ну и еще другие ...
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32173944
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А дак ты имеещь ввиду то чтобы обновлялись данный у остальных клиентов ?
Обовсем ентом можно прочитать сдесь

http://www.sql.ru/articles/mssql/02040201AlertServiceForSQLserv.shtml
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32173972
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы реализовать такую последовательность на клиенте:
1. Вставить/изменить запись
2. Обновить данную запись из сервера.
3. Работата с полученными полями записи...


:)

Т.е. ты хочешь, чтобы тебе код написали, как вставить, как обновить (Close Open) и как работать?



Всегда после действий над данными перечитывай их - вот и все.
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32173985
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE PROCEDURE заказчики_вставить

@Имя varchar ( 255 ) = null

as

declare	@ID numeric ( 28 ,  0 )

insert	into заказчики (Имя)
	values (@Имя)

select	@ID = @@identity

select	@ID as Row_ID
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32174048
KompaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Всегда после действий над данными перечитывай их - вот и все.

интересное решение, перечитывать весь клиентский набор данных,
а нет ли способа перечитать только одну запись, без Close Open ?
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32174053
KompaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CREATE PROCEDURE заказчики_вставить
@Имя varchar (255) = null
as
declare @ID numeric (28, 0)
insert into заказчики (Имя)
values (@Имя)

select @ID = @@identity
select @ID as Row_ID

Мне нужно, чтобы на клиенте обновлялась запись:
...
ADODataSet.Post();
i := ADODataSet.FieldByName( 'CUSTOMER_ID' ).AsInteger; // так вот, здесь
будет 0! хотя должно быть значение поля IDENTITY, которое присвоил сервер
а Open Close делать бы не хотелось, это ж весь датасет переоткрыть, зачем?
если нужно сделать рефреш только одной записи.
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32174079
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
узнать идентити моментально после вставки можно только через SP и никак иначе. SP вызываешь не через ExecSQL а через Open.
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32174086
KompaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>узнать идентити моментально после вставки можно только через SP и никак иначе. SP вызываешь не через ExecSQL а через Open.

Да это можно, но как обновить одну запись на клиенте без Close Open всего датасета?
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32174350
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак.
А что, есть проблемы обновить весь датасет? Такой большой?
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32174401
KompaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да ну как то не правильно это, обновлять датасет при любом изменении.
А если открыта длинная транзакция, и в ней пользователь вносит данные, так
после каждого апдейта Select делать как то не очень хочется.
Ладно буду по другому выкручивацца.... Спасибо всем за ответы
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32174415
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если открыта длинная транзакция, и в ней пользователь вносит данные, так

Это кто ж тебя надоумил вешать транзакцию, пока пользователь чего-то делает с открытым набором, а???
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32174845
KRoma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Моно использовать Св-ва: ADOQuery1.Properties
а именно
ADOQuery1.Properties.Item[100].Value:=$00000002;
ADOQuery1.Properties.Item[97].Value:=$00000001;
к сожалению не все работает на серверных БД

вообще посмотрите процедуру (написана не мной)
она может дать представления об Properties

procedure TForm1.ShowProperties(Props: Properties);
var
I: Integer;
F: TForm;
Button: TButton;
begin
F := CreateMessageDialog('', mtInformation, [mbCancel]);
F.Height := Screen.Height div 2;
F.Width := Screen.Width div 2;
Button := F.Components as TButton;
Button.Top := F.ClientHeight - Button.Height - 5;
Button.Left := (F.ClientWidth - Button.Width) div 2;
F.Caption := 'Properties';
with TMemo.Create(F) do
begin
SetBounds(5, 5, F.ClientWidth-10, F.ClientHeight - 40);
Parent := F;
for I := 0 to Props.Count - 1 do
with Props do
Lines.Add(Format('%-30s: %s %s', [Name, VarToStr(Value),IntToStr(i)]));
end;
F.ShowModal;
end;
...
Рейтинг: 0 / 0
Как после INSERT получить значение IDENTITY на клиенте?
    #32174980
KompaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Моно использовать Св-ва: ADOQuery1.Properties

Это что-то интересное, спасибо, буду разбираться
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как после INSERT получить значение IDENTITY на клиенте?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]