GARANTIR DESCONTO

Fórum Access Violation at adress .... in module .... XXX.exe #500953

12/11/2014

0

Prezados, estou com a seguinte dificuldade:

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

Giovani

Responder

Posts

12/11/2014

Ricardo

Vamos lá...

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.
Responder

Gostei + 0

12/11/2014

Ricardo

Outra coisa que esqueci de citar: Você já criou o dataset?

Se não, então tem que colocar a linha dmCadastro.cdsAcademia.CreateDataSet antes da linha dmCadastro.cdsAcademia.Open.
Responder

Gostei + 0

12/11/2014

Giovani

Opa, então Ricardo, como eu disse a aplicação funciona!
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.
Responder

Gostei + 0

12/11/2014

Giovani

Gente, se interessar a alguém. Eu troquei o 'frmCadastro' do código por Self e daí o erro de Access Violation cessou.

Valeu, Abs!
Responder

Gostei + 0

12/11/2014

Ricardo

Que bom Giovani que resolveu, mas vamos a umas considerações:

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.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar