Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2016, 23:41   #1
Maxjuvefan
Пользователь
 
Регистрация: 24.08.2015
Сообщений: 46
По умолчанию Ошибка памяти EAccessViolation при FormCreate в Delphi 10

Здравствуйте, у меня программа на Delphi 10, которая работает с базой данной на sql. При работе программа вылетает и выдает такую ошибку:
Project AMG.exe raised exception class EAccessViolation with message ‘Access violation at address 009AC7D4 in module ‘AMG.exe’. Read of address 000000D0’
Я не могу понять почему два идентичных вызова одного и того же метода приводят к AccessViolation в одном случае (blbRazdel3009Click) и нормальной работе в другом (blbRazdel1009Click).

Код:
procedure TMainForm.blbRazdel1009Click(Sender: TObject);
begin
  FreeActiveItem;

  if Razdel1009Form=nil then
    Razdel1009Form:=TRazdel1009Form.Create(Self);
  Razdel1009Form.ManualDock(DockPanel,nil,alClient);
  ActiveForm:=Razdel1009Form;
  ActiveBarButton:=blbRazdel1009;
  ActiveBarButton.Enabled:=false;
  FormResize(Sender);
  Razdel1009Form.Show;
  Razdel1009Form.GROTMGrid.SetFocus;
  Razdel1009Form.GROTMTableView.DataController.SelectRows(0,0);
end;

procedure TMainForm.blbRazdel3009Click(Sender: TObject);
begin
    FreeActiveItem;

    if Razdel11_009Form=nil then
    begin
      Razdel11_009Form:=TForm1.Create(Self);
      Razdel11_009Form.FormCreate(Sender);
    end;

    Razdel11_009Form.ManualDock(DockPanel,nil,alClient);
    ActiveForm:=Razdel11_009Form;
    ActiveBarButton:=blbRazdel3009;
    ActiveBarButton.Enabled:=false;
    FormResize(Sender);
    Razdel11_009Form.Show;
    Razdel11_009Form.GROTMGrid.SetFocus;
    Razdel11_009Form.GROTMTableView.DataController.SelectRows(0,0);
end;

Функция FormCreate:

procedure TForm1.FormCreate(Sender: TObject);
var
  I: integer;
  Info: PRazdel1Info;
begin
  ABDDataModule.GRQuery.Active := false;
  ABDDataModule.GRQuery.Active := true;
  L := TList.Create;

  while not ABDDataModule.GRQuery.Eof do
  begin
    I := GRTableView.DataController.AppendRecord;
    GRTableView.DataController.Values[I, 0] := false;
    GRTableView.DataController.Values[I, 1] :=
      ABDDataModule.GRQuery.FieldByName('name').AsString;
    GRTableView.DataController.Values[I, 2] :=
      ABDDataModule.GRQuery.FieldByName('numer').AsInteger;
Люди добрые, помогите кто чем может

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 15.08.2016 в 23:47.
Maxjuvefan вне форума Ответить с цитированием
Старый 17.08.2016, 01:12   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Воспользуйся отладчиком и найди строку, при выполнении которой возникает данное сообщение.
В приведенном коде нет явных причин для "Read of address 000000D0".
Но вот этот код, по крайней мере вызывает недоумение
Код:
    if Razdel11_009Form=nil then
    begin
      Razdel11_009Form:=TForm1.Create(Self);
      Razdel11_009Form.FormCreate(Sender);
    end;
northener вне форума Ответить с цитированием
Старый 30.08.2016, 12:56   #3
Maxjuvefan
Пользователь
 
Регистрация: 24.08.2015
Сообщений: 46
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Воспользуйся отладчиком и найди строку, при выполнении которой возникает данное сообщение.
В приведенном коде нет явных причин для "Read of address 000000D0".
Но вот этот код, по крайней мере вызывает недоумение
Код:
    if Razdel11_009Form=nil then
    begin
      Razdel11_009Form:=TForm1.Create(Self);
      Razdel11_009Form.FormCreate(Sender);
    end;
Ошибка вылезает здесь

Razdel11_009Form.GROTMGrid.SetFocus ;
Maxjuvefan вне форума Ответить с цитированием
Старый 30.08.2016, 13:32   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Значит либо Razdel11_009Form, либо GROTMGrid равны nil, т.е. не созданы
p51x вне форума Ответить с цитированием
Старый 30.08.2016, 17:29   #5
Maxjuvefan
Пользователь
 
Регистрация: 24.08.2015
Сообщений: 46
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Значит либо Razdel11_009Form, либо GROTMGrid равны nil, т.е. не созданы
Как это узнать?
Maxjuvefan вне форума Ответить с цитированием
Старый 30.08.2016, 18:08   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Razdel11_009Form уничтожается? Если уничтожается, то как?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.08.2016, 18:11   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Поставьте точку останова на это строке и посмотрите.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка памяти EAccessViolation при использовании TableView.DataController Maxjuvefan Общие вопросы Delphi 1 22.07.2016 17:46
Ошибка доступа к памяти при создании клиента MySQL (Delphi XE7) fredwriter БД в Delphi 17 17.02.2015 12:23
ошибка модема EAccessViolation nurik2120 Компьютерное железо 1 29.05.2012 14:05
Ошибка EAccessViolation. Muaxaxa Помощь студентам 6 21.11.2011 01:01
Ошибка EAccessViolation num8er Общие вопросы Delphi 6 10.10.2007 08:00