Форум: "Базы";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
ВнизОбработка AfterScroll Найти похожие ветки
← →
РВА (2003-07-30 15:57) [0]Добрый день уважаемый мастера!
Возникла проблема по обработке AfterScroll таблицы.
На форме GridEH c таблицей и часть полей этой же таблицы расположены на отдельной панели в этой же форме. При перемещении по таблице эти поля либо показываются либо нет. Эти действия привязаны к AfterScroll таблицы. Других действий (в процедуре показа и сокрытия) нет. По окончанию форма закрывается без вопросов, а когда закрываю приложение возникает искл ситуация Acses Violation по адресу и т.д. Если закрываю эту процедуру кометариями все проходит нормально.
Пробовал в Form.Close прописать AfterScrol := nil и Table.Active := False - глюк вылазит через раз – то нормально, то появляется сообщение.
Не пойму в чем ошибка ... Подскажите пожалуйста , заранее благодарен.
← →
sniknik (2003-07-30 16:05) [1]так понимаю, классическая ошибка 17-й строки. (причем считать надо от begin-а процедуры обработчика AfterScroll :о)))
← →
Соловьев (2003-07-30 16:10) [2]
> sniknik © (30.07.03 16:05)
:)))
> По окончанию форма закрывается без вопросов, а когда закрываю
> приложение возникает искл ситуация Acses Violation по адресу
> и т
что в AfterScroll? код?
← →
РВА (2003-07-30 16:16) [3]procedure TNaktek.ScrlTable;
var Tp: Integer;
begin
if not Gnak.Eof then
Begin
Tp := GnakTip.AsInteger;
case Tp of
1: Begin
RxLabel1.Visible := False;
RxLabel3.Visible := False;
RxLabel4.Visible := False;
DBEditEh1.Visible := False;
DBEditEh2.Visible := False;
DBEditEh3.Visible := False;
DBDateTimeEditEh1.Visible := False;
RxLabel2.Visible := True;
DBLookupComboBoxEh2.Visible := False;
DBLookupComboBoxEh1.Visible := True;
end;
2: Begin
RxLabel1.Visible := False;
RxLabel2.Visible := False;
RxLabel3.Visible := True;
RxLabel4.Visible := True;
DBEditEh1.Visible := True;
DBEditEh2.Visible := True;
DBEditEh3.Visible := True;
DBDateTimeEditEh1.Visible := True;
DBLookupComboBoxEh2.Visible := False;
DBLookupComboBoxEh1.Visible := True;
end;
3: Begin
RxLabel1.Visible := True;
RxLabel2.Visible := False;
RxLabel3.Visible := False;
RxLabel4.Visible := False;
DBEditEh1.Visible := False;
DBEditEh2.Visible := False;
DBEditEh3.Visible := False;
DBDateTimeEditEh1.Visible := False;
DBLookupComboBoxEh2.Visible := True;
DBLookupComboBoxEh1.Visible := False;
end;
4: Begin
RxLabel1.Visible := False;
RxLabel2.Visible := False;
RxLabel3.Visible := False;
RxLabel4.Visible := False;
DBEditEh1.Visible := False;
DBEditEh2.Visible := False;
DBEditEh3.Visible := False;
DBDateTimeEditEh1.Visible := False;
DBLookupComboBoxEh2.Visible := False;
DBLookupComboBoxEh1.Visible := False;
end;
else Begin
RxLabel1.Visible := False;
RxLabel2.Visible := False;
RxLabel3.Visible := False;
RxLabel4.Visible := False;
DBEditEh1.Visible := False;
DBEditEh2.Visible := False;
DBEditEh3.Visible := False;
DBDateTimeEditEh1.Visible := False;
DBLookupComboBoxEh2.Visible := False;
DBLookupComboBoxEh1.Visible := False;
Beep;
End;
End;
End;
end;
← →
stud (2003-07-30 16:23) [4]если через раз - попробуй в обработчик onclosequery закрывать таблицу
← →
ЮЮ (2003-07-31 03:18) [5]В AfterScroll одного DataSet-а вызывается процедура, использующая два: Gnak и GnakTip, один из которых может быть уже разрушен при уничтожении формы
← →
Соловьев (2003-07-31 10:08) [6]
> РВА (30.07.03 16:16)
> procedure TNaktek.ScrlTable;
это же не AfterScroll !!!
> not Gnak.Eof then
> Begin
> Tp := GnakTip.AsInteger;
utl Gnak и GnakTip ? в DataModule?
← →
РВА (2003-07-31 14:26) [7]По AfterScrool запускается процедура ScrTable код которой приведен. В зависимости от поля Tip табл. Gnak выполняется действие (1,2, ..)Поле Tip - Integer
← →
sniknik (2003-07-31 16:17) [8]гдето чтото у тебя уничтожается, обьект какойто, а обращение к нему еще есть. именно в этом обработчике, суда по свему.
к примеру, сделай такой код
var Tp: Integer;
begin
if not DMod.Gnak.Eof then
( Tp) гдето чтото у тебя уничтожается, обьект какойто, а обращение к нему еще есть. именно в этом обработчике, суда по свему.
к примеру, сделай такой код
var Tp: Integer;
begin
if not DMod.Gnak.Eof then
Tp := DMod.GnakTip.AsInteger;
Label1.Caption:= IntToStr(Tp);
end;
в onCreate главной формы, пока DMod еще не создан (DMod - модуль данных в котором таблицы типа должны лежать)
получиш ту же ошибку, но тут до создания а у тебя после уничтожения.
проверь что и в каком порядке уничтожается
Table.Active := False правильное решение, в onFormClose первой командой, AfterScrol := nil не обязательно.
но еще случай к примеру если форма не главная да еще и mdiChild (к примеру) то ты уверен что по закрытию главной произойдет сначала закрытие чилда (событие, чтобы сработало Table.Active := False)?
или он будет уничтожать обьекты, а событие еще отрабатывает?
тогда еще и на onFormClose главной формы надо Table.Active := False; ставить. первой же командой.
в общем надо по программе смотреть. найти что именно ошибку дает. очень может лог помоч. после каждой команды в событии пиши в файл "я команда хххх отработала .время."(open-write-close), тогда после получения ошибки смотриш в лог и последней записаной командой будет отработавшая нормально, следующая после нее в процедуре сбоит... иши почему.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c