powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Транзакция
6 сообщений из 6, страница 1 из 1
Транзакция
    #32245642
Кэт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот строки кода....
nAnswer = Messagebox("Записать?",32+0+3,"Запись")

Do Case
Case nAnswer = 6 &&ДА
BEGIN TRANSACTION
IF TableUpdate()=.T.
END TRANSACTION
ELSE
ROLLBACK
MESSAGEBOX("Данные не были изменены. Повторите попытку позже","Изменение данных")
ENDIF

Case nAnswer = 7 &&НЕТ

Go Thisform.nrecno
Endif
= Tablerevert(.T.)

Case nAnswer = 2 &&ОТМЕНА
Thisform.Text2.SetFocus
Return
Endcase

Else
= Tableupdate(.T.)
Endif


Thisform.Release

Сижу и думаю..., в месте:

Case nAnswer = 6 &&ДА
BEGIN TRANSACTION
IF TableUpdate()=.T.
END TRANSACTION
ELSE
ROLLBACK
MESSAGEBOX("Данные не были изменены. Повторите попытку позже","Изменение данных")
ENDIF
...если по каким то причинам не удастся закончить
транзакцию(TableUpdate()=.F.),
куда вернет нас ROLLBACK (Почитав документацию не поняла)
Как мне в коде это предусмотреть-предложить повторить?-RETURN??
или как???
Может мне как то по другому все это сделать.
Спасибо за проявленное внимание и снисхождение(:о))
...
Рейтинг: 0 / 0
Транзакция
    #32245658
`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
`
Гость
> куда вернет нас ROLLBACK

В данном случае на сообщение 'An IF | ELSE | ENDIF statement is missing.'

> Как мне в коде это предусмотреть-предложить повторить?-RETURN??
или как???

Можно что-то вроде:
Код: 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.
nAnswer = Messagebox( "Записать?" , 32 + 0 + 3 , "Запись" )
Do Case
Case nAnswer =  6  &&ДА 
	BEGIN TRANSACTION
	DO WHILE .t.
		IF TableUpdate()
			END TRANSACTION
			EXIT 
		ELSE
			IF MESSAGEBOX( "Данные не были изменены." +CHR( 13 )+;
			 "Повторить попытку?" , 32 , "Запись" )= 7 
				ROLLBACK
				EXIT
			ENDIF 
		ENDIF 
	ENDDO
Case nAnswer =  7  &&НЕТ 
	 = Tablerevert(.T.) 
Case nAnswer =  2  &&ОТМЕНА 
	Go Thisform.nrecno
	Thisform.Text2.SetFocus
	Return
Endcase
Thisform.Release
...
Рейтинг: 0 / 0
Транзакция
    #32245702
`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
`
Гость
Вообще-то, я поднаврал, так можно сетку капитально подвесить вторым мессаджбоксом. Лучше так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Case nAnswer =  6  &&ДА 
	DO WHILE .t.
		BEGIN TRANSACTION
		IF TableUpdate()
			END TRANSACTION
			EXIT 
		ELSE
			ROLLBACK
			IF MESSAGEBOX( "Данные не были изменены." +CHR( 13 )+;
			 "Повторить попытку?" , 32 , "Запись" )= 7 
				= Tablerevert(.T.)
				EXIT
			ENDIF 
		ENDIF 
	ENDDO


PS ИМХО такие вещи лучше делать в QueryUnload.
...
Рейтинг: 0 / 0
Транзакция
    #32246091
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее ROOLBACK вернет базу данных в то состояние в котором она была на момент подачи команды BEGIN TRANSACTION с точки зрения данного клиента.

Т.е. будут отменены ВСЕ манипуляции с данными проделанные ДАННЫМ клиентом после подачи команды BEGIN TRANSACTION. Однако изменения сделанные другим клиентом отменены не будут. Другой вопрос, что при открытой транзакции другой клиент может сделать далеко не все, что угодно.

Guest привел вполне работоспособный код. Но лично я не стал бы этого делать. Оставил бы принятие решения на пользователя.

Т.е. например, сохранение реализовано по нажатию некой кнопки на форме (метод Click). Если сохранение не удалось, то просто прерываю выполнение метода Click(). Для повтора попытки сохранения пользователь должен еще раз нажать на ту же кнопку.

Если пользователь НЕ нажал на кнопку "Сохранить", но тем не менее произвел изменения, то при попытке выйти из формы я задаю вопрос: "Данные не сохранены и в случае выхода все изменния будут потеряны. Вы настаиваете на выходе?" Т.е. вопрос не о сохранении, а о выходе из формы. Для сохранения пользователь опять-таки должен САМ нажать на кнопку "Сохранить".

Автоматически выполняется только откат изменений. Сохранение требует осмысленных действий пользователя.
...
Рейтинг: 0 / 0
Транзакция
    #32248040
Кэт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть Владимир Вы предлагаете
Do Case
Case nAnswer = 6 &&ДА
IF TableUpdate()=.T.
ELSE
MESSAGEBOX("Данные не были изменены. Повторите попытку позже","Изменение данных")
CANCEL
ENDIF
Типа того
...
Рейтинг: 0 / 0
Транзакция
    #32248225
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Правильно. Разумеется предварительно так или иначе закрыв транзакцию.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Транзакция
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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