2016-08-25 3 views
1

Есть ли способ изменить состояние моего набора данных (TTAble) перед удалением или редактированием или вставкой?Delphi управляет состоянием Dataset

Я стараюсь использовать Table1.State := dsXXX. компилятор говорит мне, что я не могу изменить эти свойства.

ответ

2

Вы можете сделать это, но будьте осторожны, что, по вашему мнению, вы не подрываете модель состояния TDataSet.

Вам необходимо объявить класс потомков используемого типа TDataSet. Например.

type TmyTTable = Class(TTable); 

Затем литья набора данных к этому типу, вы можете использовать SetTempState и RestoreState на нем:

SaveState := Table1.State; 
try 
    TmyTTable(Table1).SetTempState(); 
    // do something 
finally 
    TmyTTable(Table1).RestoreState(SaveState); 
end; 

Вы должны реально смотреть на источнике SetTempState в DB.Pas, хотя. И продолжайте с особой осторожностью - с помощью SetTempState задает проблемы. SetTempState используется в нескольких местах в DBClient.Pas, fwiw.

5

Свойство State (унаследовано от класса TDataSet) доступно только для чтения. Вы не должны манипулировать им напрямую.

Для удаления/редактирования/вставки записи используйте соответствующие методы Delete/Edit/Insert. Они меняют значение State по замыслу.

Предположительно (как вы не дают никакой информации о том, что вы делаете или что вы пробовали), вы просите изменить State потому, что вы получите сообщение об ошибке, как

DataSet не в режиме редактирования ,

Это потому, что манипулирование данными может быть выполнено только после того, как набор данных был открыт, вызвав метод Open.

+0

«манипуляция данными может быть выполнена только после того, как набор данных был открыт». Правда, но поскольку закрытый набор данных, скорее всего, будет проявляться в gui, это может быть скорее связано с отсутствием вызова Edit или Insert. – MartynA

 Смежные вопросы

  • Нет связанных вопросов^_^