Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.053 c
2-1165784910
tigrenok_o
2006-12-11 00:08
2006.12.31
Подскажите пожалуйста


11-1143003617
DmiSb
2006-03-22 08:00
2006.12.31
GridLines в ListView другого цвета


2-1166084400
проходил мимо решил заглянуть
2006-12-14 11:20
2006.12.31
разделитель целой и дробной части


2-1165790592
IGray
2006-12-11 01:43
2006.12.31
Хочу компилить BPG из командной строки (т.е. все пакеты)


2-1165929833
kutuzov47
2006-12-12 16:23
2006.12.31
Изменение размеров формы на определенную величину