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

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

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

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

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

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

И что ты под этим понимаешь?
...
Рейтинг: 0 / 0
Проблема с DBGrid,DataSet и BeforeEdit
    #32123722
Youra G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Каждая запись таблицы имеет поле, которое содержит время, когда кто-то начал редактировать запись. После окончания редактирования это поле становится 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
Проблема с DBGrid,DataSet и BeforeEdit
    #32123729
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каждая запись таблицы имеет поле, которое содержит время, когда кто-то начал редактировать запись. После окончания редактирования это поле становится NULL.

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

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

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

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

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

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


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