nsouza Postado Dezembro 24, 2009 Denunciar Share Postado Dezembro 24, 2009 Colegas bom dia,estou usando um TSQLDataSet, TDataSetProvider, TClienteDataSet e um TSQLStoredProceudureQuando clico no botão Incluir da a mensagem de erro:Cds_Condominio: Cannot modify a read-only dataset'Abaixo uso os código, mas não consegui consertar este problema. Poderiam me ajudar por favor?ObrigadoCodigo do botão Incluir:if not Ds.DataSet.Active then Ds.DataSet.Open; Ds.DataSet.Insert;end;Codigo no evento Before post do ClienteDataSet: Cds_Condominio with Sp_Condominio do // Stored Procedure begin Params[0].AsInteger := StrToInt(F_Condominio.edtCodigo.text); Params[1].AsString := f_Condominio.edtNome.Text; Params[2].AsString := F_Condominio.edtEndereco.Text; Params[3].AsInteger := StrToInt(F_Condominio.edtNumero.Text); Params[4].AsString := F_Condominio.edtComplemento.Text; Params[5].AsString := F_Condominio.edtBairro.Text; Params[6].AsString := F_Condominio.edtCidade.Text; Params[7].AsString := F_Condominio.edtUF.Text; Params[8].AsString := F_Condominio.edtCep.Text; Params[9].AsString := F_Condominio.edtEmail.Text; Params[10].AsString := F_Condominio.edtSindico.Text; Params[11].AsString := F_Condominio.edtTelefone.Text; Params[12].AsString := F_Condominio.edtCelular.Text; Params[13].AsInteger := StrToInt(F_Condominio.edtQtdeApt.Text); Params[14].AsInteger := StrToInt(F_Condominio.edtAptInicial.Text); Params[15].AsInteger := StrToInt(F_Condominio.edtAptFinal.Text); Params[16].AsDate := StrToDate(F_Condominio.edtInicioContrato.Text); Params[17].AsDate := StrToDate(F_Condominio.edtFimContrato.Text); Params[18].AsFloat := StrToFloat(F_Condominio.EdtValor.Text); Params[19].AsInteger := StrToInt(F_Condominio.edtVencimento.Text); Params[20].AsInteger := 1; Params[21].AsString := 'I'; ExecProc; end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Dezembro 24, 2009 Denunciar Share Postado Dezembro 24, 2009 estou usando um TSQLDataSet, TDataSetProvider, TClienteDataSet e um TSQLStoredProceudureQuando clico no botão Incluir da a mensagem de erro:Cds_Condominio: Cannot modify a read-only dataset'Veja se a propriedade do TDataSetProvider (chamada ResolveToDataSet) esta como True... se estiver coloque como False. abraço e Feliz Natal Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Dezembro 25, 2009 Autor Denunciar Share Postado Dezembro 25, 2009 (editado) estou usando um TSQLDataSet, TDataSetProvider, TClienteDataSet e um TSQLStoredProceudureQuando clico no botão Incluir da a mensagem de erro:Cds_Condominio: Cannot modify a read-only dataset'Veja se a propriedade do TDataSetProvider (chamada ResolveToDataSet) esta como True... se estiver coloque como False. abraço e Feliz NatalDeu certo. No entando quando eu clico no botão salvar esta salvando dois registros (duplicando no banco de dados)1 registro com dados que estão nso edits e um registro com todos os campos vazios. Abaixo o codigo da minha storade procedure. procedure TDM.Cds_CondominioBeforePost(DataSet: TDataSet);var//loQry : TSQLQuery;loQry : TSQLDataSet;begin try try loQry := TSQLDataSet.Create(nil); loQry.SQLConnection := DBAcesso; loQry.CommandType := ctStoredProc; loQry.CommandText := 'SP_CONDOMINIO_IUD'; loQry.ParamByName('PCONDOMINIOID' ).AsInteger := StrToInt(F_Condominio.edtCodigo.text); loQry.ParamByName('PNOME' ).AsString := f_Condominio.edtNome.Text; loQry.ParamByName('PENDERECO' ).AsString := F_Condominio.edtEndereco.Text; loQry.ParamByName('PNUMERO' ).AsInteger := StrToInt(F_Condominio.edtNumero.Text); loQry.ParamByName('PCOMPLEMENTO' ).AsString := F_Condominio.edtComplemento.Text; loQry.ParamByName('PBAIRRO' ).AsString := F_Condominio.edtBairro.Text; loQry.ParamByName('PCIDADE' ).AsString := F_Condominio.edtCidade.Text; loQry.ParamByName('PESTADO' ).AsString := F_Condominio.edtUF.Text; loQry.ParamByName('PCEP' ).AsString := F_Condominio.edtCep.Text; loQry.ParamByName('PEMAIL' ).AsString := F_Condominio.edtEmail.Text; loQry.ParamByName('PSINDICO' ).AsString := f_Condominio.edtSindico.Text; loQry.ParamByName('PTELEFONE' ).AsString := F_Condominio.edtTelefone.Text; loQry.ParamByName('PCELULAR' ).AsString := F_Condominio.edtCelular.Text; loQry.ParamByName('PQTDEAPT' ).AsInteger := StrToInt(F_Condominio.edtQtdeApt.Text); loQry.ParamByName('PAPTINICIAL' ).AsInteger := StrToInt(F_Condominio.edtAptInicial.Text); loQry.ParamByName('PAPTFINAL' ).AsInteger := StrToInt(F_Condominio.edtAptFinal.Text); loQry.ParamByName('PINICIOCONTRATO' ).AsDate := StrToDate(F_Condominio.edtInicioContrato.Text); loQry.ParamByName('PFIMCONTRATO' ).AsDate := StrToDate(F_Condominio.edtFimContrato.Text); //loQry.ParamByName('PVRLCONDOMINIO' ).AsFloat := StrToFloat(F_Condominio.EdtValor.Text); loQry.ParamByName('PVLRCONDOMINIO' ).AsFloat := 60.00; loQry.ParamByName('PVENCIMENTO' ).AsInteger := StrToInt(F_Condominio.edtVencimento.Text); LoQry.ParamByName('POPR' ).AsString := 'I'; loQry.ParamByName('PUSUARIO' ).AsInteger := 1; loQry.ExecSQL(); except On E: Exception do ShowMessage(E.Message) end; finally FreeAndNil(loqry); end;end; Editado Dezembro 25, 2009 por nsouza Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Dezembro 25, 2009 Denunciar Share Postado Dezembro 25, 2009 Deu certo. No entando quando eu clico no botão salvar esta salvando dois registrosqual é o código que está no botão salvar ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Dezembro 27, 2009 Autor Denunciar Share Postado Dezembro 27, 2009 Deu certo. No entando quando eu clico no botão salvar esta salvando dois registrosqual é o código que está no botão salvar ?O codigo é este:procedure TF_Modelo.ac_salvarExecute(Sender: TObject);begin TClientDataSet(Ds.DataSet).Post; TClientDataSet(Ds.DataSet).ApplyUpdates(0); PageControl1.ActivePage := tbConsulta;end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Dezembro 27, 2009 Denunciar Share Postado Dezembro 27, 2009 Deu certo. No entando quando eu clico no botão salvar esta salvando dois registrosprocedure TDM.Cds_CondominioBeforePost(DataSet: TDataSet);procedure TF_Modelo.ac_salvarExecute(Sender: TObject); begin TClientDataSet(Ds.DataSet).Post; TClientDataSet(Ds.DataSet).ApplyUpdates(0); PageControl1.ActivePage := tbConsulta; end;Aparentemente o erro não está correlacionado com estas duas procedures, tente usar o debug do delphi e acompanhar a execução linha a linha para poder descobrir onde está o problema ... coloque um breakpoint a partir da linha de código:TClientDataSet(Ds.DataSet).Post;abraço e Feliz Ano Novo Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
nsouza
Colegas bom dia,
estou usando um TSQLDataSet, TDataSetProvider, TClienteDataSet e um TSQLStoredProceudure
Quando clico no botão Incluir da a mensagem de erro:
Cds_Condominio: Cannot modify a read-only dataset'
Abaixo uso os código, mas não consegui consertar este problema. Poderiam me ajudar por favor?
Obrigado
Codigo do botão Incluir:
if not Ds.DataSet.Active then
Ds.DataSet.Open;
Ds.DataSet.Insert;
end;
Codigo no evento Before post do ClienteDataSet: Cds_Condominio
with Sp_Condominio do // Stored Procedure
begin
Params[0].AsInteger := StrToInt(F_Condominio.edtCodigo.text);
Params[1].AsString := f_Condominio.edtNome.Text;
Params[2].AsString := F_Condominio.edtEndereco.Text;
Params[3].AsInteger := StrToInt(F_Condominio.edtNumero.Text);
Params[4].AsString := F_Condominio.edtComplemento.Text;
Params[5].AsString := F_Condominio.edtBairro.Text;
Params[6].AsString := F_Condominio.edtCidade.Text;
Params[7].AsString := F_Condominio.edtUF.Text;
Params[8].AsString := F_Condominio.edtCep.Text;
Params[9].AsString := F_Condominio.edtEmail.Text;
Params[10].AsString := F_Condominio.edtSindico.Text;
Params[11].AsString := F_Condominio.edtTelefone.Text;
Params[12].AsString := F_Condominio.edtCelular.Text;
Params[13].AsInteger := StrToInt(F_Condominio.edtQtdeApt.Text);
Params[14].AsInteger := StrToInt(F_Condominio.edtAptInicial.Text);
Params[15].AsInteger := StrToInt(F_Condominio.edtAptFinal.Text);
Params[16].AsDate := StrToDate(F_Condominio.edtInicioContrato.Text);
Params[17].AsDate := StrToDate(F_Condominio.edtFimContrato.Text);
Params[18].AsFloat := StrToFloat(F_Condominio.EdtValor.Text);
Params[19].AsInteger := StrToInt(F_Condominio.edtVencimento.Text);
Params[20].AsInteger := 1;
Params[21].AsString := 'I';
ExecProc;
end;
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.