|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Ошибка памяти 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; Люди добрые, помогите кто чем может Последний раз редактировалось M.A.D.M.A.N., 16.08.2016 в 08:47. |
#2
|
||||
|
||||
Код:
procedure TMainForm.blbRazdel3009Click(Sender : TObject); begin ... Razdel11_009Form.FormCreate(Sender) ; ... end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
Код исправил
Код:
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
|
|||
|
|||
вообще, ошибка Access violation обычно связанна с тем, что идет обращение к не созданному или не инициализированному объекту.
Соответсвенно, ставим точку остановки на этой строке, запускаем отладку. Когда выполнение доберется до этого места и остановится, подводим мышку последовательно к каждой части (сначала azdel11_009Form, потом Razdel11_009Form.GROTMGrid и т.д.) и смотрим, а создан ли соотв. объект. Если никаких аномалий нет, то тогда придется копаться в исходниках DevExpress'а, что бы понять что такого ему не нравится. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
ApxaHGe1 (31.08.2016)
|