Livio Neiva Postado Março 25, 2009 Denunciar Share Postado Março 25, 2009 Eu criei um dBGrid e um botão excluirAo clicar em excluir quando não tiver item selecionado, da erros.Eu quero q botão excluir fique inativo quando não estiver nada para excluirou q informe q não há itens para ser excluídos.Application.MessageBox('Confirma Exclusão?','Exclusão de Registros',Mb_YesNo + Mb_IconQuestion); F_Dados.Q_Bancos.Delete; end;Seria possivel me mandar os procedimentos correto para essa função valeu obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ZueRa Postado Março 25, 2009 Denunciar Share Postado Março 25, 2009 (editado) Boa tarde Livio.Veja, você pode fazer várias coisas para impedir que o usuário exclua um registro inexistente.Poderás criar uma procedure para que em certo estado do DataSet ele não possa deletar nada.Por exemplo:procedure TForm1.BloquearBotoes; begin case DataSet.State of dsInactive : begin //caso ela esteja no estado inativo BotaoExcluir.Enabled := false; //o botão excluir também estará inativo end; dsEdit : begin //caso esteja no estado de edição BotaoExcluir.Enabled := true; //aí sim ele estará ativo end; end; No botão excluir pode ser feito assim: procedure TForm1.Button1Click(Sender: TObject); var aviso : integer; begin {você pode colocar um aviso, para não acontecer de o usuário clicar sem querer no botão e excluir o registro por falta de atenção.} aviso := Application.MessageBox('Deseja mesmo excluir este registro?','Título',MB_yesno + MB_defbutton2 + MB_iconquestion); if aviso <> IdNo then //se ele escolher SIM então begin with DataSet do begin Delete; Close; BloquearBotoes; //aqui está a procedure que foi criada end; end; end; Para segurança coloque a procedure que você criou no evento OnActivate do Form. Veja: procedure TForm1.FormActivate(Sender: TObject); begin BloquearBotoes; end;Assim, logo que o form se tornar "ativo" esta procedure será executada, ou seja, o DataSet estará no estado dsInactive (inativo) e assim o botão excluir ficará também inativo.Você pode implementar outros etados do DataSet. Há vários, mas, estude sobre.Grande abraço!P.S: declare esta procedure que foi criada na cláusula types da Unit. Editado Março 25, 2009 por ZueRa Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ZueRa Postado Março 25, 2009 Denunciar Share Postado Março 25, 2009 Só adicionando:como eu disse pode ser feito de várias formas este bloqueamento do botão excluir.Assim também vale (só que neste caso estou utilizando uma Query como DataSet):procedure TForm1.Button1Click(Sender: TObject); begin if Query1.State in [dsInactive, dsBrowse] then begin Application.MessageBox('Primeiro adicione um registro para ser excluído','Título',MB_ok + MB_defbutton1 + MB_iconexclamation); Abort; end else Query1.Delete; Query1.Close; end; Se for utilizado um TTable como DataSet pode ser assim: procedure TForm1.Button1Click(Sender: TObject); begin if (Table1.Active = false) then begin Application.MessageBox('aviso','título',MB_ok + MB_defbutton1 + MB_iconexclamation); Abort; end else Table1.Delete; Table1.Close; end;Do mais é isto, basta modificar ao seu uso, e/ou então melhorar algumas coisas.Abraço! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 26, 2009 Denunciar Share Postado Março 26, 2009 Ao clicar em excluir quando não tiver item selecionado, da erros.Eu quero q botão excluir fique inativo quando não estiver nada para excluir ou q informe q não há itens para ser excluídos.Livio Neiva, você quer dizer: quando não houver nada no DBGrid - é isto?Para a "automação" tem um jeito simples: use o evento OnDataChange do TDataSource.Se o componente TDataSource ligado ao seu TDBGrid estiver neste form, beleza. Já se estiver em um datamodulo, acione um ao form e lique ele ao mesmo dataset que está sendo usado no seu DBGrid.No evento OnDataChange coloque:procedure TForm1.DataSource1DataChange(Sender :TObject); begin if Assigend(DataSource1.DataSet) then BtnExcluir.Enabled := (DataSource1.State = dsBrowse) and (DataSource1.DataSet.RecordCount > 0); else BtnExcluir.Enabled := False; end;O que vai acontecer é que qualquer alteração que seja feita no seu dataset, irá disparar este evento, mas não vai tornar sua aplicação mais lenta por conta disto. Então, logo que você abrir seu dataset este evento ocorrerá (também) e conforme avaliação, o botão de exclusão ficará inibido - só vai liberar se seu dbgrid tiver alguma linha e se ele não estiver em edição ou inserção.O código no seu botão de exclusão não muda nada.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Livio Neiva Postado Março 27, 2009 Autor Denunciar Share Postado Março 27, 2009 Questão resolvida...muito obrigado a todosxauAo clicar em excluir quando não tiver item selecionado, da erros.Eu quero q botão excluir fique inativo quando não estiver nada para excluir ou q informe q não há itens para ser excluídos.Livio Neiva, você quer dizer: quando não houver nada no DBGrid - é isto?Para a "automação" tem um jeito simples: use o evento OnDataChange do TDataSource.Se o componente TDataSource ligado ao seu TDBGrid estiver neste form, beleza. Já se estiver em um datamodulo, acione um ao form e lique ele ao mesmo dataset que está sendo usado no seu DBGrid.No evento OnDataChange coloque:procedure TForm1.DataSource1DataChange(Sender :TObject); begin if Assigend(DataSource1.DataSet) then BtnExcluir.Enabled := (DataSource1.State = dsBrowse) and (DataSource1.DataSet.RecordCount > 0); else BtnExcluir.Enabled := False; end;O que vai acontecer é que qualquer alteração que seja feita no seu dataset, irá disparar este evento, mas não vai tornar sua aplicação mais lenta por conta disto. Então, logo que você abrir seu dataset este evento ocorrerá (também) e conforme avaliação, o botão de exclusão ficará inibido - só vai liberar se seu dbgrid tiver alguma linha e se ele não estiver em edição ou inserção.O código no seu botão de exclusão não muda nada.Abraçosquestão resolvida...muito obrigado a todosxau Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Helton Garrido Postado Abril 16, 2015 Denunciar Share Postado Abril 16, 2015 Meu caro estou com um pequeno problema em resolver uma situação de um códigoexcluir um item quando chegar na quantidade 0(zero). Ex:Tenho um produto com quantidade 10 vou fazendo a retirada deste produto de um a um até zerar quando zerá ele excluirá do banco de dados o item.uso os componentes: IBDataBase, IBTransaction, IBTable, IBQueryMe ajudem nessa por favor Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Livio Neiva
Eu criei um dBGrid e um botão excluir
Ao clicar em excluir quando não tiver item selecionado, da erros.
Eu quero q botão excluir fique inativo quando não estiver nada para excluir
ou q informe q não há itens para ser excluídos.
Application.MessageBox('Confirma Exclusão?','Exclusão de Registros',Mb_YesNo + Mb_IconQuestion);
F_Dados.Q_Bancos.Delete;
end;
Seria possivel me mandar os procedimentos correto para essa função
valeu obrigado
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.