|
|
|
FRM-40657
|
|||
|---|---|---|---|
|
#18+
При попытке обновления записи в форме вылазит такая ошибка FRM-40657. От куда Формсы узнают что этой записи нет в БД? Предыстория возникновения ошибки: 1) Есть блок БД, в нём выбраны записи 2) По кнопке, все значения текущей записи сохраняются во временных переменных и сама запись прочищается (через clear_record) 3) По другой кнопке, запись обратно восстанавливается, через Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2011, 12:05 |
|
||
|
FRM-40657
|
|||
|---|---|---|---|
|
#18+
Ura!, Мой был косяк, триггер стоял, который первичный ключ заново генерил. Это поправил, но проблема осталась. Теперь выдаёт ошибку FRM-40654, Запись обновлена другим пользователем. Откуда он узнал, что его кто-то обновил, если её по сути никто не обновлял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2011, 12:26 |
|
||
|
FRM-40657
|
|||
|---|---|---|---|
|
#18+
Ura!, А попробуйте посмотреть - какой реальный статус у строки после всех ваших манипуляций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2011, 12:34 |
|
||
|
FRM-40657
|
|||
|---|---|---|---|
|
#18+
Так и не понял, как он определяет что запись изменилась и как его обмануть. Если кто знает, отпишитесь, чтобы не городить огород (см. далее) Придумал такой workarround, в нём есть косяк, его конечно тоже можно полечить, но для меня он не критичен. Косяк: Если запустить форму в двух разных сессиях, сделать выборку данных и в одной сессии изменить значение в строке и сохранить. То вторая сессия об этом не будет знать ни сном ни духом и эту же самую строку тоже сможет обновить, затерев изменения первой. Теперь воркэраунд: 1) Создал на блок свой триггер ON-LOCK, в нём сам лочу строку (с помощью курсора for update). LOCK_RECORD не использую!!! 2) В блоке выставил следующие свойства: Код: plaintext 1. 2. Во время придумывания этого решения, напоролся на несколько граблей, так до конца и не поняв поведение формсов. Может кто объяснит? 1) Если в ON-LOCK LOCK_RECORD не использовать, а свойства у блока будут такие: Код: plaintext 1. 2. Я так понял, что при использовании LOCK_RECORD, формсы запоминают где-то у себя ROWID и потом при обновлении его используют, если же мы не вызывали LOCK_RECORD, то он не знает какой ROWID у записи и валится в такую непонятную ошибку. 2) Если в дополнение своей блокировки вставить всё таки LOCK_RECORD, то приходим к тому от чего ушли: FRM-40654, Запись обновлена другим пользователем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2011, 13:47 |
|
||
|
FRM-40657
|
|||
|---|---|---|---|
|
#18+
Чтобы не городить огород, давайте все-таки уточним задачу. Я так понял, у вас есть некий долгоиграющий запрос, результаты которого вы показываете пользователю. После чего, пользователь выбирает некую строку и что-то должен с ней сделать. Вот это "что-то" мне и непонятно - зачем делать clear_record, а затем имитировать другие данные в этой строке, как будто она был выбрана из базы? Как-то странно. Что пользователю нужно получить в итоге (т.е., не в терминах clear_record/create_record, а человеческими словами)? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2011, 09:51 |
|
||
|
FRM-40657
|
|||
|---|---|---|---|
|
#18+
Есть два блока, один БД с долгоиграющим запросом, второй блок не БД. Пользователь по кнопке перекидывает как бы строчку из одного блока в другой (формирует список). При перекидывании записи во второй блок из первого она пропадает (clear_record). Но пользователь может и обратно перекинуть запись в первый блок. Тогда из второго блока она пропадает, а вот в первом должна появиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2011, 10:51 |
|
||
|
FRM-40657
|
|||
|---|---|---|---|
|
#18+
Может, вам проще будет построить не-database блоки, а сформировать их на when-new-block-instance? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2011, 11:12 |
|
||
|
FRM-40657
|
|||
|---|---|---|---|
|
#18+
-=APS=-, Боюсь, загнутся формсы. В блоке БД > 100 тыс. записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2011, 11:26 |
|
||
|
FRM-40657
|
|||
|---|---|---|---|
|
#18+
И пользователь просматривает все 100 тыс строк визуально? Гм... Три раза гм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2011, 14:37 |
|
||
|
FRM-40657
|
|||
|---|---|---|---|
|
#18+
Конечно не просматривает. Но если взять идею блока не БД и заполнять его при входе. Я может неправильно понял, или чего-то не знаю, разве не придётся тогда загнать в него все записи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2011, 14:51 |
|
||
|
FRM-40657
|
|||
|---|---|---|---|
|
#18+
Ura!, У блока есть свойство - Query All Records(Запросить Все Записи) Код: plaintext 1. 2. 3. 4. а загрузится столько сколько вы указали в Number of Records Displayed. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2011, 15:23 |
|
||
|
FRM-40657
|
|||
|---|---|---|---|
|
#18+
авторКонечно не просматривает. Но если взять идею блока не БД и заполнять его при входе. Я может неправильно понял, или чего-то не знаю, разве не придётся тогда загнать в него все записи?Да, в этом сысле, вы правы. Но все-таки, лично для меня очень сомнительна идея выборки, которая потенциально может выдать пользователю 100 тыс строк для просмотра/анализа. В идеале, описанная вами форма должна была бы предоставлять возможность быстрого поиска необходимых данных по внятным критериям, которые бы мог указывать пользователь, а затем он бы добавлял кнопкой некоторые из строк в свою "буферную зону". Но вы заранее поставили достаточно "злобные" условия - выборка долгоиграющая :) Может, потому и долгоиграющая, что возвращает 100 тыс строк? :) Кстати, а обязательно ли убирать строки из первого блока? Может, их просто покрасить в альтенативный цвет в instance property? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2011, 15:52 |
|
||
|
|

start [/forum/topic.php?fid=51&fpage=22&tid=1878716]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 175ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...