powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сделать генератор id и корректно выполнить insert в MSSQL
9 сообщений из 9, страница 1 из 1
Как сделать генератор id и корректно выполнить insert в MSSQL
    #32450830
chel99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю клиента для работы с MSSQL. Не знаю как сделать генератор id для работы в сети нескольких клиентов.
Как корректно выполнить insert в MSSQL при одновременной работе в сети нескольких клиентов, чтобы сохранить уникальность id?
Еще вопрос: подскажите как в MSSQL заблокировать запись в таблице: чтобы запись была доступна только для блокирующего клиента и временно недоступна для всех остальных.
...
Рейтинг: 0 / 0
Как сделать генератор id и корректно выполнить insert в MSSQL
    #32450870
В MS SQL при создании таблицы базы данных можно установить автоматическое формирование значения индексного поля с использованием UID или инкрементации. Есть так же функция IDENT_CURRENT для получения значения ключа последней добавленной записи.
...
Рейтинг: 0 / 0
Как сделать генератор id и корректно выполнить insert в MSSQL
    #32450911
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вопрос: подскажите как в MSSQL заблокировать запись в таблице: чтобы запись была доступна только для блокирующего клиента и временно недоступна для всех остальных.

Этого делать не стоит. Особенно, если ты только осваиваешь MSSQL. Логика работы клиент-серверных приложений как раз и основана на том, что в любой момент (почти) любой пользователь может получить (изменить) интересующие его данные.

Применительно к FoxPro - это соответствует логике работы в режиме оптимистической буферизации.

Перестрой логику своего приложения, чтобы не было необходимости в таких "подвешенных" блокировках. Проверка на факт внесения изменений другим пользователем в момент сохранения внесенных изменений.
...
Рейтинг: 0 / 0
Как сделать генератор id и корректно выполнить insert в MSSQL
    #32451072
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блокировать можно на программном уровне(физической блокировки не происходит). Используя sysprocesses. На сиквеловском форуме есть пример кода от pkarklin. У меня так реализовано редактирование документов.
...
Рейтинг: 0 / 0
Как сделать генератор id и корректно выполнить insert в MSSQL
    #32451199
chel99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, согласен. Использование identity наиболее простое и целесообразное решение. Однако возникает еще вопрос: как после insert передать клиенту
этот самый id. Если использовать после insert IDENT_CURRENT для получения значения ключа последней добавленной записи - где гарантия что запись последняя? - долей секунды позже может прийти insert от другого клиента.
...
Рейтинг: 0 / 0
Как сделать генератор id и корректно выполнить insert в MSSQL
    #32451328
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо IDENT_CURRENT() надо использовать SCOPE_IDENTITY().

Она, в отличии, от предыдущей функции возвращает значение Identity вставленное в текущее ограничение причем в пределах одного сеанса данных (т.е. в одном коннекте)

Т.е. действуешь примерно так:

LOACL lcString
lcString = "SET NOCOUNT ON "+;
"INSERT Tab1 (...) VALUES (...) "+;
"SELECT SCOPE_IDENTITY() as LastIdentity"

IF SQLExec(m.lnCH,m.lcString,'Result')=1
?Result.LastIdentity
ENDIF

Полученное значение - это значение Identity созданное именно в твоем сеансе данных. Значения созданные в других коннектах не учитываются
...
Рейтинг: 0 / 0
Как сделать генератор id и корректно выполнить insert в MSSQL
    #32451401
chel99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо ВладимирМ! Попробую реализовать Ваш совет.
...
Рейтинг: 0 / 0
Как сделать генератор id и корректно выполнить insert в MSSQL
    #32452215
foxwizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я делаю так:
Первичные ключи - int автоинкрементные
после добавления записи получаю значение ключа
a=SQLEXEC(nStatementHandle," SELECT @@IDENTITY AS 'newid'",'tokey32')
newid=tokey32.newid && ключ
SELECT tokey32
use

After an INSERT, SELECT INTO, or bulk copy statement completes, @@IDENTITY contains the last identity value generated by the statement.
...
Рейтинг: 0 / 0
Как сделать генератор id и корректно выполнить insert в MSSQL
    #32452323
to Chel99:

А может, клиентскому приложению и не нужно знать значение ключа последней добавленной в MS SQL записи (вопрос как вариант)? Может, имеет смысл написать хранимую процедуру, которая на основании полученных аргументов выполнит все необходимые действия, в частности, модификацию других таблиц БД? И всё это в одной транзакции, что одновременно решило бы проблему блокировки.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сделать генератор id и корректно выполнить insert в MSSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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