Текущий архив: 2006.12.31;
Скачать: CL | DM;
ВнизСново Access Violation... Найти похожие ветки
← →
term1t © (2006-12-12 10:38) [0]Доброго времени суток, мастера. Неделю уже тягаюсь с этой проблемой - результатов нет. Перерыл много чего, но видать не достаточно. Ошибка возникает при попытке сохранения изменений в БД (FoxPro). код прилагается. заранее благодарен.
procedure TF100P.zapomniClick(Sender: TObject);
var
nom:integer;
begin
nom:=dm1.TZayav.FieldByName("numzajav").AsInteger;
try
dm1.TZayav.Edit;
dm1.TZayav.FieldByName("forma").AsInteger:=100;
dm1.TZayav2.Edit;
dm1.TZayav2.FieldByName("forma").AsInteger:=100;
dm1.TZayav.Post; {Access viol....}
dm1.TZayav2.Post;
self.Close;
ShoWmessage("Заявление №"+IntToStr(nom)+" сохранено успешно!");
except
ShowMessage("Ошибка при сохранении заявления!");
end;
end;
← →
ЮЮ © (2006-12-12 10:46) [1]И снова про отладку.
См. [27] в
http://delphimaster.net/view/2-1165768050/
Только тебе Pause даже не требуется. Ибо приложение уже остановится.
← →
cvg (2006-12-12 10:48) [2]У меня такое время от времени бывает. Четко определи длины всех массивов -- и не только в этом куске, а во всей программе.
← →
ЮЮ © (2006-12-12 10:56) [3]
> Четко определи длины всех массивов
И это помешает кому-то смело перешагнуть за его пределы при отключенном Range Checking? Да и если это не массив объектов, то не AV, а что-нибудь другое огребешь. Динамический массив в функции класса - это вообще песня. Stack вызова даже пуст - чисто по симптомам узнаю :)
← →
term1t © (2006-12-12 10:58) [4]ЮЮ © (12.12.06 10:46) [1]
спасибо, сейчас посмотрю.
cvg (12.12.06 10:48) [2]
Во-во, в том то и дело что не постоянно, а время от времени... кое-какую закономерность я уже заметил, но этого не достаточно...
← →
term1t © (2006-12-12 11:07) [5]ЮЮ © (12.12.06 10:56) [3]
<Stack вызова даже пуст - чисто по симптомам узнаю
да, это так. почему это происходит и что я должен сделать?
← →
ЮЮ © (2006-12-12 11:09) [6]Use Debug DCUs включил? Build проекта сделал?
← →
term1t © (2006-12-12 11:20) [7]Build сделал, Use Debug DCUs включил. Когда возникает ошибка - выскакивает окно с асемблеровским (я так пологаю) кодом. там есть возможность посмотреть стек, смотрю, там st0-st7 - Empty
← →
Сергей М. © (2006-12-12 11:28) [8]
> смотрю, там st0-st7 - Empty
Это не тот стек.
Это регистровый стек FPU
← →
ЮЮ © (2006-12-12 11:36) [9]Тот - это View > Debag Windows > Call Stack
← →
term1t © (2006-12-12 11:45) [10]при ошибке в окне Call Stack появляется 2 строки:
1- имя процедуры
2 - имя программы
← →
ЮЮ © (2006-12-12 11:52) [11]Если кликнуть по процедуре, то попадешь в исходник на проблемную строку. Один из объектов - битый.
← →
ЮЮ © (2006-12-12 11:53) [12]Сорри, я вынужден покинуть форум. Терзай Мастеров. Я здесь ещё подмастерье :)
← →
term1t © (2006-12-12 12:02) [13]ЮЮ, и на том большое спасибо за терпение! :)
← →
term1t © (2006-12-12 13:33) [14]up
← →
AndreyRu (2006-12-12 14:27) [15]procedure TF100P.zapomniClick(Sender: TObject);
var
nom:integer;
begin
if dm1.TZayav.RecordCount = 0 then
exit; //Чаще всего все происходит изза этого
dm1.TZayav.First; //Если заранее известно что запись одна
nom:=dm1.TZayav.FieldByName("numzajav").AsInteger;
try
dm1.TZayav.Edit;
dm1.TZayav.FieldByName("forma").AsInteger:=100;
dm1.TZayav2.Edit;
dm1.TZayav2.FieldByName("forma").AsInteger:=100;
dm1.TZayav.Post; {Access viol....}
dm1.TZayav2.Post;
self.Close;
ShoWmessage("Заявление №"+IntToStr(nom)+" сохранено успешно!");
except
on e : exception do //Лучше обрабатывать все ошибки
ShowMessage("Ошибка при сохранении заявления!");
end;
end;
← →
ЮЮ © (2006-12-13 04:41) [16]Ну так на какой строке стоим? В контексте [11].
← →
term1t © (2006-12-13 11:01) [17]указывает на строку, которая вызывает окно редактирования заявления... одним словом это долго рассказывать, но кратко расскажу (может кому из "таких как я" и понадобится):
1. информация о заявлении у меня хранится в 2-х таблицах, которые имеют связь 1 к 1 и на датамаодуле для 1-й из них я установил мастерсоурс другую. при сохранении я делал пост для "главной", а потом для "подчиненной". Как я понял нужно сохранять наоборот (подчиненная, а потом главная). После того как поменял местами - все вроде бы устаканилось (тьфу-тьфу-тьфу :)).
2. на этой же форме была кнопка печати отчета (фастрепорт). после того как документ напечатан сохранение его приводило к той же ошибке. причины неизввестны... поэтому я вынес печать на другую форму. вроде бы тоже пока нормально работает.
ЮЮ, Еще раз большое спасибо!
← →
ЮЮ © (2006-12-13 11:11) [18]
> указывает на строку, которая вызывает окно редактирования
> заявления... одним словом это долго рассказывать, но кратко
> расскажу (может кому из "таких как я" и понадобится):
если окно редактирования - это форма, то скорей всего она ещё не создана.
Если ошибка позникает при запуске программы, когдапользователь ещё ничего не нажимал, то это мог запуститься какой-то обработчик, например из DataModule
> приводило к той же ошибке. причины неизввестны... поэтому
> я вынес печать на другую форму. вроде бы тоже пока нормально
> работает.
Причина та же - порядок создания форм. Достаточно было обезопасить себя проверкой на nil указателя формы.
← →
term1t © (2006-12-13 11:29) [19]ЮЮ © (13.12.06 11:11) [18]
Возможно. я только начинающий и этих тонкостей (а может и некоторых основ...) не знаю. Обязательно почитаю что-то по данной теме.
Страницы: 1 вся ветка
Текущий архив: 2006.12.31;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.049 c