Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / локально представлени и неуникальные записи / 3 сообщений из 3, страница 1 из 1
04.10.2007, 10:25
    #34845811
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
локально представлени и неуникальные записи
есть таблица, в которой могут быть абсолютно равные записи (по всем полям), (ненормально конечно, но "сложившаяся технология")
редактирование таблици осуществляется через локальное представление,
ключевыми полями назначены все поля
дак вот при редактирование неуникальных записей происходит ошибка уникальности и изменяются все таковые записи - это впрочем понятно почему.
догадываюсь что правильней при обнаружение неуникальности непроводить изменений,
но узнаю об этом уже при выполнение tableupdate
ошибка возвращается, но изменения проводятся
догадываюсь, что можно обернуть tableupdate в транзакции и откатить по ошибке.
а нет ли более изящных решений?
...
Рейтинг: 0 / 0
04.10.2007, 10:47
    #34845910
Рома Б.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
локально представлени и неуникальные записи
Ничего изящнее введения суррогатного ключа (дополнительное поле-первичный ключ) в голову не приходит. Сам много раз пользовался: в уже давно рабочие базы вводил суррогатный ключ, что позволяло однозначно идентифицировать записи, например, для передачи по интернету не всей базы, а только изменённых строк для критичных по скорости филиалов предприятия.
...
Рейтинг: 0 / 0
04.10.2007, 10:50
    #34845920
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
локально представлени и неуникальные записи
1. сделать ключи - уникальные ID

2.да, транзакция и откат в случае ошибки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
* в курсоре что-то потрогали
sqlsetprop(.nConnection, 'Transactions',  2 )
if !tableupdate(.t.,.t.,.Alias)
	* ошибка, не смогли сохранить изменения на сервер
	sqlrollback(.nConnection)
	msg()
	local laErrors( 1 ), lcErrMessage
	=aerror(laErrors)
	text to lcErrMessage noshow pretext  7 
		КАД. Ошибка сохранения изменений в таблице <<.Tables>>.
		<<iif(alen(laErrors)>= 2 ,laErrors[ 2 ],'Ошибка не идентифицирована.')>>
	endtext
	messagebox(lcErrMessage, 16 ,'Класс КА')
	return .f.
else &&!tableupdate(.t.,.t.,.Alias)
	* все хорошо, сохранились
	sqlcommit(.nConnection)
endif
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / локально представлени и неуникальные записи / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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