Cannot Modify a Read-Only dataset

19/07/2008

1

Pessoal,
Eu estou fazendo um controle de estoque para um trabalho de escola.
Quando eu tento editar a quantidade do produto (se é uma entrada ou saída)
dá este erro: Cannot Modify a Read-Only dataset.
No Código, eu preencho a propriedade ModifySQL do IBdataset, por isso não entendo o porque do erro:

procedure TFrmCadastro.BtnSalvarOcorrenciaClick(Sender: TObject);
begin
with IBdtscadmat do
      begin
        ModifySQL.Clear;
        ModifySQL.add(´UPDATE MATERIAL SET QUANT = ´);
        ModifySQL.add(dbedtquantocorrencia.text + ´ +( SELECT QUANT           FROM MATERIAL ´);
        ModifySQL.add(´WHERE CDMATERIAL = ´ + inttostr(dbcombomaterial.KeyValue) + ´ )´);
        ModifySQL.add(´ WHERE CDMATERIAL = ´+ inttostr(dbcombomaterial.KeyValue));
end;
try
    IbdtsOcorrencia.Post;
    IbdtsOcorMat.Post;
    IbdtsCadMat.Edit; //Esta Linha está dando o erro.
    IbdtsCadMat.Post;
    IbdtsOcorrencia.Active := False;
    IbdtsLogin.Active := False;
    IbdtsOcorMat.Active := False;
    ibdtscadmedidas.Active := false;
    IbdtsCadMat.Active := False;
    DMDatabase.Transaction.CommitRetaining;
    MessageDlg(´Dados gravados com sucesso´, mtInformation, [mbOk], 0);
    mkedtdata.Text := ´´;
    umodulo.HabilitaES(False);
  except
    Dmdatabase.Transaction.Rollback;
    MessageDlg(´Preencha Todos os Campos´, mtInformation, [mbOk], 0);
    Umodulo.HabilitaES(False);
  end;
end; 



Este é o código do Botão em que eu abro os datasets:

procedure TFrmCadastro.BtnNovoOcorrenciaClick(Sender: TObject);
begin
  Umodulo.HabilitaES(True);
  mkedtdata.Text := datetostr(now);
  IBdtslogin.SelectSQL.Clear;
  IBdtslogin.SelectSQL.Add(´SELECT * FROM LOGIN´);
  IBdtslogin.SelectSQL.Add(´WHERE IDLOGIN = :id´);
  Ibdtslogin.ParamByName(´id´).AsInteger := 2;
  DBComboBoxUser.setfocus;

  if (IbdtsLogin.Active = false or IbdtsOcorrencia.Active = False
  or IbdtsOcorMat.Active = false or IbdtsCadMat.Active = false)  then
    begin
     IbdtsLogin.Active := true;
     IbdtsOcorrencia.Active := true;
     IbdtsOcorMat.Active := true;
     IbdtsCadMat.Active := True;
    end;
     IbdtsCadMat.open;
     IbdtsLogin.open;
     IbdtsOcorrencia.open;
     IbdtsOcorMat.Open;
     IbdtsOcorMat.Append;
     IbdtsOcorrencia.Append;
end;



Estou usando os componentes IBdatabase, IBtransaction, IBdataset e um Dataset da aba DataAccess.[/code]


Responder