Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Ошибка в запросе


Автор: Михалыч 17.3.2014, 21:02
Нужно отредактировать запись по полю с номером 10, выдает ошибку "Cannot perform this operation on an open dataset"    FireDAC Sqlite

Код

 with Query1 do
 begin
close;
  SQL.Clear;
  SQL.Add('UPDATE PAPKA SET NAME_PAPKA=:NAME WHERE ID_PAPKA=:IDGR');
ParamByName('NAME').AsString :=Edit1.text;
  ParamByName('IDGR').AsInteger := 10;
  ExecSQL;
 
   end;

Автор: Antimol 17.3.2014, 22:15
В общем это выглядит так (при условии создания и уничтожения компонента Query):

Код

var
 Query: TFDQuery;
begin
var
  Query: TFDQuery;
begin
  Query := TFDQuery.Create(nil);
  try
    Query.Connection := ...;
    Query.SQL.Text := 'UPDATE PAPKA SET NAME_PAPKA=:NAME WHERE ID_PAPKA=:IDGR';
    Query.ParamByName('NAME').Value := Edit1.text;
    Query.ParamByName('IDGR').Value := 10;
    Query.ExecSQL;
  finally
    FreeAndNil(Query);
  end; 
end;


У Вас же скорее всего датасет открыт, его нужно либо закрыть либо использовать какой то другой.

Вот также ссылка на http://mirsovetov.net/dataset-perform-operatin.html

Автор: Михалыч 17.3.2014, 22:51
Цитата(Antimol @  17.3.2014,  22:15 Найти цитируемый пост)
У Вас же скорее всего датасет открыт, его нужно либо закрыть либо использовать какой то другой.

А как его закрыть, я уже все перепробовал

Автор: Данкинг 17.3.2014, 22:53
Цитата(Михалыч @  17.3.2014,  23:51 Найти цитируемый пост)
А как его закрыть

Query1.Close ?

Автор: Михалыч 17.3.2014, 22:55
Цитата(Данкинг @  17.3.2014,  22:53 Найти цитируемый пост)
Query1.Close ? 

Да

Автор: Antimol 18.3.2014, 00:04
Поскольку используется with Query1 do - операция Close может расцениваться неоднозначно. Конечно лучше писать Query1.Close 

Автор: Poseidon 18.3.2014, 10:56
Цитата(Antimol @  18.3.2014,  00:04 Найти цитируемый пост)
Поскольку используется with Query1 do - операция Close может расцениваться неоднозначно. 
В данном случае Close расценивается вполне однозначно и аналогично Query1.Close. Вот если бы там было, к примеру 
Код

with Form1, Query1 do 
  Close

то можно было бы говорить о какой-то неодназначности.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)