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

Вниз

Ошибка при закрытии программы   Найти похожие ветки 

 
ввх ©   (2004-10-20 22:22) [0]

Здравствуйте Мастера! Возможно мой вопрос необходимо рассматривать в другой конференции, но дело в том что программа написана для работы с базой данных, поэтому я решил написать сюда.

Дело вот в чем: программа компилируется нормально, но при завершении выскакивает ошибка:

.... EListError with message "List index out of bounds (7).
Причем если внести какое нибудь изменение, например заремировать любую строку, то все нормально. Закрываем проэкт, открываем снова, компилируем, и ошибка появляется опять. Возвращаем то что заремировали, компилируем - завершение нормально. Снова закрываем проэкт, открываем, компилируем - ошибка. Я уже что только не пробовал, ничего не получается. Помогите пожалуйста! Если необходимо предоставлю фрагменты исходного кода.


 
Vemer ©   (2004-10-20 23:15) [1]

У меня похожее было при работе с D на медленной машине.
Лечилось перезапуском D.
А номера параметров (индексы по ихнему в данном случае) я бы проверил все-таки.


 
ввх ©   (2004-10-20 23:36) [2]

У меня Celeron 1200, 256 RAM - неужели медленная машина?

/А номера параметров (индексы по ихнему в данном случае) я бы проверил все-таки./

Параметры чего? И где их проверять?


 
DrPass ©   (2004-10-20 23:56) [3]


> Дело вот в чем: программа компилируется нормально, но при
> завершении выскакивает ошибка:

Это все-таки логическая ошибка - где-то у тебя или ресурсы неправильно освобождаются, или еще что-то. Без кода не выяснить


 
DeepSky ©   (2004-10-21 00:10) [4]

В принципе, самое распространённое в прогах, работающих с БД - это ошибка с параметрами Query. Хотя наверняка

> Без кода не выяснить


 
ввх ©   (2004-10-21 00:12) [5]

Я не знаю какой код привести точно, возьму пожалуй запрос на закрытие программы:
procedure TfMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
k:integer;
begin
if Application.MessageBox("Выйти из программы?",
     "Выход",MB_ICONQUESTION+MB_OKCANCEL)=IDOK then
     begin
      with  DMClient do
       begin
         if pFIBTransaction1.Active then pFIBTransaction1.Rollback;
         if pFIBTransaction2.Active then pFIBTransaction2.Rollback;
         for k:=0 to componentCount-1 do
              begin
                if components[k] is TpFIBDataSet then
                  (components[k] as TpFIBDataSet).Active:=False;
              end;

         with pFIBDatabase1 do
          begin
            if Connected then close;
          end;
       end;
     AbonentData.Free;
     CanClose:=True;
    end
  else CanClose:=False;
end;


 
ЮЮ ©   (2004-10-21 02:45) [6]

Ну это же не вся программа.  
(components[k] as TpFIBDataSet).Active:=False, наверняка, вызывает навешанные на TpFIBDataSet обработчики.
Неужели сложно с отладчиком пройти всю эту процедуру и найти место, где возникает ошибка?


 
Deniz ©   (2004-10-21 08:22) [7]

Добавлю, что при закрытии транзакции
if pFIBTransaction1.Active then pFIBTransaction1.Rollback;
if pFIBTransaction2.Active then pFIBTransaction2.Rollback;

все, связанные с этими транзакциями, датасеты закрываются автоматически, и соот-но  
for k:=0 to componentCount-1 do
...

практически не нужен.
Что такое AbonentData?


 
Johnmen ©   (2004-10-21 09:12) [8]

Ещё общие замечания по коду.
1. зачем в цикле  for k:=0 бегин блок ?
2. зачем в with pFIBDatabase1 do бегин блок ?
3. AbonentData.Free; надо делать явно не здесь; или выполнять проверку.


 
msguns ©   (2004-10-21 09:34) [9]

А у меня вопросы по транзакциям.
Раз имеется более одной транзакции, а БД одна (судя по коду), след-но можно предположить, что весь обмен данными с БД функционально разбит на 2 части: предположительно читающую и пишущую. А если так, то к чкму это:

        if pFIBTransaction1.Active then pFIBTransaction1.Rollback;
        if pFIBTransaction2.Active then pFIBTransaction2.Rollback;
       

Далее. Сначала завершаем (в данном случае откатываем)транзакции, а потом закрываем НД, выполнявшиеся в рамках этих транзакций ?

Ну и опять же совершенно неясно, что там делается в обработчиках событий тех же датасетов (например AfterScroll или AfterClose), которые запросто могут "ожить" при завершении транзакции. Ну и прочее.

Любопытно было бы также узнать, какие "отремленные" строки кода приводят к краху приложения.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.066 c
14-1099778899
Comp
2004-11-07 01:08
2004.11.21
Какой антивирус лучше?


4-1097260602
Dot
2004-10-08 22:36
2004.11.21
Wallpapers


4-1097168923
Arnold
2004-10-07 21:08
2004.11.21
Как создать компонент TreeView с помощью функции CreateWindow


3-1098809624
Andriy Tysh
2004-10-26 20:53
2004.11.21
EDatabaseError Unable to find record. No key specified


14-1099890398
ms
2004-11-08 08:06
2004.11.21
Задачка по информатике





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