powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблемы с уникальным ключом в грид
6 сообщений из 6, страница 1 из 1
Проблемы с уникальным ключом в грид
    #32712366
Andrey_Rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Помогите разобраться с одной проблемой. Vfp6.
У меня есть свободная таблица, на ее основе существует представление, которое является источником данных для грида. Два первые столбца в сетке содержат уникальный индекс. При попытке изменения одного из ключевых полей таким образом, чтобы нарушить уникальность индекса возникает ошибка Uniqueness of index primary is violated. И несколько кнопок. Если я нажимаю revert, то сделанные изменения отменяются. Как программно сделать перехват и отмену сделанных измений? Если я вставляю эту функцию в метод Error для грида, то Фокс пишет Fuction requires row or table buffering mode. Хотя в dataenviroment у представления установлен buffermodeoverride=3. Пробовал через командное окно задавать cursorsetprop 3 или 5. Не помогает. Если вешать функцию tablerevert() на кнопки то все нормально работает. Подскажите, что делать?
...
Рейтинг: 0 / 0
Проблемы с уникальным ключом в грид
    #32712388
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уникальный индекс построен для View или для исходной таблицы?

К сведению:

-) View можно индексировать только если оно находится в режиме строковой буферизации (3). После построения индекса можно переключиться в режим табличной буферизации (5)

-) Контроль уникальности значений индекса производится уже в буфере. Т.е. установка режима табличной буферизации не подавит сообщение о нарушении уникальности (если речь идет об индексе View)
...
Рейтинг: 0 / 0
Проблемы с уникальным ключом в грид
    #32712464
Andrey_Rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проиндексирована свободная таблица с ключом candidate. Сам view не индексированный.
...
Рейтинг: 0 / 0
Проблемы с уникальным ключом в грид
    #32712508
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по поводу отмены изменений попробуйте
использовать буферизацию и BEGIN TRANSACTION
TableUpdate, tablerevert и т.п.
...
Рейтинг: 0 / 0
Проблемы с уникальным ключом в грид
    #32712635
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_RbПроиндексирована свободная таблица с ключом candidate. Сам view не индексированный.
Тогда общая логика следующая:

1) Переключаешь View в режим табличной буферизации (это надо сделать ДО начала внесения изменений)

2) В кнопке "Сохранить" примерно такой код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
LOCAL lnRecno
select MyView
lnRecno=GetNextModified( 0 ,"MyView")
DO WHILE m.lnRecno<> 0 
	GO m.lnRecno
	IF TableUpdate(.F.,.T.,"MyView")
		* Вот эту запись (текущую в MyView) сбросить НЕ удалось
		* Причина ошибки по AERROR()
		* Запись в журнал ошибок
	ENDIF
	lnRecno=GetNextModified(m.lnRecno,"MyView")
ENDDO
* Просмотр журнала ошибок

Поскольку ты используешь свободные таблицы, то транзакция здесь не сработает (транзакция работает только с таблицами включенными в базу данных. Со свободными таблицами только с версии VFP9). Т.е. невозможно сделать сохранение по типу "все или ничего". Буферизация такого не позволяет сделать. Часть информации сброшенная до возникновения ошибки тем не менее попадет в исходную таблицу. Поэтому приходится писать лог ошибок.
...
Рейтинг: 0 / 0
Проблемы с уникальным ключом в грид
    #32712707
Andrey_Rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! я уже разобрался. Оказывается фокс при ошибке менял текущую рабочую область и поэтому tablerevert срабатывала для свободной таблицы. Теперь жестко прописал алиас представления и все заработало!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблемы с уникальным ключом в грид
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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