Abstract Error

11/07/2009

OLá pessoal, preciso da ajuda de vocês !!!!


 Fiz um form principal, em seguida fiz um form de base para eu ter ele como matriz, fiz 2 data modules, um para conexão e outro para a tabela de dados, em seguida criei um novo form herdando do primeiro e agora qdo eu faço a chamada dele esta dando a mensagem "Abstract Error".

A Aplicaçao está como MDI FORM, o formbase esta como MDICHILD. Ja tinha feio algo parecido antes sem dar este problema, a unica diferença agora é o tipo do form MdiChild e as implententações que eu fiz.

Abaixo a Unit do FormBase:

=======================================================================

unit uFrmBase;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ExtCtrls, ActnList, ImgList, ToolWin, ComCtrls, Menus, DB;

type
  TFrmBase = class(TForm)
    TobBase: TToolBar;
    ImgBase: TImageList;
    Ac_Base: TActionList;
    pnlBase: TPanel;
    PpmBase: TPopupMenu;
    Ac_Incluir: TAction;
    Ac_Alterar: TAction;
    Ac_Excluir: TAction;
    Ac_Cancelar: TAction;
    Ac_Pesquisar: TAction;
    Ac_Ferramentas: TAction;
    Ac_Salvar: TAction;
    Ac_Fechar: TAction;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton9: TToolButton;
    ToolButton10: TToolButton;
    ToolButton11: TToolButton;
    Calculadora1: TMenuItem;
    Calendrio1: TMenuItem;
    N1: TMenuItem;
    Ajuda1: TMenuItem;
    N2: TMenuItem;
    Relatrios1: TMenuItem;
    N3: TMenuItem;
    DsBase: TDataSource;
    procedure Ac_IncluirExecute(Sender: TObject);
    procedure Ac_AlterarExecute(Sender: TObject);
    procedure Ac_ExcluirExecute(Sender: TObject);
    procedure Ac_CancelarExecute(Sender: TObject);
    procedure Ac_PesquisarExecute(Sender: TObject);
    procedure Ac_FerramentasExecute(Sender: TObject);
    procedure Ac_SalvarExecute(Sender: TObject);
    procedure Ac_FecharExecute(Sender: TObject);
    procedure Ac_IncluirUpdate(Sender: TObject);
    procedure Ac_CancelarUpdate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmBase: TFrmBase;

implementation

uses
  DBClient, Dialogs;

{$R *.dfm}

procedure TFrmBase.Ac_AlterarExecute(Sender: TObject);
begin
   if not DsBase.DataSet.IsEmpty then
   begin
     pnlBase.Enabled := True;
     DsBase.DataSet.Edit;
   end
   else
   if DsBase.DataSet.IsEmpty then
   ShowMessage('É necessário selecionar um registro para esta opção !!!');
end;

procedure TFrmBase.Ac_CancelarExecute(Sender: TObject);
begin
  TClientDataSet(DsBase.DataSet).CancelUpdates;
  pnlBase.Enabled := False;
end;

procedure TFrmBase.Ac_CancelarUpdate(Sender: TObject);
begin
  TAction(Sender).Enabled := DsBase.DataSet.State in [dsInsert, dsEdit];
end;

procedure TFrmBase.Ac_ExcluirExecute(Sender: TObject);
begin
  if not DsBase.DataSet.IsEmpty then
  begin
   if MessageDlg('Deseja realmente apagar o registro?', mtWarning,[mbYes,mbNo],0) = mrYes then
   begin
      pnlBase.Enabled := True;
      DsBase.DataSet.Delete;
      TClientDataSet(DsBase.DataSet).ApplyUpdates(0);
      ShowMessage('Registro apagado com sucesso !!!');
   end
   else
   if MessageDlg('Deseja realmente apagar o registro?', mtWarning,[mbYes,mbNo],0) = mrNo then
   begin
      pnlBase.Enabled := False;
      ShowMessage('Operação cancelada !!!');
   end;
  end
  else
  if DsBase.DataSet.IsEmpty then
  Showmessage('É necessário selecionar um registro para esta opção !!!');
end;

procedure TFrmBase.Ac_FecharExecute(Sender: TObject);
begin
   if MessageDlg('Deseja realmmente sair?', mtWarning,[mbYes, mbNo],0) = mrYes then
   begin
     if DsBase.DataSet.State in [dsInsert, dsEdit] then
     begin
      if MessageDlg('Deseja salvar as alterações?',mtConfirmation,[mbYes, mbNo, mbCancel],0) = mrYes then
      begin
        DsBase.DataSet.Post;
        TClientDataSet(DsBase.DataSet).ApplyUpdates(0);
        ShowMessage('Alterações/Inclusões salvar com sucesso !!!');
        Close;
      end
      else
      if MessageDlg('Deseja salvar as alterações?',mtConfirmation,[mbYes, mbNo, mbCancel],0) = mrNo then
      begin
        TClientDataSet(DsBase.DataSet).CancelUpdates;
        ShowMessage('Alterações/Inclusões canceladas !!!');
        Close;
      end
     end;
   end;
end;

procedure TFrmBase.Ac_FerramentasExecute(Sender: TObject);
begin
 ;
end;

procedure TFrmBase.Ac_IncluirExecute(Sender: TObject);
begin
  if not DsBase.DataSet.Active then
  DsBase.DataSet.Open;
    pnlBase.Enabled := True;
    DsBase.DataSet.Insert;
end;

procedure TFrmBase.Ac_IncluirUpdate(Sender: TObject);
begin
   TAction(Sender).Enabled := DsBase.DataSet.State in [dsInactive, dsBrowse];
end;

procedure TFrmBase.Ac_PesquisarExecute(Sender: TObject);
begin
  ;
end;

procedure TFrmBase.Ac_SalvarExecute(Sender: TObject);
begin
  DsBase.DataSet.Post;
  TClientDataSet(DsBase.DataSet).ApplyUpdates(0);
  pnlBase.Enabled := False;
end;

end.

==============================================================

O que eu fiz de errado? Onde devo corrigir?

Abraços,

Rogério
Rogério Nascimento

Rogério Nascimento

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

11/07/2009

Olá Meu amigo,
  Vou analisar teu problema, e logo retornarei, peço que aguarde um pouco, OK ?

Att,

Wesley Y
GOSTEI 0
Rogério Nascimento

Rogério Nascimento

11/07/2009

 Fala ai meu amigo, tudo na paz?!!!


 Bom, vamos direcionar este erro, no momento q eu chamo o form MDI Child eu consegui descobrir, era um evento q eu coloquei no on creat do Data Modulo, tirei o evento e o abstract error parou de dar na abertura do form, mas, lembra uma rotina que vc implementou pra mim, que criava os buttons na toolbar, ficando igual a barra de tarefas do Windows Xp, segue abaixo:


procedure TFrmPrincipal.Cliente1Click(Sender: TObject);
begin
  Botao := TToolButton.Create(ToolBar1);
  FrmCliente := TFrmCliente.Create(Self);
  Botao.Caption := FrmCliente.Caption;
  Botao.tag := Integer(FrmCliente);
  Botao.Parent  := ToolBar1;
  Botao.OnClick := DoClick;
  ToolBar1.ShowCaptions := True;
  FrmCliente.Show;
  FrmCliente.btnBotao := Botao;
end;


 A linha em vermelha eu não consigo colocar, o delphi não compila, se eu tiro esta linha, ele compila, cria o botão, mas qdo fecho o form e não apaga o botão, se eu clico sobre o botão, ele da a mensagem 'Abstract Error', o que pode ser?



GOSTEI 0
Wesley Yamazack

Wesley Yamazack

11/07/2009

Olá meu amigo, td bem por aqui, e por ai ?
   me manda ae tua rotina compacta ela e me manda, pois assim não tem muito como saber o erro, pois Abstract Error é quando você ta tentando acessar um metódo definido como "Abastract". Dai fica melhor de analisar.
   FIco no aguardo.

Att

Wesley Y
GOSTEI 0
Rogério Nascimento

Rogério Nascimento

11/07/2009

 Fala Wesley, te mando pra onde? posso te mandar os fontes? Estou usando o delphi 2009
GOSTEI 0
Devmedia

Devmedia

11/07/2009

Rogério,
vc poe mandar os fontes através do disco virtual, que vc possui na home da consultoria.
No canto esqerdo da home vc encontra o disco virtual, bem como o link do video q vai te ajudar a como utilizá-lo.
Lembrando que os arquivos que vc vai upar para ele devem estar no formato .zip ou .rar.
GOSTEI 0
Rogério Nascimento

Rogério Nascimento

11/07/2009

Postei lá !!!
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

11/07/2009

Olá Meu amigo, me manda o link, do download, para poder baixar aqui. Pois não tenho acesso ao disco virtual, só pelo link, blz ? Fico no aguardo.


Att,

Wesley Y
GOSTEI 0
Rogério Nascimento

Rogério Nascimento

11/07/2009

Fala ai Wesley, tudo na paz?!!!!

Segue ai o link, se vc puder guardar este fonte com vc, principalmente o banco, vou precisar de mais algumas ajudas e com o banco em mãos fica mais facil de vc entender :D

http://video.devmedia.com.br/discovirtual/211600/Sycomm.rar


Abraços.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

11/07/2009

Opa meu amigo,  blz então vou guardar ele. Me diz uma coisa, qual banco e qual delphi você ta usando ?
  E para adiantar, o abstract erro, acontece em que momento? quando você vai clicar no botão ? Ou fechar o form? Já depurou o mesmo? Qual é o erro orginal ?


  Fico no aguardo.

Att,

Wesley Y
GOSTEI 0
Rogério Nascimento

Rogério Nascimento

11/07/2009

Fala ai grande Wesley, tdo na paz?!!!


 Estou usando o Firebird 2.1 e o Delphi 2009.


 O erro acontece qdo:

 No menu principal, abro o Cad Produtos, fecho ele, o botão na barra de tarefas não é eliminado, pois a rotina q elimina ele é aquela linha vermelha q não deixa compilar o projeto, qdo eu abro ele novamente, ai aparecem dois botões na barra de tarefas, um do form atual e o outro do form q tinha sido fechado, qdo eu clico nestes botões q da o erro.

Imagino que se descobrir-mos o motivo pelo qual o projeto não compila com aquela rotina implementada corretamente, isto para de acontecer, pois eu tinha feito testes em um outro projeto e funcionou perfeito, a unica diferença é que agora eu estou utilizando Herança de formulários.


Você vai notar que é muito simples este projeto, inclusive o seu banco de dados, estou utilizando este para tirar todas as minhas duvidas, em termos de pesquisa, permissões, consultas, relatórios, etc e depois de sanadas a mesa ai sim partirei para um projeto maior, onde a estrutura do banco de dados ja está completa.



Abraços,

Rogério

Se precisar, meu msn é rogerioasnascimento@hotmail.com e meu e-mail arhows@gmail.com
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

11/07/2009

Fala meu amigo, td na paz por aqui ! E por ai ?
  Seguinte, você disse que a linha compilava e funcionava em outro projeto certo ?
  Se sim, apague todas as DCU's do teu projeto, e de um Build no projeto e teste, pois pode ter alguma coisa agarrada ai nestas DCU's.
  Se isso não resolver, crie um outro projeto, e adicione teus forms, e unit's neste novo, projeto, pois o problema não esta no código e sim nestas pendencias por fora, do projeto, sacou ?
  Abraço meu amigo, pena que não podemos nos falar no msn, consultoria não visa este tipo de comunicação, só pelo forum.
 

Att,

Wesley Y
GOSTEI 0
Rogério Nascimento

Rogério Nascimento

11/07/2009

Sem problemas meu amigo, vou fazer o teste aqui !!!


Vou te pedir mais uma coisinha :D


Neste projeto, tem um form para cad produtos e uma tabela no banco com o nome de produtos, eu fiz uma trigger na tabela onde ele me gera uma string contendo o nome do usuario, a operação (Inclusão, Alteração), data e hora, eu disparo isto no before insert e no before update, o campo chama-se AUDWIN, tem como este campo aparecer na tela do sistema no momento em q eu salvo o registro? Hoje ele aparece se eu pesquisar o registro novamente.

Abraços e bom final de semana.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

11/07/2009

Olá Meu amigo, vou te dar uma dica, muito usada, hoje ! Esquece banco de dados! Controle tudo isso pela tua aplicação, amanha ou depois voce quer mudar de banco, vai ter que refazer tudo, sacou ? pois tuas regras estão no bd, e nao na aplicação. Entendeu, nao conheço como pegar o valor da que a trigger disparou nao, nem sei se tem como, pois seria um comando, certo ? Que ele executa. O que você poderia fazer era, pegar e ao incluir, da um select, e retonar o cara, assim que que voce executar a operação, já dispara um SELECT, neste campo.

  Sacou ?

Att,

Wesley Y
GOSTEI 0
Rogério Nascimento

Rogério Nascimento

11/07/2009

 Sim senhor :D

 Vc falou a agua parou !!! rsrsrs


 Vou abrir um novo chamado e se vc puder pega-lo, agradeço, é sobre uma idéia de integração para o contas a pagar fazendo a rotina pelo deplhi.


Abraços.

Rogério
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

11/07/2009

Haha, esta foi boa.haha.
 Pode abrir o chamado, e pede pra passarem para mim. Fico no aguardo meu amigo.

Boa noite, e bom descanço.

PS : Este chamado aqui posso fechar certo ??

Abs,

Wesley Y
GOSTEI 0
Rogério Nascimento

Rogério Nascimento

11/07/2009

sim meu amigo !!!!
GOSTEI 0
POSTAR