Как работать с выборками
Добавлено: 11 окт 2019, 09:35
Здравствуйте! Помогите с "парой" моментов:
1) Как правильно работать с выборкой? Как получить записи из выборки? Я правильно делаю?
2) Как правильно получить измененные записи и сохранить только их?
3) Есть ли возможность применить и отобразить изменения без сохранения таблицы?
Сейчас у меня изменения сохраняются только после сохранения таблицы.. это недопустимо.
4) Почему не работает обновление через запрос для выборки? Что я не так делаю?
Если тоже самое сделать для всей таблицы - работает..
Код: Выделить всё
history_snapshot = HistorySnapshot(table.featureIdComparator())
it = mapView.selectionModel().selectedItems()[0]
layer = it.layer()
style_index = layer().tableSchema().styleIndex()
# получаем записи из выборки
selMan = self._gui().selectionManager()
cursor = selMan.readSelectedFeaturesData()
ids = [feature.id() for feature in cursor]
attrs = table.attributeNames()
features = table.selectFeaturesById(ids, attrs)
# сохраняем статусы записей
modif = [feature.modifiedStatus() for feature in features]
try:
# Так изменяем значения полей и стиль (для примера)
for feature in features:
feature.setAttribute(name, value, Qt.CaseInsensitive)
feature.setModified(name, True, Qt.CaseInsensitive)
mi_style = MapBasicStyle().styleFromString(style)
feature.setAttribute(style_index, mi_style)
feature.setModified(style_index, True)
finally:
# сохраняем изменения (если они были)
for i in range(0, len(features)):
if modif[i] != features[i].modifiedStatus():
history_snapshot.storeUpdatedFeature(feature)
table.save(history_snapshot)
layer.needRedraw.emit(layer)
2) Как правильно получить измененные записи и сохранить только их?
3) Есть ли возможность применить и отобразить изменения без сохранения таблицы?
Сейчас у меня изменения сохраняются только после сохранения таблицы.. это недопустимо.
Код: Выделить всё
it = mapView.selectionModel().selectedItems()[0]
table = it.table()
context = SimpleTableContext(table)
cmd = 'UPDATE Выборка SET Протяженность_км = ObjLen(obj, "km")'
res = update(cmd, context)
Если тоже самое сделать для всей таблицы - работает..