Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема с DBGrid,DataSet и BeforeEdit / 15 сообщений из 15, страница 1 из 1
20.03.2003, 12:03
    #32123598
Youra G.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
При вызове DataSet.BeforeEdit проверяю, заблокирована ли запись, и если заблокирована хочу запретить редактировать поле.

Делаю это так:
DBGrid.EditorMode:=False;

Первый раз это срабатывает, но на второй раз при попытке радактирования почему-то не срабатывает BeforeEdit и разрешается редактировать запись. Наверное, я в чем-то ошибаюсь. Помогите, пожалуйста.

Может, вы знаете другие способы запрета редактирования в DBGrid если нек. ф-ия определяет данную запись заблокированной.
...
Рейтинг: 0 / 0
20.03.2003, 13:19
    #32123690
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
А так попробуй:
Код: plaintext
1.
...
Abort;
...
Рейтинг: 0 / 0
20.03.2003, 13:21
    #32123694
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
>Может, вы знаете другие способы запрета редактирования в DBGrid если нек. ф-ия определяет данную запись заблокированной.

1. Запрешают редактировать на уровне TDataSet, а не на уровне TDBGrid.
2. А с чем и через что ты работаешь?
...
Рейтинг: 0 / 0
20.03.2003, 13:28
    #32123703
Youra G.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
С MS SQL 7,TADOQuery,TDBGrid.
...
Рейтинг: 0 / 0
20.03.2003, 13:31
    #32123709
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
Тогда поясни, как ты делаешь следующее:

>проверяю, заблокирована ли запись,

И что ты под этим понимаешь?
...
Рейтинг: 0 / 0
20.03.2003, 13:38
    #32123722
Youra G.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
Каждая запись таблицы имеет поле, которое содержит время, когда кто-то начал редактировать запись. После окончания редактирования это поле становится NULL.

У меня есть функция, которая проверяет по идентификатору записи, какое значение имеет это поле, ну и по этому делает вывод заблокирована запись или нет.

Вообщем, вот кусок кода:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TDataMod.FirmsQueryBeforeEdit(DataSet: TDataSet);
begin
  if IsRowLocked(DataSet) then
    LockCurrentRow(DataSet);
  else begin
    FirmsGrid.EditorMode:=False;;
    ShowMessage('Эта запись сейчас редактируется другим прользователем.');
  end;
end;
...
Рейтинг: 0 / 0
20.03.2003, 13:42
    #32123729
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
Каждая запись таблицы имеет поле, которое содержит время, когда кто-то начал редактировать запись. После окончания редактирования это поле становится NULL.

Интересный, однако, ты изобрел механизм блокировок. Ну а если пользователь начал редактировать запись, в поле прописалась дата и в этот момент прога виснет, или свет выключают, да по многим причинам. И теперь твоя запись "заблокирована".

Ну не делают так в клиент/сервер.
...
Рейтинг: 0 / 0
20.03.2003, 13:45
    #32123732
Youra G.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
Там еще будет тайм-аут на макс. время редактирования записи.

Ну тогда посоветуйте какой-нибудь другой механизм или где про это можно почитать, а то кроме критики я ничего и не услышал.
...
Рейтинг: 0 / 0
20.03.2003, 13:58
    #32123747
dasistgut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
Так уж и "заблокирована". Когда клиент отваливается по ошибке, БД делает Rollback и всё возвращается в исходное состояние. Только создавать специльное поле в каждой таблице - это уж слишком. По-моему лучше создать специльную таблицку, в которую записывать имя таблицы и индекс редактируемой записи. А проверку действительно надо делать в TDataSet.
...
Рейтинг: 0 / 0
20.03.2003, 14:00
    #32123748
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
Ну если грубо, на пальцах:
1. Посылаем запрос к базе.
2. Получаем набор и кэшируем его на клиенте.
3. Пользователь редактирует данные.
4. Сохраняет данные. (вот здесь на время сохранения записи блокируются SQL Serverом)

Это так называемые оптимистические блокировки. При этом считается, что пользователи не буду редактировать одинаковые данные, но такая ситуация не исключена. Как из нее выйти. Можно создать в таблице поли с типом данных timestamp, и при сохранении изменений ориетироваться на его значение, включить его в инструкцию WHERE. Соответсвенно если при сохранении изменений, инструкция UPDATE не обработала ни одной записи, значит ее уже кто-то поменял. Несохраненные записи можно отобразить клиенту, чтоб он принял решение, что с ними делать.
...
Рейтинг: 0 / 0
20.03.2003, 14:02
    #32123749
Youra G.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
Спасибо, может это действительно слишком и я переделаю потом, но для меня сейчас намного важнее вопрос интерфейса, т.е. как заставить DBGrid не давать редактировать заблокированную запись ?
...
Рейтинг: 0 / 0
20.03.2003, 14:06
    #32123756
Youra G.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
Для pkarklin:

Спасибо, все понятно, но специфика работы нашей организации требует чтобы другой вообще не смог попытаться редактировать запись, т.е. ситуация принятия решения(что делать?) после ввода данных не подходит, к сожалению.
...
Рейтинг: 0 / 0
20.03.2003, 14:15
    #32123770
Taki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
А если попробовать просто FirmsGrid.ReadOnly:=True (ну или False)
...
Рейтинг: 0 / 0
20.03.2003, 14:21
    #32123788
Youra G.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
Я пробовал, работает как-то подозрительно, но работает, не дает изменять.
А вот как потом ReadOnly в False вернуть ? Вернее, как я узнаю что уже можно ?
...
Рейтинг: 0 / 0
20.03.2003, 15:43
    #32123929
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DBGrid,DataSet и BeforeEdit
Когда опять редактировать начнешь :)

Ты уж лучше не грид и датасет переводи в ReadOnly
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема с DBGrid,DataSet и BeforeEdit / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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