Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > EAccessViolation


Автор: chetl 20.10.2008, 12:16
Этот баг появился после переноса поей проги со всеми исходниками на другой комп, до этого все работало нормально.
Ошибка
Код

Project Project1.exe raised exception class EAccessViolation with message 
'Access violation at address 004C39AF in module 'Project1.exe'. Read of address 00000280'.Process stop.
появляется в строке 
Код

procedure Form1.FormActivate(Sender: TObject);
begin
datamodule12.ADOTable4.Edit;//здесь ошибка
end;

только когда идет обращение к компоненту, находящемуся в datamodule.
Если adotable4 перенести на Form1 то все компилиться без ошибок. 

Автор: Frees 20.10.2008, 12:18
datamodule12 не создан скорее всего

Добавлено через 1 минуту и 13 секунд
а если так написать ошибка остается?
Код

procedure Form1.FormActivate(Sender: TObject);
begin
if datamodule12 = nil then
  datamodule12 := Tdatamodule12.create(Application);

datamodule12.ADOTable4.Edit;//здесь ошибка
end;

Автор: chetl 20.10.2008, 12:22
спс!Все получилось!
а строка 
Application.CreateForm(TDataModule2, DataModule2);
разве не создает его?

Автор: Frees 20.10.2008, 12:35
Цитата(chetl @  20.10.2008,  14:22 Найти цитируемый пост)
а строка Application.CreateForm(TDataModule2, DataModule2);разве не создает его?

1 а где она у тебя написана
2 она создаст DataModule2 а обращаешся ты к  datamodule12 

Автор: chetl 20.10.2008, 12:56
в project1.dpr (project->View Source)

Код

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {DataModule2: TDataModule},
  Unit12 in 'Unit12.pas' {DataModule12: TDataModule};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm, Form1);
  Application.CreateForm(TDataModule2, DataModule2);
  Application.CreateForm(TDataModule12, DataModule12);
  Application.Run;
end.

Автор: Frees 20.10.2008, 13:03
наверно у тя Form1 создалась и показываться начала 
а DataModule12 еще не успел создаться на момент FormActivate
может в этом дело

Автор: Sansa 21.10.2008, 18:33
Да, скорее всего. chetl, ты лучше вынеси создание дата-модулей повыше создания формы, а то получается некрасиво, сначала ты сам его создаешь при первом обращении, а затем он еще раз создается при участии Application

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)