Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) botão excluir


Livio Neiva

Pergunta

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

  • 0

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 por ZueRa
Link para o comentário
Compartilhar em outros sites

  • 0

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!

Link para o comentário
Compartilhar em outros sites

  • 0
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

Link para o comentário
Compartilhar em outros sites

  • 0

Questão resolvida...muito obrigado a todos

xau

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

questão resolvida...muito obrigado a todos

xau

Link para o comentário
Compartilhar em outros sites

  • 0

Meu caro estou com um pequeno problema em resolver uma situação de um código

excluir 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, IBQuery

Me ajudem nessa por favor

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...