Fórum Abstract Error #7499
11/07/2009
0
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
Curtir tópico
+ 0Posts
11/07/2009
Wesley Yamazack
Vou analisar teu problema, e logo retornarei, peço que aguarde um pouco, OK ?
Att,
Wesley Y
Gostei + 0
12/07/2009
Rogério Nascimento
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
13/07/2009
Wesley Yamazack
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
13/07/2009
Rogério Nascimento
Gostei + 0
14/07/2009
Devmedia
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
14/07/2009
Rogério Nascimento
Gostei + 0
14/07/2009
Wesley Yamazack
Att,
Wesley Y
Gostei + 0
15/07/2009
Rogério Nascimento
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
16/07/2009
Wesley Yamazack
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
16/07/2009
Rogério Nascimento
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
17/07/2009
Wesley Yamazack
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
17/07/2009
Rogério Nascimento
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
20/07/2009
Wesley Yamazack
Sacou ?
Att,
Wesley Y
Gostei + 0
20/07/2009
Rogério Nascimento
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
20/07/2009
Wesley Yamazack
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
Clique aqui para fazer login e interagir na Comunidade :)