nsouza Postado Julho 29, 2009 Denunciar Share Postado Julho 29, 2009 Colegas,Meu problema é o seguinte:Tenho um formulário que ao pressionar F4 chama um pequeno formulário que contém um grid.Esta grid esta vinculado a um DataSource que recebe dados do clientDataSet, pois uso o DBExpress.No evento OnCellClick coloquei o código abaixo:procedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn);begin if Column.ID = 0 then begin if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then begin DMConsultas.CDs_ImportaMorador.Edit; DMConsultas.CDs_ImportaMoradorarquivo.asstring := ''; DMConsultas.CDs_ImportaMorador.post; end else begin DMConsultas.CDs_ImportaMorador.Edit; DMConsultas.CDs_ImportaMoradorarquivo.asstring := 'X'; DMConsultas.CDs_ImportaMorador.post; end; end;end;A idéia é que ao clicar no coluna ele marque com um "X" o linha e depois quando eu clicar em confirmar, os dados serão importadospara a tabela, "arquivar_morador".No entando, quando eu clico ao invés de marcar o X, da a persistente mensagem: Traduzindo:"você não pode realizar esta operação em um dataset fechado"já fiz várias coisas.Já coloquei no evento OnCreate do formDMConsultas.CDs_ImportaMorador.Close;DMConsultas.CDs_ImportaMorador.Open;, para abrir a dataset e não resolveu.Alguém poderia me ajudar por favor. Já passei horas tentando resolver. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Julho 30, 2009 Denunciar Share Postado Julho 30, 2009 Coloque no evento OnActive do Form DMConsultas.CDs_ImportaMorador.Active := true; procedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn); begin if Column.ID = 0 then begin if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then begin DMConsultas.CDs_ImportaMorador.Edit; DMConsultas.CDs_ImportaMoradorarquivo.asstring := ''; DMConsultas.CDs_ImportaMorador.post; DMConsultas.CDs_ImportaMorador.ApplyUpdates(-1); end else begin DMConsultas.CDs_ImportaMorador.Edit; DMConsultas.CDs_ImportaMoradorarquivo.asstring := 'X'; DMConsultas.CDs_ImportaMorador.post; DMConsultas.CDs_ImportaMorador.ApplyUpdates(-1); end; end; end;OBS: Não esqueça de ativar a Query tambem abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 2, 2009 Autor Denunciar Share Postado Agosto 2, 2009 Coloque no evento OnActive do Form DMConsultas.CDs_ImportaMorador.Active := true; procedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn); begin if Column.ID = 0 then begin if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then begin DMConsultas.CDs_ImportaMorador.Edit; DMConsultas.CDs_ImportaMoradorarquivo.asstring := ''; DMConsultas.CDs_ImportaMorador.post; DMConsultas.CDs_ImportaMorador.ApplyUpdates(-1); end else begin DMConsultas.CDs_ImportaMorador.Edit; DMConsultas.CDs_ImportaMoradorarquivo.asstring := 'X'; DMConsultas.CDs_ImportaMorador.post; DMConsultas.CDs_ImportaMorador.ApplyUpdates(-1); end; end; end;OBS: Não esqueça de ativar a Query tambem abraçoJhonas,fiz o que você orientou de ativar a query, mas da a mensagem abaixo.Messagem Q_ImportaMorador: Cannot modify a read only datasetComo posso resolver esta problema. Desculpe por insistir em erros que pra você talvez sejam basicos.procedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn);begin DMConsultas.Q_ImportaMorador.Close; DMConsultas.Q_ImportaMorador.Open; DMConsultas.Q_ImportaMorador.Active:=false; DMConsultas.Q_ImportaMorador.Active:=true; if Column.ID = 0 then begin if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := ''; DMConsultas.Q_ImportaMorador.post; end else begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := 'X'; DMConsultas.Q_ImportaMorador.post; end; end;end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Agosto 2, 2009 Denunciar Share Postado Agosto 2, 2009 Jhonas,fiz o que você orientou de ativar a query, mas da a mensagem abaixo.Messagem Q_ImportaMorador: Cannot modify a read only datasetComo posso resolver esta problema. Desculpe por insistir em erros que pra você talvez sejam basicos.procedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn); begin DMConsultas.Q_ImportaMorador.Close; DMConsultas.Q_ImportaMorador.Open; DMConsultas.Q_ImportaMorador.Active:=false; DMConsultas.Q_ImportaMorador.Active:=true; if Column.ID = 0 then begin if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := ''; DMConsultas.Q_ImportaMorador.post; end else begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := 'X'; DMConsultas.Q_ImportaMorador.post; end; end; end; Seu codigo está estranho ... voce esta usando Query ou ClientDataSet ??? procedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn); begin if Column.ID = 0 then begin if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then begin DMConsultas.CDs_ImportaMorador.Edit; DMConsultas.CDs_ImportaMoradorarquivo.asstring := ''; DMConsultas.CDs_ImportaMorador.post; DMConsultas.CDs_ImportaMorador.ApplyUpdates(-1); end else begin DMConsultas.CDs_ImportaMorador.Edit; DMConsultas.CDs_ImportaMoradorarquivo.asstring := 'X'; DMConsultas.CDs_ImportaMorador.post; DMConsultas.CDs_ImportaMorador.ApplyUpdates(-1); end; end; end;Veja a diferença dos 2 ... se estiver usando somente a Query a propriedade RequestLive deverá estar como truepara não ocorrer esse erro:Messagem Q_ImportaMorador: Cannot modify a read only datasetNão pode modificar um dataset somente como leituraabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 3, 2009 Autor Denunciar Share Postado Agosto 3, 2009 Jhonas,fiz o que você orientou de ativar a query, mas da a mensagem abaixo.Messagem Q_ImportaMorador: Cannot modify a read only datasetComo posso resolver esta problema. Desculpe por insistir em erros que pra você talvez sejam basicos.procedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn); begin DMConsultas.Q_ImportaMorador.Close; DMConsultas.Q_ImportaMorador.Open; DMConsultas.Q_ImportaMorador.Active:=false; DMConsultas.Q_ImportaMorador.Active:=true; if Column.ID = 0 then begin if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := ''; DMConsultas.Q_ImportaMorador.post; end else begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := 'X'; DMConsultas.Q_ImportaMorador.post; end; end; end; Seu codigo está estranho ... voce esta usando Query ou ClientDataSet ??? procedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn); begin if Column.ID = 0 then begin if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then begin DMConsultas.CDs_ImportaMorador.Edit; DMConsultas.CDs_ImportaMoradorarquivo.asstring := ''; DMConsultas.CDs_ImportaMorador.post; DMConsultas.CDs_ImportaMorador.ApplyUpdates(-1); end else begin DMConsultas.CDs_ImportaMorador.Edit; DMConsultas.CDs_ImportaMoradorarquivo.asstring := 'X'; DMConsultas.CDs_ImportaMorador.post; DMConsultas.CDs_ImportaMorador.ApplyUpdates(-1); end; end; end;Veja a diferença dos 2 ... se estiver usando somente a Query a propriedade RequestLive deverá estar como truepara não ocorrer esse erro:Messagem Q_ImportaMorador: Cannot modify a read only datasetNão pode modificar um dataset somente como leituraabraçoEstou usando o DBExpress com o cliente dataset. Mas no evento deste Grid estou usando uma query Q_ImportaMorador porque a função dela é somente gravar os dadose unidirecional. Quando usei o cliente dataset deu o mesmo erro. Abaixo o codigo do evento OnCellClick.. Fiz desta maneira com o intuito de abrir ou ativar a query.Ai deu a mensagem que enviei anteriormente.Messagem Q_ImportaMorador: Cannot modify a read only datasetprocedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn);begin DMConsultas.Q_ImportaMorador.Close; DMConsultas.Q_ImportaMorador.Open; DMConsultas.Q_ImportaMorador.Active:=false; DMConsultas.Q_ImportaMorador.Active:=true; if Column.ID = 0 then begin if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := ''; DMConsultas.Q_ImportaMorador.post; end else begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := 'X'; DMConsultas.Q_ImportaMorador.post; end; end;end Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Agosto 3, 2009 Denunciar Share Postado Agosto 3, 2009 Na Query a propriedade RequestLive deverá estar como trueprocedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn); begin DMConsultas.Q_ImportaMorador.Active:=false; DMConsultas.Q_ImportaMorador.Active:=true; if Column.ID = 0 then begin if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := ''; DMConsultas.Q_ImportaMorador.post; DMConsultas.Q_ImportaMorador.ApplyUpdates; end else begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := 'X'; DMConsultas.Q_ImportaMorador.post; DMConsultas.Q_ImportaMorador.ApplyUpdates; end; end; end.Verifique ... porque fiz um teste aqui e funcionou corretamenteabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 3, 2009 Autor Denunciar Share Postado Agosto 3, 2009 Na Query a propriedade RequestLive deverá estar como trueprocedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn); begin DMConsultas.Q_ImportaMorador.Active:=false; DMConsultas.Q_ImportaMorador.Active:=true; if Column.ID = 0 then begin if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := ''; DMConsultas.Q_ImportaMorador.post; DMConsultas.Q_ImportaMorador.ApplyUpdates; end else begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := 'X'; DMConsultas.Q_ImportaMorador.post; DMConsultas.Q_ImportaMorador.ApplyUpdates; end; end; end.Verifique ... porque fiz um teste aqui e funcionou corretamenteabraçoJhonas,estou usando um TSQLQuery, e não encontrei esta propriedade, você usou este componente quando fez o teste? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Agosto 3, 2009 Denunciar Share Postado Agosto 3, 2009 Tenta Assim:procedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn); begin if Column.ID = 0 then begin CDs_ImportaMorador.open; if DMConsultas.CDs_ImportaMorador.text = 'X' then begin DMConsultas.CDs_ImportaMorador.edit; DMConsultas.Q_ImportaMoradorarquivo.text := ''; DMConsultas.CDs_ImportaMorador.post; DMConsultas.CDs_ImportaMorador.ApplyUpdates(0); end else begin DMConsultas.CDs_ImportaMorador.Edit; DMConsultas.CDs_ImportaMorador.text := 'X'; DMConsultas.CDs_ImportaMorador.post; DMConsultas.CDs_ImportaMorador.ApplyUpdates(0); end; end; end.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 3, 2009 Autor Denunciar Share Postado Agosto 3, 2009 Tenta Assim:procedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn); begin if Column.ID = 0 then begin CDs_ImportaMorador.open; if DMConsultas.CDs_ImportaMorador.text = 'X' then begin DMConsultas.CDs_ImportaMorador.edit; DMConsultas.Q_ImportaMoradorarquivo.text := ''; DMConsultas.CDs_ImportaMorador.post; DMConsultas.CDs_ImportaMorador.ApplyUpdates(0); end else begin DMConsultas.CDs_ImportaMorador.Edit; DMConsultas.CDs_ImportaMorador.text := 'X'; DMConsultas.CDs_ImportaMorador.post; DMConsultas.CDs_ImportaMorador.ApplyUpdates(0); end; end; end.AbraçosObrigado, funcionou(Resolvido) Não consigo abrir dataset Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Agosto 3, 2009 Denunciar Share Postado Agosto 3, 2009 ahahah o problema era q você tava botando seucds.astring, e na verdade era seucds.text, eu num sei a explicação lógica, mas é isso ai, ahuahuahuaAbraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 3, 2009 Autor Denunciar Share Postado Agosto 3, 2009 ahahah o problema era q você tava botando seucds.astring, e na verdade era seucds.text, eu num sei a explicação lógica, mas é isso ai, ahuahuahuaAbraços!Pelo contrário, o text deu erro, mas enfim concertou e estou rodando normal. obrigado de novo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Agosto 3, 2009 Denunciar Share Postado Agosto 3, 2009 sei lá, fiz aqui deu certo, mas se fez funcionar ai beleza, ahahahAbraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
nsouza
Colegas,
Meu problema é o seguinte:
Tenho um formulário que ao pressionar F4 chama um pequeno formulário que contém um grid.
Esta grid esta vinculado a um DataSource que recebe dados do clientDataSet, pois uso o DBExpress.
No evento OnCellClick coloquei o código abaixo:
procedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn);
begin
if Column.ID = 0 then
begin
if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then
begin
DMConsultas.CDs_ImportaMorador.Edit;
DMConsultas.CDs_ImportaMoradorarquivo.asstring := '';
DMConsultas.CDs_ImportaMorador.post;
end
else
begin
DMConsultas.CDs_ImportaMorador.Edit;
DMConsultas.CDs_ImportaMoradorarquivo.asstring := 'X';
DMConsultas.CDs_ImportaMorador.post;
end;
end;
end;
A idéia é que ao clicar no coluna ele marque com um "X" o linha e depois quando eu clicar em confirmar, os dados serão importados
para a tabela, "arquivar_morador".
No entando, quando eu clico ao invés de marcar o X, da a persistente mensagem: Traduzindo:"você não pode realizar esta operação em
um dataset fechado"
já fiz várias coisas.
Já coloquei no evento OnCreate do form
DMConsultas.CDs_ImportaMorador.Close;
DMConsultas.CDs_ImportaMorador.Open;, para abrir a dataset e não resolveu.
Alguém poderia me ajudar por favor. Já passei horas tentando resolver.
Link para o comentário
Compartilhar em outros sites
11 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.