Fórum Access Violation at adress .... in module .... XXX.exe #500953
12/11/2014
0
criei uma tela de cadastro básica e um DM, com DbExpress (firebird).
Ela está funcionando perfeitamente. No entanto, para construir o sistema criei um form principal. Esse form chama a tela de cadastro.
Quando eu chamo a tela de cadastro dessa maneira, ao gravar as alterações eu obtenho o seguinte erro:
"Access Violation at address 007AAB75 in module 'Academia.exe'. Read of address 0000003AC."
O DM e o form principal estão em auto-create. O form de cadastro está em avaible.
O que eu estranho, é que o erro está exatamente na linha de gravação, e não na abertura da conexão do DM. Alguém sabe o que estou deixando de fazer?
Ressalto novamente, se eu retiro o form principal e deixo a tela de cadastro com o DM em auto-create, ele funciona perfeitamente.
Não tenho muita experiência em Delphi, talvez seja uma bobeira, mas de qualquer forma gostaria da ajuda de vocês.
Desde já obrigado!
Segue o código:
_____________________________________________________________-
implementation
{$R *.dfm}
uses DataModule;
procedure TfrmCadastro.btnGravarClick(Sender: TObject);
begin
dmCadastro.cdsAcademia.Open;
dmCadastro.cdsAcademia.Edit;
dmCadastro.cdsAcademia.Append;
dmCadastro.cdsAcademia.FieldByName('NOME').Value:=frmCadastro.edtNome.Text; {<---ERRO OCORRE NESTA LINHA}
dmCadastro.cdsAcademia.Post;
dmCadastro.cdsAcademia.ApplyUpdates(-1);
dmCadastro.cdsAcademia.Close;
end;Giovani
Curtir tópico
+ 0Posts
12/11/2014
Ricardo
dmCadastro.cdsAcademia.FieldByName('NOME').Value := edtNome.Text;
Você está querendo editar um registro existente ou adicionar um novo?
Usar as duas linhas abaixo? ou você edita ou insere.
dmCadastro.cdsAcademia.Edit;
dmCadastro.cdsAcademia.Append;
Observe esses pontos que já vai resolver.
Gostei + 0
12/11/2014
Ricardo
Se não, então tem que colocar a linha dmCadastro.cdsAcademia.CreateDataSet antes da linha dmCadastro.cdsAcademia.Open.
Gostei + 0
12/11/2014
Giovani
Ela só dá o Access Violation quando eu crio um form principal pelo qual eu acesso o form de cadastro. Se eu coloco o form de cadastro direto no auto-create e retiro o form principal do projeto, não há erro algum e o registro é salvo no banco.
O problema não está no dataset, nem nos comandos de inserção, portanto.
De qualquer maneira, eu fiz o que vc recomendou. A mensagem de erro continua a mesma.
Gostei + 0
12/11/2014
Giovani
Valeu, Abs!
Gostei + 0
12/11/2014
Ricardo
dmCadastro.cdsAcademia.Edit;
dmCadastro.cdsAcademia.Append;
ou mesmo que fosse
dmCadastro.cdsAcademia.Append;
dmCadastro.cdsAcademia.Edit;
isso não existe. Ou insere ou edita.
O self é para o próprio form gerenciar a forma com ele é executado e encerrado. No autocreate é própria aplicação que vai cria-lo na memória no momento da execução do sistema; daí o erro.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)