Duvidas em uma dbcheckbox

Delphi

24/01/2012

Tenho um formulario de pedidos onde listo eles em uma dbgrid e necessito check-los caso os mesmos forem recebidos, li um artigo na devmedia onde o autor explica como fazer para colocar este dbchebox o que funcionou perfeitamente comigo, porem ao selecionar o campo status ele automaticamente coloca a caixa de seleção a esquerda do campo na dbgrid e ao clickar novamente ele a marca, ao selecionar o campo de baixo ele centraliza a caixa de seleção anterior e coloca o campo do novo pedido a esqueda, mas ao sair do aplicativo os ultimos dados que estao a esquerda nao sao alterado no banco de dados para true é como se eles nao tivessem sidos checkados....
Nao sei çporque isto esta acontecendo para fazer funcionar tenho que selecionar os pedidos que recebi e selecionar um a mais para ele alterar o ultimo.
Daniel

Daniel

Curtidas 0

Respostas

Marcos Rocha

Marcos Rocha

24/01/2012

Amigo tenho passado por problemas semelhantes ultimamente. Você está dando Post no seu DataSet após terminar a edição dos dados? Ocorreu comigo que precisei dar um Post a cada item checado e, após isto, reabrir a edição do meu ClientDataSet com o método Edit.
GOSTEI 0
Daniel

Daniel

24/01/2012

Amigo tenho passado por problemas semelhantes ultimamente. Você está dando Post no seu DataSet após terminar a edição dos dados? Ocorreu comigo que precisei dar um Post a cada item checado e, após isto, reabrir a edição do meu ClientDataSet com o método Edit.

Mas onde e como devo colocar os codigos...
Bom, deixei desta forma no evento dbcheckboxclick
if dbcheckbox1.checked then
begin
 dbcheckbox1.caption := dbcheckbox1.valuechecked;
 adoquery1.edit;
 adoquery1.post;
end
else
begin
 dbcheckbox1.caption := dbcheckbox1.valueunchecked;
 adoquery1.edit;
 adoquery1.post;
end;
end;

mas ao clicar ele nao marca a checkbox e ao dar varios cliques ele mostra o seguinte erro:
ADOQuery1: DataSet not in edit or insert mode
GOSTEI 0
Marcos Rocha

Marcos Rocha

24/01/2012

Daniel você deve configurar o DBCheckBox ligando o DataSource e a propriedade DataField corretamente. Você não faz com que o CheckBox receba o valor. Isto é feito automaticamente quando você troca de registro.
Para que os dados do seu DataSet fiquem postados, você pode implementar o evento OnDataChange do DataSource da seguinte forma:
procedure TForm2.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  if ClientDataSet1.Modified then
    ClientDataSet1.Post;
  ClientDataSet1.Edit;
end;

Lembrando que o OnDataChange é disparado, inclusive, quando você troca de coluna ou registro. Então sempre que você receber o erro DataSet is not in Editing mode é porque tem que dar um ClientDataSet1.Edit.

Caso tenha resolvido seu problema, por favor, finalize este chamado técnico.
GOSTEI 0
Daniel

Daniel

24/01/2012

Daniel você deve configurar o DBCheckBox ligando o DataSource e a propriedade DataField corretamente. Você não faz com que o CheckBox receba o valor. Isto é feito automaticamente quando você troca de registro.
Para que os dados do seu DataSet fiquem postados, você pode implementar o evento OnDataChange do DataSource da seguinte forma:
procedure TForm2.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  if ClientDataSet1.Modified then
    ClientDataSet1.Post;
  ClientDataSet1.Edit;
end;

Lembrando que o OnDataChange é disparado, inclusive, quando você troca de coluna ou registro. Então sempre que você receber o erro DataSet is not in Editing mode é porque tem que dar um ClientDataSet1.Edit.

Caso tenha resolvido seu problema, por favor, finalize este chamado técnico.

Marcos ao executar ele aparece o seguinte erro:
Stack overflow
Checko o primeiro e ao tentar o segundo pedido ele mostra o erro...
GOSTEI 0
POSTAR