Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
4 / 4 / 0
Регистрация: 15.06.2011
Сообщений: 75

Как определить редактировались ли данные? Как редактировать данные через DBEditEh

11.02.2018, 21:15. Показов 2187. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Снова требуется ваш совет.
Пишу программу, через которую пользователь будет редактировать реквизиты по покупателям. Сохранение будет реализовано через кнопку (на скриншоте отсутствует).



Есть форма, с DBGridEh и простыми Edit'ами.
В Edit'ах отражаются данные активной строки DBGridEh.
Если пользователь что-то редактировал, но вдруг решил перейти на другую строку или совсем закрыть форму через крестик, то должно выводиться сообщение что-то вроде "Вы хотите сохранить изменения?". Дак вот. Как узнать были ли изменения? Понятно, что у edit есть событие OnChange и можно сделать проверку, но придется ведь каждый edit так прописать, а их у меня будет еще много. И не только Edit'ы.

Изначально вместо Edit были DbEditEh, но не хватило понимания сделать через них. У DataSource поставила AutoEdit в значение false. Отредактировала один DBEdit, перехожу на другой, вылетает ошибка "dataset not in edit or insert mode delphi". Предполагаю потому, что AutoEdit=false и он требует от меня Edit, post и т.д. и т.п. Если стоит AutoEdit=true, данные конечно же меняются сразу. А мне, напоминаю, необходимо сохранение через нажатие на кнопку. Может можно прописать в BeforePost, что если запись находится в режиме редактирования (через свойство state можно это сделать, насколько верно я прочла в интернете) и пользователь не нажимал кнопку сохранить, то Abort. А на события FormClose и DBGridEhCellClick повесить диалоговое окно, если запись редактировалась, но не была сохранена. Но имеет ли место такой вариант?

Хотелось бы услышать ваше мнение, советы, ссылки, подсказки. Важна любая помощь. Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2018, 21:15
Ответы с готовыми решениями:

Как редактировать данные через DataGridView
Всем привет. кто может подсказать как редактировать данные через DataGridView???

Как можна редактировать данные в всех колонках listView через вторую форму
На первой форме мы дважды щелкаем на строку listView, открывается вторая форма и даные передаються в textBox1 и textbox2 где редактируем и...

Как редактировать данные?
Привет всемю. У меня есть страничка длая редактирования данных. Вызвать часть данных указанных при регистрации но так и не смог привязать...

5
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
12.02.2018, 02:51
Цитата Сообщение от Tanushka=) Посмотреть сообщение
Хотелось бы услышать ваше мнение
Редактирование в DBGrid это из эпохи неандертальцев. (Которые вымерли возможно именно поэтому
0
Модератор
 Аватар для D1973
9910 / 6447 / 2455
Регистрация: 21.01.2014
Сообщений: 27,365
Записей в блоге: 3
12.02.2018, 07:24
Tanushka=),
1. В секции private класса формы объявите переменную Saved
Delphi
1
2
3
4
5
private { Private declarations }
    Saved: boolean;
public
    { Public declarations }
end;
2. В событии создания формы инициализируйте ее
Delphi
1
2
3
4
procedure TForm1.FormCreate(Sender: TObject);
begin
 Saved := true;
end;
3. Создайте для одного из контролов, например для Edit1 обработчик события OnChange, в котором измените значение переменной
Delphi
1
2
3
4
procedure TForm1.Edit1Change(Sender: TObject);
begin
 Saved := false
end;
4. Назначьте в инспекторе объектов этот обработчик для всех остальных нужных контролов (Эдиты, Комбобоксы, Мемо и т.д.)
5. В событии клика на кнопку сохранения измените значение переменной
Delphi
1
2
3
4
5
procedure TForm1.btn_SaveClick(Sender: TObject);
begin
//Тут Ваш код сохранения...
 Saved := true;
end;
6. В событии формы OnCloseQuery пропишите
Delphi
1
2
3
4
5
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 if not Saved then ShowMessage('Данные изменены и не сохранены! Сохраните сейчас же!');
 CanClose := Saved;
end;
и, собственно, все...
1
4 / 4 / 0
Регистрация: 15.06.2011
Сообщений: 75
12.02.2018, 09:25  [ТС]
northener, вероятно вы не очень внимательно читали мой вопрос. dbgrid только отображает данные в моем случае.
0
7 / 7 / 2
Регистрация: 21.07.2016
Сообщений: 68
12.02.2018, 11:40
Данные в DBGrid получаете из запроса?
0
4 / 4 / 0
Регистрация: 15.06.2011
Сообщений: 75
12.02.2018, 15:17  [ТС]
RatWar, да

D1973, спасибо большое за вариант!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.02.2018, 15:17
Помогаю со студенческими работами здесь

Как редактировать данные в TMemoryStream
Помогите, я уже запутался! Мне необходимо загрузить файл в TMemoryStream, изменить определенное значение "xx" в середине файла на...

Как редактировать данные в таблице html
Я делаю изменяемое расписание для сайта. Вообщем запись уроков я сделал, осталась малость - это занести эти данные в созданную таблицу,...

Как редактировать данные в БД с помощью SQL запроса
public void RedDolj(string NazDolj)// метод редактирования ДОЛЖНОСТИ { string auery = string.Format("UPDATE ...

Как редактировать данные из двух связанных таблиц?
компонент fdquery. имеются данные таблицы l2,l3. в l2 столбцы cтрана,город,ид. в l3 столбец формап,ид1. помогите отредактировать...

Как редактировать данные в таблице созданной запросом?
Нужно редактировать данные прямо таблице созданной запросом. Как это можно сделать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru