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

Вниз

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

Наверх





Память: 0.49 MB
Время: 0.043 c
6-1154996642
progbeg
2006-08-08 04:24
2006.12.31
Как обратиться ко второму окну webbrowser а?


15-1165839388
Romas81
2006-12-11 15:16
2006.12.31
программный менеджер для мобильного


2-1165997990
Клара
2006-12-13 11:19
2006.12.31
Отчеты


2-1165833561
RebroFF
2006-12-11 13:39
2006.12.31
Затрудняюсь построить запрос


2-1165673458
Pa5ha
2006-12-09 17:10
2006.12.31
Генератор управлялки к бд





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский