Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.08.2016, 23:42
Maxjuvefan Maxjuvefan вне форума
Прохожий
 
Регистрация: 24.08.2015
Сообщения: 30
Версия Delphi: delphi 2010
Репутация: 10
По умолчанию Ошибка памяти 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.Cre ate(Self);
Razdel1009Form.ManualDock(DockPanel ,nil,alClient);
ActiveForm:=Razdel1009Form;
ActiveBarButton:=blbRazdel1009;
ActiveBarButton.Enabled:=false;
FormResize(Sender);
Razdel1009Form.Show;
Razdel1009Form.GROTMGrid.SetFocus;
Razdel1009Form.GROTMTableView.DataC ontroller.SelectRows(0,0);
end;

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

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

Razdel11_009Form.ManualDock(DockPan el,nil,alClient);
ActiveForm:=Razdel11_009Form;
ActiveBarButton:=blbRazdel3009;
ActiveBarButton.Enabled:=false;
FormResize(Sender);
Razdel11_009Form.Show;
Razdel11_009Form.GROTMGrid.SetFocus ;
Razdel11_009Form.GROTMTableView.Dat aController.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.AppendRe cord;
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;
MAD: [ CODE ] tag required!

Люди добрые, помогите кто чем может

Последний раз редактировалось M.A.D.M.A.N., 16.08.2016 в 08:47.
Ответить с цитированием
  #2  
Старый 16.08.2016, 04:41
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Код:
procedure TMainForm.blbRazdel3009Click(Sender : TObject);
begin
...
Razdel11_009Form.FormCreate(Sender) ;
...
end;
Похоже здесь идёт повторная попытка запуска процедуры криатуры существующей формы, а Form.Create выполняется автоматом один раз
Ответить с цитированием
  #3  
Старый 30.08.2016, 17:29
Maxjuvefan Maxjuvefan вне форума
Прохожий
 
Регистрация: 24.08.2015
Сообщения: 30
Версия Delphi: delphi 2010
Репутация: 10
По умолчанию

Код исправил
Код:
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
Razdel11_009Form:=TForm1.Create(Self);
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;
Админ: Пользуемся тегами при оформлении кода, иначе последуют санкции!

Ошибка вылетает на этой строчке

Razdel11_009Form.GROTMGrid.SetFocus;

Последний раз редактировалось Admin, 30.08.2016 в 20:12.
Ответить с цитированием
  #4  
Старый 30.08.2016, 22:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

вообще, ошибка Access violation обычно связанна с тем, что идет обращение к не созданному или не инициализированному объекту.
Соответсвенно, ставим точку остановки на этой строке, запускаем отладку. Когда выполнение доберется до этого места и остановится, подводим мышку последовательно к каждой части (сначала azdel11_009Form, потом Razdel11_009Form.GROTMGrid и т.д.) и смотрим, а создан ли соотв. объект. Если никаких аномалий нет, то тогда придется копаться в исходниках DevExpress'а, что бы понять что такого ему не нравится.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
ApxaHGe1 (31.08.2016)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter