powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Принудительное изменение
4 сообщений из 4, страница 1 из 1
Принудительное изменение
    #33559888
M0r0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прямо парадокс какой-то. У меня генерируются уникальные значения с помощью спец. таблице. Вставка осуществляется с помощью default значения поля ключа. Ниже приведен код.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
FUNCTION genrecid(tcAlias)
	
	LOCAL lcAlias
	IF TYPE("tcAlias")<>"C" OR EMPTY(m.tcAlias)=.T.
		lcAlias = UPPER(JUSTSTEM(DBF()))
	ELSE
		lcAlias = UPPER(AllTrim(m.tcAlias))
	ENDIF
	
	LOCAL l_arrValue
	DIMENSION l_arrValue[ 1 ]
	l_arrValue( 1 ) =  0 
	
	SELECT recid FROM ttables ;
		WHERE UPPER(ALLTRIM(tablename))=UPPER(ALLTRIM(lcAlias)) ;
		INTO ARRAY l_arrValue

	l_arrValue( 1 ) = l_arrValue( 1 ) +  1 
	
	UPDATE ttables ;
		SET recid = l_arrValue( 1 ) ;
		WHERE UPPER(ALLTRIM(tablename))=UPPER(ALLTRIM(lcAlias)) ;

	RETURN l_arrValue( 1 )
ENDFUNC

По какой-то причине, при выполнении команды APPEND BLANK эта функция берет старое значение ключа, т.е. команда UPDATE якобы не прошла, и получается две записи с одинаковым значением. Причем этот эффект повторяется с определенной периодичностью, т.е. добавил 1 запись, следующая уже будет дубль, а следующая уже нет. Даже перед RETURN l_arrValue(1) ставил TABLEUPDATE(.T.,.T.,lcAlias), но не помогло ((( Люди, поможите.
...
Рейтинг: 0 / 0
Принудительное изменение
    #33559948
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На первый взгляд все правильно.
попробуй в конец TABLEUPDATE(.T.,.T., "ttables" )
...
Рейтинг: 0 / 0
Принудительное изменение
    #33559994
M0r0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да заработало. Проглядел походу, вместо TABLEUPDATE(.T.,.T.,"ttables") вставлял TABLEUPDATE(.T.,.T.,lcAlias) .
...
Рейтинг: 0 / 0
Принудительное изменение
    #33562070
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi M0r0!

Учти, что ты не отслеживаешь возможного конфликта совместного доступа к
этому счётчику. Если не хочешь использовать явные блокировки, то добавь к
Update в условие "AND recid = l_arrValue(1) - 1" - т.е. мы проверяем что
значение счётчика не изменилось с момента выборки (то что выборка была всего
лишь парой строк выше роли не играет!). Естественно что после UPDATE надо
проверить _TALLY, и если там 0 - значит пока мы добавляли 1 кто-то успел
"влезть" - и нужно снова идти выбирать, наращивать, обновлять... Короче тут
нужен цикл.
ttables не нужно нигде явно открывать - тогда она не попадёт в режим
буферизации, и не нужен будет Tableupdate - а вот sys(1104) не помешает!

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Принудительное изменение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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