Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.011 c
9-54392
Naum
2002-10-31 04:52
2003.04.17
RPG в 3D на GLScene


1-54602
ДЮША
2003-04-07 17:26
2003.04.17
сворачивается в системный трей


3-54508
Sectey
2003-03-31 15:42
2003.04.17
Создание и удаление индексов


14-54883
Supreme 2
2003-04-01 19:24
2003.04.17
Как установить ICQ, если используется прокси-сервер


6-54777
Bosh
2003-02-21 04:36
2003.04.17
RAS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский