Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исключительные ошибки при выполнении запроса в БД 
:(
    Опции темы
MrKit
Дата 25.12.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 18.1.2007
Где: Москва

Репутация: нет
Всего: нет



Проблема: при выполнении схожих запросов к основным таблицам БД (разница в фильтрах, причиной сбоев быть не может - проверил) периодически вываливаются ошибки:
  • List index out of bounds (n), n – число 
  • Thread error: Неверный дескриптор
  • Access violation
  • Invalid pointer operation
Установить строгую зависимость появления ошибок не удалось.
Расставил в местах возможных проблем конструкции try…except…end – не дало результата.
Теперь самое интересное: ошибки появляются только при работе приложения на одном из компьютеров (Core 2 Duo, 2 Gb; WinXP SP2 Pro), БД расположена на другом компьютере, выполняющем роль сервера. При работе на моем компьютере такие ошибки не появляются (Athlon 1700+, 1 Gb; WinXP SP2 Pro). Для отлова багов установил на проблемный компьютер Delphi – еще более странная штука: при работе приложения в режиме отладки ошибки так же не проявляются!

(Delphi 7 + Interbase 7.5 + IBX)

Воспользовался madExcept. Он интегрируется в приложение и в случае ошибки записывает довольно подробный лог. Только вот ничего полезного я там не нашел... Пример лога (NewsF - название моего приложения):
Цитата
compiled with     : Delphi 7
madExcept version : 3.0e
callstack crc     : $13840da6, $2c310242, $33687b70
exception number  : 1
exception class   : EAccessViolation
exception message : Access violation at address 00466BA7 in module 'NewsF.exe'. Read of address 00000008.

Main ($22c):
00466ba7 +007 NewsF.exe  Classes        TList.Add
0046fd6e +03a NewsF.exe  Classes        TComponent.FreeNotification
0055507f +0df NewsF.exe  DBGrids        TGridDataLink.AddMapping
00557c42 +066 NewsF.exe  DBGrids        TCustomDBGrid.DefineFieldMap
00559cec +088 NewsF.exe  DBGrids        TCustomDBGrid.InternalLayout
005589eb +037 NewsF.exe  DBGrids        TCustomDBGrid.EndLayout
0055b418 +010 NewsF.exe  DBGrids        TCustomDBGrid.CMDeferLayout
004a0b68 +188 NewsF.exe  Controls       TControl.WndProc
004a3bc7 +157 NewsF.exe  Controls       TWinControl.WndProc
004a3844 +02c NewsF.exe  Controls       TWinControl.MainWndProc
00470ce0 +014 NewsF.exe  Classes        StdWndProc
7e3696c2 +00a user32.dll                DispatchMessageA
004bff1b +083 NewsF.exe  Forms          TApplication.ProcessMessage
004bff52 +00a NewsF.exe  Forms          TApplication.HandleMessage
004c0182 +096 NewsF.exe  Forms          TApplication.Run
00576768 +064 NewsF.exe  NewsF    43 +5 initialization

thread $55c:
7c90eb94 +000 ntdll.dll             KiFastSystemCallRet
7c90d85a +00a ntdll.dll             NtDelayExecution
0044e071 +00d NewsF.exe   madExcept CallThreadProcSafe
0044e0db +037 NewsF.exe   madExcept ThreadExceptFrame
>> created by Main ($22c) at:
71a83a0c +191 WS2HELP.dll           WahOpenHandleHelper

thread $58c:
7c90eb94 +00 ntdll.dll            KiFastSystemCallRet
7c90e397 +0a ntdll.dll            NtReplyWaitReceivePortEx
0044e071 +0d NewsF.exe  madExcept CallThreadProcSafe
0044e0db +37 NewsF.exe  madExcept ThreadExceptFrame
>> created by Main ($22c) at:
77e8760d +00 RPCRT4.dll

thread $590:
7c90eb94 +00 ntdll.dll              KiFastSystemCallRet
7c90d85a +0a ntdll.dll              NtDelayExecution
7c8023e7 +4b kernel32.dll           SleepEx
7c80244c +0a kernel32.dll           Sleep
0044e071 +0d NewsF.exe    madExcept CallThreadProcSafe
0044e0db +37 NewsF.exe    madExcept ThreadExceptFrame
>> created by Main ($22c) at:
774fcc4a +00 ole32.dll

thread $41c:
7c90eb94 +00 ntdll.dll            KiFastSystemCallRet
7c90e397 +0a ntdll.dll            NtReplyWaitReceivePortEx
0044e071 +0d NewsF.exe  madExcept CallThreadProcSafe
0044e0db +37 NewsF.exe  madExcept ThreadExceptFrame
>> created by thread $58c at:
77e8760d +00 RPCRT4.dll

thread $634 (TthrGetRBCNews): <priority:-1>
7c90eb94 +000 ntdll.dll                           KiFastSystemCallRet
7c90d85a +00a ntdll.dll                           NtDelayExecution
7c8023e7 +04b kernel32.dll                        SleepEx
7c80244c +00a kernel32.dll                        Sleep
0054f44a +6a2 NewsF.exe    thrGetRBCNews 260 +166 TthrGetRBCNews.Execute
0044e18f +02b NewsF.exe    madExcept              HookedTThreadExecute
0046f71c +034 NewsF.exe    Classes                ThreadProc
00404f60 +028 NewsF.exe    System                 ThreadWrapper
0044e071 +00d NewsF.exe    madExcept              CallThreadProcSafe
0044e0db +037 NewsF.exe    madExcept              ThreadExceptFrame
>> created by Main ($22c) at:
00568265 +00d NewsF.exe    Main          374   +1 TfMain.thrGetRBCNewsStart

thread $854 (TthrSearchDB): <suspended> <priority:1>
7c90eb94 +000 ntdll.dll                    KiFastSystemCallRet
0044e18f +02b NewsF.exe madExcept          HookedTThreadExecute
0046f71c +034 NewsF.exe Classes            ThreadProc
00404f60 +028 NewsF.exe System             ThreadWrapper
0044e071 +00d NewsF.exe madExcept          CallThreadProcSafe
0044e0db +037 NewsF.exe madExcept          ThreadExceptFrame
>> created by Main ($22c) at:
0056bc3a +27e NewsF.exe Main      1129 +42 TfMain.bbStartClick

disassembling:
00576704    public NewsF.initialization:     ; function entry point
00576704 38   push    ebp
00576705      mov     ebp, esp
00576707      add     esp, -$10
0057670a      mov     eax, $57607c
0057670f      call    -$16f058 ($4076bc)     ; SysInit.@InitExe
00576714 39   mov     eax, [$57e14c]
00576719      mov     eax, [eax]
0057671b      call    -$b66cc ($4c0054)      ; Forms.TApplication.Initialize
00576720 40   mov     eax, [$57e14c]
00576725      mov     eax, [eax]
00576727      mov     edx, $57677c           ; 'NewsF'
0057672c      call    -$b6af5 ($4bfc3c)      ; Forms.TApplication.SetTitle
00576731 41   mov     ecx, [$57dc98]
00576737      mov     eax, [$57e14c]
0057673c      mov     eax, [eax]
0057673e      mov     edx, [$566f30]
00576744      call    -$b66dd ($4c006c)      ; Forms.TApplication.CreateForm
00576749 42   mov     ecx, [$57e364]
0057674f      mov     eax, [$57e14c]
00576754      mov     eax, [eax]
00576756      mov     edx, [$572a9c]
0057675c      call    -$b66f5 ($4c006c)      ; Forms.TApplication.CreateForm
00576761 43   mov     eax, [$57e14c]
00576766      mov     eax, [eax]
00576768    > call    -$b6681 ($4c00ec)      ; Forms.TApplication.Run
0057676d 44   call    -$171952 ($404e20)     ; System.@Halt0


TthrSearchDB - поток, в котором формируется и выполняется SQL-запрос; через Synchronize на форму fMain выводятся результаты, устанавливается курсор в IBQNews:TIBQuery, связанной с DBGridNews:TDBGrid, вызывается DBGridNews.DataSource.DataSet.EnableControls;
- всё максимально обвешано конструкциями try...except...end с записью ошибок в собственный log-файл.

Код
procedure TthrSearchDB.Execute;
var SQL:string;
...
вызов через Syncronize
    fMain.DBGridNews.DataSource.DataSet.DisableControls;

формирование SQL-запроса

          EnterCriticalSection(csSearch);
          try
            IBQNews.Close;
            IBQNews.SQL.Clear;
            IBQNews.SQL.Add(SQL);
            IBQNews.Open;
            IBQNews.FetchAll;
          except
            on E:Exception do
              begin
                LogWr('! 1902 Error');
          end;
          LeaveCriticalSection(csSearch);
          Synchronize(Finish);
        end;
      if not Terminated then
        Suspend;
    end;


Транзакция, связанная с IBQNews, имеет свойства
Цитата
read_committed
rec_version
nowait
read
AllowAutoStart:=True


Это сообщение отредактировал(а) MrKit - 25.12.2007, 12:26
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.