Erro: Cannot perform this operation on a closed dataset

06/09/2012

0

olá. Bem, vamos lá... Banco FireBirde 2.0 e IBExpert, Delphi7. Antes estava usando IBDataBase, IBTransaction, IBTable com TDataSource.
Para efetuar o delete de um registro eu utilizava o seguinte:
FRM_DM.IB_SAIDA_FUNC.Delete; 
FRM_DM.IBTransaction1.CommitRetaining;
, perfeito!
Agora eu implementei uma [b]query[/b].Para deletar faço o seguinte:
FRM_DM.query1.Close; 
  FRM_DM.query1.Sql.Clear; 
  FRM_DM.query1.Sql.Add('Delete from MATERIAIS_SAIDA'); 
  FRM_DM.query1.Sql.Add('where DESCRIO =:descricao'); 
  FRM_DM.query1.ParamByName('descricao').AsString := FRM_DM.IB_ESTOQUEDESCRIO.Text; 
  FRM_DM.query1.execsql;

Normal né! Só que quando executo ele exclui o registro, no entanto apresenta o erro:
[b]Cannot perform this operation on a closed dataset[/b]
Será que alguém poderia me ajudar?
Fernando Souza

Fernando Souza

Responder

Post mais votado

19/09/2012

Conseguiu resolver o problema?
Pedimos que avise para que o tópico possa ser encerrado.

Joel Rodrigues

Joel Rodrigues
Responder

Mais Posts

06/09/2012

Joel Rodrigues

Se o registro está sendo excluído, indica que o ExecSQL está sendo executado. Então o erro pode estar em outro ponto. Depure para identificar a linha onde isso ocorre.
Boa sorte.
Responder

04/12/2014

Cid Maia

Se o registro está sendo excluído, indica que o ExecSQL está sendo executado. Então o erro pode estar em outro ponto. Depure para identificar a linha onde isso ocorre.
Boa sorte.


Estou com esse mesmo problema a dias e nao consigo resolver...vc pode me ajudar
Responder

05/12/2014

Ricardo

Seria interessante postar o código antes de depois de deletar, porém o erro está em algum trecho de código após o ExecSQL. Quando a linha ExecSQL. é executada a query permanece fechada e algum trecho esta tentando acessar a mesma.

Se logo após o ExecSQL for feito um open na query e o erro parar e justamente porque algo está tentando acessar a query depois da operação para deletar.
Responder

02/10/2019

Guilherme

eu tô boiando.
procedure Tf_cidades.FormCreate(Sender: TObject);
begin
  inherited;
  f_cidades.tabela:= 'cidades';
  f_cidades.campo_chave:= 'codcidade';
  f_cidades.campo_pesquisa:= 'nome';
  f_cidades.carregar_dados('');
end;


outro form

procedure Tf_cadpadrao.carregar_dados(p: string);
begin
    qdados.SQL.Clear;
    qdados.SQL.Add('select * from ' +tabela+ ' where ' +campo_chave+ ' like ' +quotedstr('%'+p+'%')+ ' order by ' +campo_pesquisa);
    qdados.Open;

end;


alguém dá uma luz aqui tipo uma tempestade solar pelo menos. Porque eu tenho que usar classes no meu trabalho da faculdade. Tá. Daí eu fiz a classe padrão e tô herdando todo formulário dela. Basicamente a classe padrão é inserir, alterar, excluir e fechar AH e gravar ou cancelar. Deu pra ter uma ideia?
daí eu executo o delphi, ele entra, eu executo a compilação, abre o aplicativo, eu clico pra abrir o formulário CIDADES e dá um erro. Até aí tudo bem porque acho que é do COMODO FIREWALL. Preciso dele senão o delphi não funciona. enfim
depois eu vou dar um insert pra habilitar o gravar e ele fica dizendo que não é possível em um closed dataset
eu não faço nem ideia de como depurar isso porque não ensinaram na faculdade nada de depuração.
Era só os códigos prontos e faça um formulário parecido. Daí agora tô no estágio da faculdade apanhando muito e literalmente patinando no mesmo lugar. O chefe no estágio só usa clipper e um dbf. Ele tem um esquema de compilar para x64 por meio de uma aplicação lá e daí até roda no windows 10.
O que eu faço? Tenho um mês pra terminar o aplicativo, fazer testes, validar tudo, e criar a documentação, manual do sistema e do usuário. É impossível. Só se eu já dominasse delphi, mas nãooooo. Ah meu, tô chorando aqui de desespero.
Responder

14/10/2020

Vicente Santos

cade os programadores da dev? o meu tambem esta dando "cannot peform this operation on a closed dataset quando vou salvar pelo execsql
Responder

15/10/2020

Emerson Nascimento

cade os programadores da dev? o meu tambem esta dando "cannot peform this operation on a closed dataset quando vou salvar pelo execsql


Vicente, pode passar o trecho de código onde ocorre a mensagem ?


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar