Delphi 2007 Невозможно изменить данные в событии перед прокруткой с использованием исходного кода, ошибка: набор данных не в режиме редактирования или вставки

Немного истории: у меня есть DBlistbox, содержащий текстовые описания, и я храню только коды этого в таблице mysql, которая отображается в dbgrid. Пользователь может выбрать несколько параметров, и мне нравится обрабатывать их и сохранять в виде значений, разделенных запятыми, в одном из столбцов (этот столбец невидим в dbgrid).

Прямо сейчас я могу заполнить список, когда пользователь прокручивает dbgrid, используя событие Afterscroll и Formcreate. Но когда я пытаюсь обработать список и обновить myquery за dbrgid, я получаю сообщение об ошибке «Набор данных не в режиме редактирования или вставки» - я делаю это в beforescroll

Пожалуйста помоги!! Я попытался установить набор данных в режим редактирования перед изменением, а затем, как только данные будут опубликованы, dbgrid, кажется, имеет забавные символы.


person Amiru    schedule 24.06.2011    source источник


Ответы (1)


Если я правильно понял, DBListBox не подключен к набору данных, размещенному в сетке? Это объясняет, почему набор данных сетки не устанавливается в режим редактирования при изменении данных в DBListBox.

В любом случае, всякий раз, когда вы изменяете данные, которые должны войти в таблицу mysql, вы должны переключать этот набор данных в режим редактирования. Затем вы можете поместить кодирование значений, разделенных запятыми, в событие OnBeforePost.

Когда набор данных прокручивается без каких-либо изменений в данных списка, нет необходимости сохранять какие-либо данные. Это достигается с помощью описанного выше подхода, так как без режима редактирования в этом случае не будет срабатывать событие BeforePost.

person Uwe Raabe    schedule 24.06.2011
comment
Спасибо за ваш ответ. да, список не связан с таблицей. Список обновляется, когда пользователь прокручивает до следующей строки, где я выделяю в списке параметры, выбранные пользователем. и что я хотел сделать, так это то, что непосредственно перед прокруткой обновите сетку, чтобы усложнить ситуацию, я установил cachedupdate = true, поэтому, если пользователь решит отменить, никакие обновления не будут отправлены в базу данных. Может быть, я все это неправильно делаю. Если у вас есть лучший подход, я весь в ушах - person Amiru; 24.06.2011
comment
Вы можете сделать, как я описываю в своем ответе. Когда пользователь что-то изменяет в списке, установите набор данных в режим редактирования. Затем, когда вы прокручиваете набор данных, выдается автоматический пост, который должен вызвать событие BeforePost. Там вы можете писать в поля по мере необходимости. - person Uwe Raabe; 24.06.2011
comment
Отлично, это сработало, я использовал щелчок даже в списке для обновления, так как для cachedupdate установлено значение true в dbgrid. Еще раз спасибо за всю помощь. - person Amiru; 25.06.2011