Консультация № 146332
07.10.2008, 15:11
0.00 руб.
0 1 1
Хай

Почему вылетает ошибка "эту операцию нельзя выполнять при закрытом dataset" в этом случае:
Код:
procedure Tdm.tb_institutesAfterScroll(DataSet: TDataSet);
begin
if DataSet.State = dsBrowse then
begin
dm.qr_institutespec.Parameters.Items[0].Value:= dm.tb_institutes.FieldByName('ID').AsInteger;
dm.qr_institutespec.Requery();
end;
end;


Проверка на dsBrowse же имеется и значит блок кода должен выполниться тогда, когда статус таблицы будет в режиме чтения, а значит и открытой таблица (dataset) должна быть в это время!

Обсуждение

Неизвестный
07.10.2008, 18:53
общий
это ответ
Здравствуйте, Maksim Trofimov!

Цитата: перевод справки Delphi
State – состояние набора данных.
Это состояние определяет возможные операции с набором данных, как например, запись, редактирование, вставка. По мере работы приложения, состояние набора данных постоянно меняется. Открытие набора данных меняет состояние dsInactive на dsBrowse. При редактировании или встевки данных приложением, состояние набора данных помечается как dsEdit или dsInsert соответветсвенно. Если набор данных это TTable или TClientDataSet, приложение может перевести набор данных в состояние dsSetKey, вызвав методы SetKey или SetRange. Закрытие набора данных переводит его состояние в dsInactive.


DataSet.State in [ dsBrowse... ] - Может являться источником ошибок, т.к. это свойство только чтения и не переводит набор данных в иное состояние. На этом месте может возникнуть ошибка.
Замените на
if DataSet.Active then
begin
end ;

Форма ответа