Страница 1 из 1

Вылетает галактика

Добавлено: 24 июн 2014, 17:57
novichok
Подскажите, пожалуста, почему галактика вылетает при запуске моего ARD-отчёта?
Он компилируется нормально, несколько секунд работает, а потом ...
Сообщение "Прекращена работа программы ядро 2-х уровневого атлантис-приложения"
Прям дурдом какой-то.

Re: Вылетает галактика

Добавлено: 24 июн 2014, 19:04
edward_K
logstrtofile вам в помощь.
сначала редко, потом на выявленном куске чаще.
Вылетает молча? причин много есть - без кода и локализации куска в нем тяжко предположить.
Может вылетать на криво построенном запросе или попытке вставки с использованием полей массивов или данных с другой view.

Re: Вылетает галактика

Добавлено: 24 июн 2014, 19:20
novichok
edward_K писал(а):logstrtofile вам в помощь.
сначала редко, потом на выявленном куске чаще.
Вылетает молча? причин много есть - без кода и локализации куска в нем тяжко предположить.
Может вылетать на криво построенном запросе или попытке вставки с использованием полей массивов или данных с другой view.
Вылетает всегда в разных местах, как будто от фонаря.

Код: Выделить всё

stmt:=sqlAllocStmt;
            sqlAddStr(query,'insert into schfact (direct,tipuser,subtip,dfact,dpost,num,corg,csoprhoz,sum[2],sum[3],summa,summareg) values ');
            sqlAddStr(query,'(1,7218,16,#date(31,12,2013),#date(31,12,2013),'#39+String(i-1)+''#39);
            sqlAddStr(query,',#comp('+zap1[1]+'),#comp('+zap2[1]+'),');
            xlGetCellValue(i,4,yach);
            if trim(yach)=''
            then { xlGetCellValue(i,5,yach);
                   yach:='-'+yach };
            sqlAddStr(query,Replace(yach,',','.')+','+zap2[2]+','+zap2[2]+','+zap2[2]+')');
            k_osh:=sqlPrepare(stmt,query); 
Такой кусок может не нравиться? zap1 и zap2 берутся из предыдущих selectов

Re: Вылетает галактика

Добавлено: 24 июн 2014, 19:32
edward_K
Скорей всего вы не следите за инициализацией или освобождением хендлов.
как то так

Код: Выделить всё

//******************************************************************************

Procedure ClearQuery(var liHandle : longint);
{
  if (liHandle <> 0)
    {
      sqlFreeStr(liHandle);
      liHandle := 0;
    }
}
и так

Код: Выделить всё

  sqlFreeStmt(stmt);
  ClearQuery(vliSQLCommand);
Еще в эти функции лучше передавать готовую строку.
И все так logstrtofile 8) вам покажет в какой именно момент вы вылетаете. Вроде именно это приводит к случайным вылетам в момент инициализации.

Re: Вылетает галактика

Добавлено: 24 июн 2014, 20:23
novichok
Спасибо !!! :smile:
sqlFreeStmt у меня было, а := 0 не было.
Теперь перестала вылетать!