Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.17;
Скачать: CL | DM;

Вниз

Access Violation   Найти похожие ветки 

 
Jaxtor ©   (2003-04-07 10:52) [0]

Специалисты по AccessViolation помогите!!!

В одной из процедур модуля объявлена переменная ShowForm: TForm;
Также в этой процедуре есть визуализация формы:

ShowForm:=(DocForm.FindComponent("PrihNaklForm_") as TForm);
if ShowForm=nil then
begin
ShowForm:=NewPrihNakl.TNewPrihForm.Create(Self);
ShowForm.Name:="PrihNaklForm_";
end;//if ShowForm=nil
ShowForm.Show;

А вот когда на форме NewPrihNakl нажимается кнопка возникает AccessViolation. Причем не сразу после нажатия, а после
операции:
KomuVariant:=NewPrihNakl.NewPrihForm.DBLookupComboboxEh1.DataSource.DataSet.FieldValues["COMPANYID"];

var KomuVariant: Variant;

Что тут может быть?


 
Palladin ©   (2003-04-07 11:19) [1]

все что угодно


 
Jaxtor ©   (2003-04-07 11:23) [2]

Palladin, большое тебе спасибо за правильный ответ!!!!


 
Digitman ©   (2003-04-07 11:31) [3]


> Jaxtor


а тебе - за великолепно продуманный вопрос !


 
Digitman ©   (2003-04-07 11:39) [4]

вот эта строчка
ShowForm:=NewPrihNakl.TNewPrihForm.Create(Self);

вызывает оч большие вопросы и сомнения в корректности

кр.того,
ShowForm=nil - при каких условиях и в какие моменты ссылка на ShowForm сбрасывается в nil ?


 
Jaxtor ©   (2003-04-07 11:44) [5]

>ShowForm:=NewPrihNakl.TNewPrihForm.Create(Self);
здесь все нормально.

>ShowForm=nil - при каких условиях и в какие моменты ссылка на ShowForm сбрасывается в nil?
Естественно, когда ссылки на эту форму нет.


 
Jaxtor ©   (2003-04-07 11:46) [6]

Собственно мой уровень знаний позволяет самостоятельно ответить на этот вопрос, здесь вопрос только во времени.


 
Skier ©   (2003-04-07 11:47) [7]

Рискну заняться телепатией...:)

var
AComponent : TComponent;
begin
AComponent := DocForm.FindComponent("PrihNaklForm_");
if not Assigned(AComponent) then begin
AComponent := TNewPrihForm.Create(Self);
with TNewPrihForm(AComponent) do begin
Name:="PrihNaklForm_";
KomuVariant:=DBLookupComboboxEh1.DataSource.
DataSet.FieldValues; //(?)
Show;
//освобождение формы возлагается на автора...
end; //with
end; //if
end;




 
Digitman ©   (2003-04-07 11:51) [8]

1. NewPrihNakl - это что, имя модуля ?

2. время жизни локальной переменной процедуры равно времени жизни процедуры. Вот тебе и "грабли")


 
Jaxtor ©   (2003-04-07 11:58) [9]

>время жизни локальной переменной процедуры равно времени жизни процедуры
Да, ты прав, я это знаю. Скорее всего ошибка возникает по этой причине. Но переменную ShowForm я не использую в модуле NewPrihNakl. Можно сделать ее глобальной, но при этом запись:
ShowForm.DBLookupComboboxEh1.DataSource.DataSet.FieldValues["COMPANYID"]; будет неправильным.


 
Lord Warlock ©   (2003-04-07 11:58) [10]

Я попробовал прокатать упрощенный до Form1, Form2 пример. Очень большую роль играет Self, а у тебя он - не понятно кто, хотя судя по коду должен быть DocForm. AccessVioletion у меня начисто исчез после включения свойств Drag&Dock. Form1 - Dock


 
Digitman ©   (2003-04-07 12:00) [11]

если NewPrihNakl - это имя модуля и NewPrihForm есть переменная в этом модуле, то мои "телепатическиеспособности" подсказывают, что в момент обращения к этой переменной ее содержимое не имеет смысла ("мусор" или nil). Ибо нигде в приведенном коде эта переменная не упоминается в кач-ве приемника ссылки на экз-р класса TNewPrihForm


 
Jaxtor ©   (2003-04-07 12:02) [12]

Значит вопрос теперь, как используя переменную ShowForm обращаться к компонентам, размещенным на форме?
ShowForm. ....


 
Lord Warlock ©   (2003-04-07 12:03) [13]

Хотя нет про Drag&Dock я наврал, все и так работает


 
Palladin ©   (2003-04-07 12:07) [14]


> Jaxtor © (07.04.03 12:02)

точно также как ты и делал
ShowForm.FindComponent


 
VaS ©   (2003-04-07 12:08) [15]

Особенно радует строчка

NewPrihNakl.NewPrihForm.DBLookupComboboxEh1.DataSource.DataSet.FieldValues["COMPANYID"]

:))


 
Jaxtor ©   (2003-04-07 12:21) [16]

Не понимаю так что-ли:

var v:Variant;
v:= ShowForm.FindComponent("NewPrihNakl.NewPrihForm.DBLookupComboboxEh1.DataSource.DataSet.FieldValues["COMPANYID"]") as Variant;

Тупизм какой-то.


 
Palladin ©   (2003-04-07 17:19) [17]

да
точно

тупизм


 
icWasya ©   (2003-04-07 18:36) [18]


var v:Variant;
ShowForm:TForm;
LookUp:TDBLookupComboboxEh;

ShowForm:=(DocForm.FindComponent("PrihNaklForm_") as TForm);
LookUp:= ShowForm.FindComponent("DBLookupComboboxEh1) as TDBLookupComboboxEh;
v:= LookUp.DataSource.DataSet.FieldValues["COMPANYID"]") as Variant;






 
MalkoLinge(ForgotPass)   (2003-04-07 18:48) [19]

Люди ! Он просто издеваеться

Jaxtor - совет, изредка просто необходимо ДУмать, что пишешь. Тогда подобных ошибок не будет вообще. А еще есть замечательная штука, как ссылка на класс.
Далее
ShowForm:=(DocForm.FindComponent("PrihNaklForm_") as TForm);
Несмотря на то, что nill без ошибок приводиться к Tform, сия операция из за неявного вызова is очень медленная и бессмысленная в случае, если компонента нету :) Если обращать побольше внимания на такие-вот вещи...глядишь и ошибок поуменьшиться


 
Сашко   (2003-04-07 20:02) [20]

Мужики! А что с моим вопросом?
У меня тоже AccessViolation, хотя ситуация попроще.

delphimaster.net/view/1-1049667119/




Страницы: 1 вся ветка

Текущий архив: 2003.04.17;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
1-54605
Max1111
2003-04-04 12:57
2003.04.17
Проблема с глобальным динамическим массивом4


1-54641
Kremen
2003-04-08 13:00
2003.04.17
Как узнать версию Windows?


1-54551
Опус
2003-04-06 10:23
2003.04.17
Отчеты. Подскажите как поместить CheckBox или ...


3-54480
Viktor1
2003-03-30 15:53
2003.04.17
Помогите, как такое сотворить? ADOTable, Delphi6.


14-54807
Романов Р.В.
2003-03-08 20:49
2003.04.17
---|Ветка была без названия|---