Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
INSERT после BEGIN TRANSACTION?
|
|||
|---|---|---|---|
|
#18+
m.first = 1 m.sysdate = date() INSERT INTO my_table FROM MEMVAR BEGIN TRANSACTION lSuccess = TABLEUPDATE(.T.,.T.,'my_table') IF NOT lSuccess ROLLBACK MESSAGEBOX("Не удалось обновить my_table") ELSE END TRANSACTION ENDIF GO TOP IN my_table Так написано в хелпе. Интересно, если вставка не удалась, почему не обертывается транзакцией сам INSERT INTO? Т.е. буфер в таблицу не сброшен и при попытке движения записи (GO TOP IN my_table) выдается ошибка, что правильно. Не нужно ли после ROLLBACK ставить TABLEREVERT для такого случая? Буду признателен за конструктивные ответы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 14:41 |
|
||
|
INSERT после BEGIN TRANSACTION?
|
|||
|---|---|---|---|
|
#18+
А зачем insert обертывать? Он же делается в буфер... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 14:46 |
|
||
|
INSERT после BEGIN TRANSACTION?
|
|||
|---|---|---|---|
|
#18+
Зависит от конкретной ситуации. Транзакцией обертывается только команда TableUpdate() для того, чтобы пользователь мог внести изменения в буфер в случае неудачной попытки сохранения. Ну, например, ты набивал 100 полей и сброс не произошел из-за ошибки в одном из них. Что, набивать все 100 полей по новой? Хотя, в данном случае, конечно, надо включить команду INSERT-SQL внутрь транзакции, поскольку это та модификация на которую пользователь не в силах повлиять. Обычно ведь не делают явной команды INSERT-SQL. Как правило, модифицируют либо напрямую буфер таблицы, либо Local View. Т.е. вместо редактирования переменных памяти следует редактировать непосредственно буфер таблицы и команда INSERT-SQL оказывается лишней. Кстати, ошибка у тебя возникает потому, что ты используешь строковую буферизацию. Если использовать табличную буферизацию, то хотя сброса буфера и не произойдет, но ты вполне сможешь перемещаться по записям таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 15:08 |
|
||
|
INSERT после BEGIN TRANSACTION?
|
|||
|---|---|---|---|
|
#18+
GO TOP толко, чтобы сдвинуть указатель. Получается так, что TABLEUPDATE отработал .T., а другой польз. не видит новых данных, пока я не сдвину указатель, (UNLOCK, USE IN и т.д.). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 15:55 |
|
||
|
INSERT после BEGIN TRANSACTION?
|
|||
|---|---|---|---|
|
#18+
ProblemНе нужно ли после ROLLBACK ставить TABLEREVERT для такого случая? Обязательно. Штатный режим. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Если в транзакции обновлялось несколько курсоров (что и является главным её назначением), то соотв. и реверт нужен для каждого, те что-то типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Вроде так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2004, 08:42 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32481171&tid=1596808]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 290ms |
| total: | 440ms |

| 0 / 0 |
