Редактирование одновременно нескольких записей

Вопросы стыковки визуальных компонент (DataControls, EhGrid, VirtualTreeView, DevExpress и т.п.) с данными из БД.

Модераторы: kdv, CyberMax

Ответить
fmcoder
Сообщения: 46
Зарегистрирован: 24 сен 2007, 20:57

Редактирование одновременно нескольких записей

Сообщение fmcoder » 13 окт 2007, 22:56

Здравствуйте, уважаемые.

Можно ли сделать сабж?

Т.е. у меня есть грид, с Multiselect, также есть например DBLookupComboBox связанный с тем же датасетом, что и грид.
Хочется сделать так, что когда пользователь выделяет несколько записей, меняет значение в комбобоксе и в итоге это значение автоматом менялось у всех выделенных строк.

Сначала хотел сделать вручную, но при изменении значения в комбобоксе у выделенных строк сбоку появляется значок редактирования... Но значение меняется только у записи которая была выделена последней. Я думаю, может надо как-то изменить UpdateSQL или еще где-то подкрутить?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 14 окт 2007, 09:36

тебе как минимум надо самому сконструировать update, где будут фигурировать идентификаторы перечисленных записей.
update table
set field=newvalue
where (pkfield = x1) or (pkfield = x2) or (pkfield = x3)...

fmcoder
Сообщения: 46
Зарегистрирован: 24 сен 2007, 20:57

Сообщение fmcoder » 14 окт 2007, 19:53

Я сделал так в UpdateSQL у датасета, но все равно редактируется только одна запись...
Может этот запрос надо где-то из другого места вызывать? Неужели у каждого контрола в событии на изменение значения?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 15 окт 2007, 00:24

Я сделал так в UpdateSQL у датасета
"так" - это как? При нажатии кнопки код проходит по выбранным в гриде записям, получает их id и формирует запрос как я написал?
кроме того, связываться с updateSQL в данном случае нельзя. Т.к. датасет, выполняя такой запрос, предполагает что обновилась только одна запись, и будет всегда материться, если записей <> 1.
Т.е. нужен отдельный ibquery.

fmcoder
Сообщения: 46
Зарегистрирован: 24 сен 2007, 20:57

Сообщение fmcoder » 15 окт 2007, 01:27

Да, формируется запрос в updatesql "update ... set ... where (id=x) or (id=y) or ... ". Но это не работает. И даже датасет не матерится :(

По идее, все довольно просто, есть список ID записей, которые нужно изменить, и есть окно с контролами (TDBxxx), в которых данные - остается только сделать запрос "update ... " и выполнить его самостоятельно. Контролы же могут править за раз только одну запись, так? Если да, то не совсем понятен смысл опции Multiselect, и еще непонятно, зачем тогда грид показывает что все выделенные строки редактируются, если редактируется только одна...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 15 окт 2007, 10:52

fmcoder писал(а):Да, формируется запрос в updatesql "update ... set ... where (id=x) or (id=y) or ... ". Но это не работает.
А у меня работает. Даже когда не multiselect, а "квадратиком", freeselect так сказать, выделяешь.
Может, стоит показать, как ты делаешь, вместо того, чтобы твердить "так не работает"? Извини, телепатор барахлит.
fmcoder писал(а):Контролы же могут ... [поскипано] ...зачем тогда грид показывает ...
Было б замечательно, если контролы и гриды всё сами делали. Но к сожалению это не так, и нужен ещё программист.

fmcoder
Сообщения: 46
Зарегистрирован: 24 сен 2007, 20:57

Сообщение fmcoder » 15 окт 2007, 12:34

WildSery писал(а):
fmcoder писал(а):Да, формируется запрос в updatesql "update ... set ... where (id=x) or (id=y) or ... ". Но это не работает.
А у меня работает. Даже когда не multiselect, а "квадратиком", freeselect так сказать, выделяешь.
Может, стоит показать, как ты делаешь, вместо того, чтобы твердить "так не работает"? Извини, телепатор барахлит.
fmcoder писал(а):Контролы же могут ... [поскипано] ...зачем тогда грид показывает ...
Было б замечательно, если контролы и гриды всё сами делали. Но к сожалению это не так, и нужен ещё программист.
Оказывается, оно работало, просто обновление не было сразу видно в гриде (по этому поводу я рядом создал тему :)). При переоткрытии датасета оказалось что изменились все нужные строки.

Ответить