View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0002857 | SAS.Планета | Баг / Bug | public | 15-10-2015 15:54 | 03-03-2017 09:11 |
| Reporter | sheavy | Assigned To | zed | ||
| Priority | normal | Severity | minor | Reproducibility | always |
| Status | resolved | Resolution | fixed | ||
| Platform | Windows | OS | 7 | OS Version | Professional |
| Product Version | 151010 | ||||
| Target Version | 151111 | Fixed in Version | 151111 | ||
| Summary | 0002857: Редактирование базы данны меток двумя пользователями | ||||
| Description | - Добавление меток: Возникает ошибка если один пользователь добавил метку после того как другой пользователь добавил другую метку. Текст ошибки: EMarkSystemORMError: MarkSystemORM: ID id empty! - Редактирование меток: если метка была удалена другим пользователем, после сохранения изменений, метка пропадает без объяснения причин. Кажется, есть смысл перед сохранением проверить, есть ли она еще в базе и если нет, сообщить об этом. - Удаление меток: проходит без ошибок. | ||||
| Steps To Reproduce | Ошибка воспроизводится при работе Microsoft SQL через ODBC. Версия 151410.9122 Nigtly | ||||
| Additional Information | Пользуясь случаем, хотел поблагодарить за инцидент 0002854: Работа с Microsoft SQL через ODBC | ||||
| Tags | БД, метки, многопользоватеская | ||||
|
|
О, а это грабли из-за дефолтной оптимизации в mORMot: > by default, any INSERT will compute the new ID from an internal variable > - it is very fast and reliable, unless external IDs can be created > outside this engine > - you can set EngineAddUseSelectMaxID=true to execute a slower > 'select max(ID) from TableName' SQL statement before each EngineAdd() > - a lighter alternative may be to call EngineAddForceSelectMaxID only when required И при попытке выставить EngineAddUseSelectMaxID в True, как сказано в доках, вылазит ещё какая-то ошибка, опять же, внутри mORMot: "TODBCStatement - TODBCLib error: [24000] [Microsoft][ODBC Driver 11 for SQL Server]Недопустимое состояние курсора (0)". Интересно, что 2 метки даёт поставить, а вот на третьей падает. Надо идти на форум synopse и выяснять что не так... |
|
|
Показательно, что в тоже самое время, в случае с MySQL всё работает просто замечательно. |
|
|
Да, и правда, в MySQL гораздо лучше. Но оказывается даже для него второй пункт актуален: > - Редактирование меток: если метка была удалена другим пользователем, после сохранения изменений, метка пропадает без объяснения причин. Кажется, есть смысл перед сохранением проверить, есть ли она еще в базе и если нет, сообщить об этом. |
|
|
>второй пункт актуален: Это другая проблема и её надо решать отдельно. |
|
|
Имхо, самый простой способ решать проблемы конфликтов редактирования (а удаление, это тоже частный случай редактирования) это добавить в метку что-то типа версии (например хэш данных, или счетчик из базы данных, или вообще GUID), которое будет автоматически изменяться при каждом сохранении, и перед сохранением проверять не поменялась ли эта версия. И если поменялась (удаление метки сбрасывает версию в 0), то нужно как минимум сообщать об этом пользователю, а как максимум пытаться автоматически мержить изменения (у нас есть предыдущая версия, есть то что в базе сейчас, и есть то что на редактировали). Но это все потребует кучу изменений в самом САС. |
|
|
Я когда занимался проектированием схемы БД спрашивал - а не добавить ли ещё чего-нибудь. Предложений тогда я так и не услышал. Хотел даже в метки таймштампы писать, но vasketsov меня от этого отговорил. Поэтому, сейчас способа разрешить конфликт редактирования невозможно. Будет сохраняться последнее изменение без всяких вопросов. По поводу удаления редактируемой метки - надо будет посмотреть. |
|
|
А я, когда говорил что ничего не нужно, подразумевал исключительно однопользовательский режим работы с метками. Поддержку других СУБД ты прикрутил позже. А вообще никто не заставляет использовать одну схему базы для локальной базы и для работы с сервером. |
|
|
>>второй пункт актуален: > Это другая проблема и её надо решать отдельно. сделал отдельный тикет 0002859 (нет прав сделать связь) |
|
|
Выяснил что не так: synopse.info/forum/viewtopic.php?pid=18248 - оказывается, помогает отключение встроенного кэширования стейтментов, так что отключил и падать перестало. Возможно это баг фреймворка, так что если его пофиксят, то кэширование можно будет включить назад. И возможно это актуально только для MS SQL, но для надёжности отключил для всех СУБД. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 15-10-2015 15:54 | sheavy | New Issue | |
| 15-10-2015 15:55 | sheavy | Tag Attached: метки | |
| 15-10-2015 15:55 | sheavy | Tag Attached: многопользоватеская | |
| 15-10-2015 15:56 | sheavy | Tag Attached: БД | |
| 15-10-2015 19:23 | zed | Note Added: 0016569 | |
| 15-10-2015 19:26 | zed | Status | new => confirmed |
| 15-10-2015 19:33 | zed | Note Added: 0016570 | |
| 16-10-2015 14:46 | sheavy | Note Added: 0016573 | |
| 16-10-2015 14:48 | zed | Note Added: 0016574 | |
| 16-10-2015 15:21 | vdemidov | Note Added: 0016575 | |
| 16-10-2015 15:30 | zed | Note Added: 0016576 | |
| 16-10-2015 15:33 | vdemidov | Note Added: 0016577 | |
| 16-10-2015 15:57 | sheavy | Note Added: 0016578 | |
| 16-10-2015 16:32 | vdemidov | Relationship added | related to 0002859 |
| 20-10-2015 18:51 | zed | Note Added: 0016602 | |
| 20-10-2015 18:52 | zed | Status | confirmed => resolved |
| 20-10-2015 18:52 | zed | Fixed in Version | => 151111 |
| 20-10-2015 18:52 | zed | Resolution | open => fixed |
| 20-10-2015 18:52 | zed | Assigned To | => zed |
| 20-10-2015 18:52 | zed | Product Version | .Nightly => 151010 |
| 20-10-2015 18:52 | zed | Target Version | => 151111 |
| 20-10-2015 18:52 | zed | Note Edited: 0016602 | |
| 03-03-2017 09:11 | vdemidov | Relationship added | related to 0003186 |
| 08-08-2025 13:22 | zed | Category | Баг => Баг / Bug |