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

проблемка, вешаю тригер на удаление
если нельзя удалять, пробую в процедуре обработки рекалл, не работает, а если с фальшью выхожу - системное сообщение тригер файлед реверт...

как бы отменять удаление не напрягая пользователя системными сообщениями на английском языке?

С уважением FFF
...
Рейтинг: 0 / 0
тригер
    #34389780
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FFF1всем добрый день

проблемка, вешаю тригер на удаление
если нельзя удалять, пробую в процедуре обработки рекалл, не работает, а если с фальшью выхожу - системное сообщение тригер файлед реверт...

как бы отменять удаление не напрягая пользователя системными сообщениями на английском языке?

С уважением FFF
Используй буферизацию.

Т.е. удаление делай в буфере, по TableUpdate() сброс буфера. В случае отказа эта функция просто вернет .F. ничего не сообщая. По AERROR() уточняешь причину отказа и можешь выдать свое сообщение пользователю

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select MyTab
DELETE
IF TableUpdate() = .F.
	LOCAL laError( 1 )
	=AERROR(laError)
	* Анализ массива laError для уточнения причины ошибки
ENDIF

Для сведения

Если триггер был создан автоматически при помощи Referential Integrity, то в случае ошибки триггера формируется глобальный массив gaErrors(n,12) содержащий уточнения причины отказа триггера. Дело в том, что AERROR() просто вернет код отказа триггера, но не уточнит какого именно (по какой таблице) и почему. Это все будет записано в глобальном массиве gaErrors
...
Рейтинг: 0 / 0
тригер
    #34390187
FFF1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извиняюсь, а нельзяли както перехватывать реакцию таблицы на .f. тригера, чтобы не система писала revert а я по руски сообщил и сам сделал реверт..
...
Рейтинг: 0 / 0
тригер
    #34390234
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FFF1извиняюсь, а нельзяли както перехватывать реакцию таблицы на .f. тригера, чтобы не система писала revert а я по руски сообщил и сам сделал реверт..

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
LOCAL llSuccess
llSuccess = .F.
Try
	select MyTab
	Delete
	llSuccess = .T.
Cath to Err
      ?[  Error: ] + STR(oErr.ErrorNo) 
      ?[  LineNo: ] + STR(oErr.LineNo) 
      ?[  Message: ] + oErr.Message 
      ?[  Procedure: ] + oErr.Procedure 
      ?[  Details: ] + oErr.Details 
      ?[  StackLevel: ] + STR(oErr.StackLevel) 
      ?[  LineContents: ] + oErr.LineContents
      ?[  UserValue: ] + oErr.UserValue 
EndTry

IF m.llSuccess = .F.
	* Была ошибка
ENDIF
...
Рейтинг: 0 / 0
тригер
    #34390463
VictoryS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я работаю с Oracle и VFP

БД не любят операции удаления я ее заменяю операцией update
Но для этого при построении всех таблиц добавляю два поля
unicod С(10) и out C(1) которые по умолчанию устанавливаю unicod = sys(2015) out = [1] в свойствах таблицы.
Когда мне необходимо удалить запись я устанавливаю out = [0] все поля (кроме unicod) очищаю.
В дальнейшем эту запись испльзую для новой записи.

При этом -

Кнопка Удаление :

*!* SET STEP ON

IF ctunicod <> [ ]
update tabvid SET vidp = 0,;
opis = [],;
poz = [],;
out = [0];
WHERE tabvid.unicod = ctunicod
WAIT [Проведено вилучення] WINDOW AT 20,20 TIMEOUT 2
ENDIF
ntvidp = 51
ctvidp = []
ctopis = []
ctznachv = []
ctunicod = [ ]
ThisForm.text1.Refresh
ThisForm.text2.Refresh
ThisForm.text3.Refresh
thisform.Grid1.setfocus
*!* ThisForm.Release
*!* DO FORM Forms\fredind
RETURN

Кнопка ЗАПИСЬ :

*!* SET STEP ON

IF ctunicod <> [ ]
BEGIN TRANSACTION
update tabvid SET vidp = ntvidp,;
opis = ALLTRIM(ctopis),;
poz = ALLTRIM(ctznachv);
WHERE tabvid.unicod = ctunicod
WAIT [Проведено коригування] WINDOW AT 20,20 TIMEOUT 2
*** Внесення змін в довідник табелю
update tabln SET znachv = ALLTRIM(ctznachv);
WHERE tabln.vidp = ntvidp
END TRANSACTION
WAIT [В зв'язку з проведеною зміною в довіднику типів відпусток проведено коригування довідника табелю] WINDOW AT 20,20 TIMEOUT 2

ELSE
RELEASE atabvid
SELECT unicod FROM tabvid WHERE out = [0];
INTO ARRAY atabvid
IF TYPE([atabvid]) # && Если массив существует

update tabvid SET vidp = ntvidp,;
opis = ctopis,;
poz = ctznachv,;
out = [1];
WHERE tabvid.Out = [0] AND tabvid.Unicod = atabvid(1)
Else
INSERT INTO tabvid (vidp,opis,poz);
VALUES (ntvidp,ALLTRIM(ctopis),ALLTRIM(ctznachv))
EndIf

WAIT [Проведено запис] WINDOW AT 20,20 TIMEOUT 2
ENDIF
ntvidp = 51
ctvidp = [ ]
ctopis = []
ctznachv = []
ctunicod = [ ]
ThisForm.text1.Refresh
ThisForm.text2.Refresh
ThisForm.text3.Refresh
thisform.Grid1.setfocus
*!* ThisForm.Release
*!* DO FORM Forms\fredind
RETURN

Если понравилось - Удачи.
...
Рейтинг: 0 / 0
тригер
    #34390809
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я работаю с Oracle и VFP
БД не любят операции удаления я ее заменяю операцией update


Хм-м-м...
Не имеет отношение к FoxPro, но откуда такие сведения про нелюбовь к удалениям (особенно в Oracle) и о том, что лучше так - В дальнейшем эту запись испльзую для новой записи.

PS может, это все таки больше относится к dbf ?
...
Рейтинг: 0 / 0
тригер
    #34390952
FFF1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ребята, я тоже часто работаю с оракл и мсскл,
здесь как раз другой случай - именно база вфр однопользовательская прога
т.е. я не думаю о сетевых конфликтах и прочее
нужно просто на уровне базы отработать удаление
чтобы помечая на удаление в гриде запись пользователь не ловил системные сообщения фокса о тригерах (файлед) и т.д.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / тригер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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