Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
При вызове DataSet.BeforeEdit проверяю, заблокирована ли запись, и если заблокирована хочу запретить редактировать поле. Делаю это так: DBGrid.EditorMode:=False; Первый раз это срабатывает, но на второй раз при попытке радактирования почему-то не срабатывает BeforeEdit и разрешается редактировать запись. Наверное, я в чем-то ошибаюсь. Помогите, пожалуйста. Может, вы знаете другие способы запрета редактирования в DBGrid если нек. ф-ия определяет данную запись заблокированной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 12:03 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
А так попробуй: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:19 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
>Может, вы знаете другие способы запрета редактирования в DBGrid если нек. ф-ия определяет данную запись заблокированной. 1. Запрешают редактировать на уровне TDataSet, а не на уровне TDBGrid. 2. А с чем и через что ты работаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:21 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
С MS SQL 7,TADOQuery,TDBGrid. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:28 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
Тогда поясни, как ты делаешь следующее: >проверяю, заблокирована ли запись, И что ты под этим понимаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:31 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
Каждая запись таблицы имеет поле, которое содержит время, когда кто-то начал редактировать запись. После окончания редактирования это поле становится NULL. У меня есть функция, которая проверяет по идентификатору записи, какое значение имеет это поле, ну и по этому делает вывод заблокирована запись или нет. Вообщем, вот кусок кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:38 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
Каждая запись таблицы имеет поле, которое содержит время, когда кто-то начал редактировать запись. После окончания редактирования это поле становится NULL. Интересный, однако, ты изобрел механизм блокировок. Ну а если пользователь начал редактировать запись, в поле прописалась дата и в этот момент прога виснет, или свет выключают, да по многим причинам. И теперь твоя запись "заблокирована". Ну не делают так в клиент/сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:42 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
Там еще будет тайм-аут на макс. время редактирования записи. Ну тогда посоветуйте какой-нибудь другой механизм или где про это можно почитать, а то кроме критики я ничего и не услышал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:45 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
Так уж и "заблокирована". Когда клиент отваливается по ошибке, БД делает Rollback и всё возвращается в исходное состояние. Только создавать специльное поле в каждой таблице - это уж слишком. По-моему лучше создать специльную таблицку, в которую записывать имя таблицы и индекс редактируемой записи. А проверку действительно надо делать в TDataSet. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:58 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
Ну если грубо, на пальцах: 1. Посылаем запрос к базе. 2. Получаем набор и кэшируем его на клиенте. 3. Пользователь редактирует данные. 4. Сохраняет данные. (вот здесь на время сохранения записи блокируются SQL Serverом) Это так называемые оптимистические блокировки. При этом считается, что пользователи не буду редактировать одинаковые данные, но такая ситуация не исключена. Как из нее выйти. Можно создать в таблице поли с типом данных timestamp, и при сохранении изменений ориетироваться на его значение, включить его в инструкцию WHERE. Соответсвенно если при сохранении изменений, инструкция UPDATE не обработала ни одной записи, значит ее уже кто-то поменял. Несохраненные записи можно отобразить клиенту, чтоб он принял решение, что с ними делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 14:00 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
Спасибо, может это действительно слишком и я переделаю потом, но для меня сейчас намного важнее вопрос интерфейса, т.е. как заставить DBGrid не давать редактировать заблокированную запись ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 14:02 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
Для pkarklin: Спасибо, все понятно, но специфика работы нашей организации требует чтобы другой вообще не смог попытаться редактировать запись, т.е. ситуация принятия решения(что делать?) после ввода данных не подходит, к сожалению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 14:06 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
А если попробовать просто FirmsGrid.ReadOnly:=True (ну или False) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 14:15 |
|
||
|
Проблема с DBGrid,DataSet и BeforeEdit
|
|||
|---|---|---|---|
|
#18+
Я пробовал, работает как-то подозрительно, но работает, не дает изменять. А вот как потом ReadOnly в False вернуть ? Вернее, как я узнаю что уже можно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 14:21 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32123748&tid=2118852]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
131ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 485ms |

| 0 / 0 |
