Как правильно внести данные в TDBEdit программно?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как правильно внести данные в TDBEdit программно?

Сообщение Apprehension » 15.12.2016 14:15:09

Добрый день!
Вопрос новичка. Использую TDBEdit для работы с БД MySQL, есть и TDBNavigator, соединенный с тем же источником данных.
Целочисленную информацию в компонент (dbeField1) можно внести или вручную, или по нажатию кнопки, которая вставляет в компонент некоторым образом рассчитанное значение. В обработчике нажатия кнопки использую команду dbeField1.Text := IntToStr(newValue1).
Если я вношу информацию в компонент вручную, проблем не возникает. Если нажимаю кнопку, то, хотя текст в компоненте появляется, он нигде в запросе не "прописывается", в навигаторе не делается активной кнопка сохранения изменений, а при перемещении фокуса на компопнент, в него возвращается старое значение.
Как мне правильно действовать?
Apprehension
незнакомец
 
Сообщения: 7
Зарегистрирован: 15.12.2016 12:56:03

Re: Как правильно внести данные в TDBEdit программно?

Сообщение Vadim » 16.12.2016 12:09:03

А в каком компоненте у Вас лежит набор данных, который Вы получили из MySQL? У этого компонента есть метод Post, который фиксирует внесённые изменения в этом наборе данных, а потом метод ApplyUpdates, который отсылает сделанные изменения на сервер. Если Вы изменяете не одну запись, а группу, то Post делаете после каждого изменения, а ApplyUpdates только один раз, когда в эту группу все изменения уже внесены.
В качестве альтернативы изменения\добавления данных в БД можно использовать метод коннектора с БД ExecuteDirect(). При этом данные надо отсылать в виде SQL-выражения. После чего, чтобы обновить Ваш набор данных (т.к. в этом случае мы его совсем не трогали), у компонента набора данных надо выполнить метод Refresh(). При этом способе данные на сервере оказываются гораздо быстрее, однако нужно сделать дополнительную манипуляцию с Вашим набором данных, чтобы Вы эти изменения увидели глазами. Если любоваться на данные нет необходимости, то второй метод самый лучший. ;-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Как правильно внести данные в TDBEdit программно?

Сообщение olegy123 » 17.12.2016 23:45:44

Почему не внести напрямую в DataSet (оно же TQuery/TTable)
DataSet.Edit (если новое то DataSet.Insert) - тем самым переводим DataSet в режим редактирования..
Далее просто DataSet.FieldByName('name').AsInteger=newValue1 записываем в нужное поле нужное значение
DataSet.Post() - отправляем в БД.

Дело в том, что запись в само поле dbeField1.Text - возможно не переводит DataSet в режим редактирования, следовательно DataSet не знает о существовании измененного поля для себя..
и после обновления(Refresh) или перехода(Next) на новую позицию в БД просто обновляет значение из базы, стирая введенное "dbeField1.Text := IntToStr(newValue1)"..
все зависит от реализации взаимодействие самого компонента dbeField1.


Когда я разрабатывал свой компонент TDBEdit на основе простого TEdit - мне приходилось учитывать вхождение(OnEnter) на редактирования поля текста компонента и самостоятельно переводить DataSet в режим вставки или редактирования.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Как правильно внести данные в TDBEdit программно?

Сообщение Vadim » 18.12.2016 12:22:02

По мотивам пламенного выступления olegy123... :D
Действительно, про перевод набора записей (DataSet) в режим редактирования я позабыл сказать. У компонента TDBEdit такой перевод происходит автоматически только при получении фокуса ввода. Поэтому, если у Вашего TDBEdit фокус не установлен, соответственно DataSet находится в режиме только просмотра записей, потому (для TDBEdit, который не с фокусом :) ), переводить DataSet в режим редактирования нужно вручную:
Код: Выделить всё
dbeField1.DataSource.Edit;
dbeField1.Text := IntToStr(newValue1);
dbeField1.DataSource.Post;
...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Как правильно внести данные в TDBEdit программно?

Сообщение Apprehension » 23.12.2016 12:31:34

Да, спасибо, всё получилось. Забыл перевести источник данных (запрос) в режим редактирования. )
Apprehension
незнакомец
 
Сообщения: 7
Зарегистрирован: 15.12.2016 12:56:03


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 77

Рейтинг@Mail.ru