|
|
|
Как автомат-ки получать автоинкриментное поле SQL сервера в КА
|
|||
|---|---|---|---|
|
#18+
Уважаемые помогите рассказав Использую курсорадаптеры для подсоединения к SQL SErver-ским таблицам. Все просто замечательно, но чую что кое-что можно сделать лучше, а точнее сказать правальнее. Допустим на сервере есть таблица, поле ID которой автоинкриментное, при создании курсорадаптера указваю, что разрещаю изменения и ключом ставлю поле ID И теперь сам вопрос: в программе, когда пишу TABLEUPDATE, как можно автоматически получать поле ID, сгенерированное на сервере. Сейчас получаю так - делаю рефреш КА после чего перемещаюсь на максимальное значение ID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 06:25 |
|
||
|
Как автомат-ки получать автоинкриментное поле SQL сервера в КА
|
|||
|---|---|---|---|
|
#18+
Hi foll_! Если VFP9 то см. InsertCmdRefreshCmd, InsertCmdRefreshFieldList, InsertCmdRefreshKeyFieldList... А вообще не вынимают в таких схемах "максимальное значение" - иначе будет глюк - пару человек одновременно добавят записи, и все они получат после рефреша одно и то-же значение - конечно все кроме одного "не своё". В SQL сервере есть группа функций и переменных для решения проблемы получения "своего" значения идентификатора - @@IDENTITY, SCOPE_IDENTITY() про них и читай - их и используй. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2006, 02:22 |
|
||
|
Как автомат-ки получать автоинкриментное поле SQL сервера в КА
|
|||
|---|---|---|---|
|
#18+
А можно еще так. 1.В БД на сервере создать единственную таблицу с полем identity и процедуру для его получения. use DBNameTest GO CREATE TABLE [IDALL] ( [id] [bigint] IDENTITY (1, 1) NOT NULL , [user_id] int NULL CONSTRAINT [PK_idall] PRIMARY KEY CLUSTERED ( [id] ) ON [PRIMARY] ) ON [PRIMARY] GO CREATE PROCEDURE get_id @user_id int=0 AS INSERT INTO IDALL ([user_id]) VALUES(@user_id) select @@identity as next_id GO 2. С клиента для получения будующего ИД: lcSql='exec DBNameTest.dbo.get_id ?iuser_id' sqlexec(nConnect, lcSql, 'temp') lnNextId=temp.next_id и далее используем lnNextId для вставки в нужную таблицу в качестве ИД 3. Но я так не делаю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2006, 15:37 |
|
||
|
Как автомат-ки получать автоинкриментное поле SQL сервера в КА
|
|||
|---|---|---|---|
|
#18+
Hi FoxLamer! Получение уникального номера без использования identity можно организовать гораздо проще и красивее: - использовать GUID - его кстати генерирует в MS SQL функция NewId() ;) - использовать аналог фоксовой функции NewId (тоже со служебной таблицей хранящей "последние использованные" значения для ключей) - блокировка реализуется при помощи select ... for update - а можно и вовсе обойтись без блокировки - это довольно известная схема - просто в Update включается дополнительное условие сравнивающее текущее значение поля с его ранее (предыдущим SELECT-ом) полученным значением - если update обновил 0 записей - значит кто-то успел "влезть" между 2-мя нашими запросами - select и update - значит необходимо повторить весь процесс. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2006, 04:41 |
|
||
|
Как автомат-ки получать автоинкриментное поле SQL сервера в КА
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov, доброго времени суток! Я пользуюсь классическим способом с использованием @@identity. А MSSQL функцию Newid() удобно использовать еще для случайной сортировки выборки select * from MyTable order by newid() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 11:44 |
|
||
|
Как автомат-ки получать автоинкриментное поле SQL сервера в КА
|
|||
|---|---|---|---|
|
#18+
FoxLamerIgor Korolyov, доброго времени суток! Я пользуюсь классическим способом с использованием @@identity. Я бы рекомендовал отказаться от @@IDENTITY, а заменть ее SCOPE_IDENTITY(). Если хотите, могу объяснить почему, но в BOL к SQL Server причина перехода подробна описана. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 18:00 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=273&tid=1592290]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 352ms |

| 0 / 0 |
