powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
25 сообщений из 27, страница 1 из 2
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129118
Фотография Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такой собсно вопрос.

(я как-то раньше это делал, и вот забыл)
Спасибо.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129124
alexia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты сам понял, что спросил? :)
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129132
Фотография Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял.

Если тебе непонятно попробую объяснить.

В ДБГриде (в наборе данных, который отображается в DBGrid, это чтобы Тигра не докапылся) есть поле, Юзер редактирует это поле и перед тем как значение сохранить надо проверить, чтобы оно было меньше того, которое пока што реально находится в базе в это й записи и в этом столбце.

Так понятно?

То есть мне надо узнать старое значение. Можно конечно сделать запрос в BeforPost, но нехоцца.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129140
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>которое пока што реально находится в базе в это й записи и в этом столбце.

Если в базе то никак. А то ведь кто-нибудь может и изменить это значение, пока ты его редактируешь. Ты часом не с остатками воюешь?
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129167
alexia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот теперь более понятно. Свойство есть ОldValue у TField, если не ошибаюсь.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129178
alexia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но, действительно, как говорит pkarklin, пока ты любовался DBGrid-ом кто-то другой мог изменить эначение на сервере...
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129179
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To alexia
>ОldValue у TField

А если за время между открытием набора и пока ды дошел до поля в базе это значение изменилось? Такие проверки надо делать в базе в момент сохранения изменений.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129181
Фотография Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не-не не в базе, это я попутал. Я имел ввиду в наборе данных.

Ты часом не с остатками воюешь?

Неа, но идея похожа.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129194
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда, как говорил alexia, сравнивай OldValue и NewValue. Но они только для режима кэшированных изменений. Я б вытащил еще одно поле и на BeforePost сравнивал.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129200
Фотография Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, заработало.

Код: plaintext
1.
2.
3.
4.
procedure TForm30.ADOStoredProc2BeforePost(DataSet: TDataSet);
begin
if (dataset.fieldbyname('Fkolvo').OldValue>dataset.fieldbyname('Fkolvo').Value) then
raise Exception.Create('Касяк');
end

А что значит тока для кэшированных изменений
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129201
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаем в доке:
Код: plaintext
The NewValue property is only usable when the data is accessed using a TClientDataSet component or cached updates is enabled.


LockType у тебя наверно ltBatchOptimistic?
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129205
Фотография Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
itOptimistic
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129238
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно

А у тебя так как надо работает. Я не работал ни с BDE ни с ADO в режиме не кэшированных изменений. Посмотри, у тебя OldValue часом не NULL возвращает.

И вот еще, что то не совпадает, то что ты написал в алгоритме:

надо проверить, чтобы оно было меньше того, которое пока што реально находится в базе в это й записи и в этом столбце.

И то как ты это проверяешь:
Код: plaintext
1.
if (dataset.fieldbyname('Fkolvo').OldValue>dataset.fieldbyname('Fkolvo').Value) then
raise Exception.Create('Касяк');


Может так надо:

Код: plaintext
1.
if (dataset.fieldbyname('Fkolvo').NewValue>dataset.fieldbyname('Fkolvo').OldValue) then
raise Exception.Create('Касяк');
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129244
Фотография Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, спасибо, я уже исправил в алгоритме. В попыхах знак перепутал. Думал никто не заметит.

А работает все правильно возвращает и старое и новое значение. Проверил. Все четко.

Я не работал ни с BDE ни с ADO в режиме не кэшированных изменений.
Почему?
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129250
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ну как почему. Чтоб я при каждом чихе (изменении записи и перемешении с нее) юзера постил все это в базу. Нет уж дудки. Открой форму документа, внеси вне нужные данные (причем в несколько datasetoв) и, подумав, нажми кнопочку сохранить. Вот тогда я все это в одной транзакции запостю на сервер. Клиент/серверные проги не пишут так как ты делаешь.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129257
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И мало того - данные сохраняют через хранимые процедуры на сервере
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129258
Фотография Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так и думал. Но мне уже отступать некуда. Прога написана уже на 80%.

И все-таки мне кацца есть случаи когда, полезно сразу постить. Например создал накладную, и пишешь в ней (в Гриде) товары. Причем юзер видит скока каждого товара есть на складе. Пока он эту таблицу заполняет, количество какого-нить товара на складе может уменьшиться. И в твоем вариатне повышается вероятность, что он пока вводит данные, они будут уже не корректны. А я вот после каждого изменения записи в накладной проверяю количество на складе и если хватает то постю.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129267
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Copper

В таких случаях, когда с одной товарной позицией склада работает несколько пользователей вводиться механизм резервирования. Пока пользователь редактирует документ товар резервируется и все последующие выборки остатков учитывают это резервирование. Когда пользователь сохраняет документ то этот резерв или снимается с остатка или удалается, если пользователь отказался сохранять документ. Причем такой механизм должен быть расчитан на случай непредвиденного отвала коннекта пользователя, выполнявшего резервирование.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129280
Фотография Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И чем же это отличается от моего варианта. Резервирование тоже придется постить после каждого изменения записи. Так зачем постить резервирование, а поом когда юзер захочет сохранить, то резервирование снимать и т.д.

Проще сразу то делать. Мне так кацца. Но я не спорю.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129293
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь идет про один набор в гриде, то может быть и да. Но возьми, например, вновь созданный документ на клиенте. Там открыта куча наборов, шапка содержание, связи и многое еще чего. Надо занести кучу данных, прежде чем его сохранить. Причем никаких идентификаторов для заполнения связанных таблиу еще в базе нет. В данном случаи все изменения пользователь делает в кэше на клиенте, а механизм резервирования отслеживает только изменения доступных остатков. Когда пользователь закончит все свои операции, он сохранит изменения через хп, про которые говорил tygra. Которые, в свою очередь, сделают все необходимые проверки и изменения.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129299
Фотография Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен. Но мне пока гораздо проще делать проверки после каждого изменения в каждом наборе данных, чем все сразу постить и предусмать вариант отката. Это требует большей квалификации. Я иду по пути чем проще тем лучше.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129308
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>чем все сразу постить и предусмать вариант отката

Откат изменений выполняется одной командой ROOLBACK TRANSACTION. А вот изменение одной цифры юзером может повлечь цепную реакцию в сложной системе (например ERP). И естественно, что хп, которая в качестве параметра принимает ету цифру будет содержать кучу проверок, манипуляций с данными и вызовов других хп, которые в случаи выполнения всех бизнес-правил завершаются COMMITOм, или ROOLBACKом в противном случаи.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129310
Фотография Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дык такие вещи с опытом приходят. В следующий раз так и буду делать. Я даже сохранил этот топик. Думаю пригодится.
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129321
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удачи. Буду вопросы welкам. :-)
...
Рейтинг: 0 / 0
Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
    #32129336
Фотография Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
А интересно получилось. Задал вопрос как узнать старое значение в поле, а кончилось чуть ли не пересмотром моего мировоззрения.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как запретить увеличивать число в столбце в DBGride (без обращения к серверу)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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