C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
При компиляции работает отлично, потом — виснет
pink_frog
  Отправлено: 03.03.2006, 11:16


Ученик-кочегар

Группа: Участник
Сообщений: 14



Приходится реанимировать чужой прооект, спросить не у кого.
Сразу после компиляции программа открывается как надо, работает. После открываю этот же (свежайший) экзешник — он начинает работать, подгружает базу (InterBase), просит залогиниться. Дальше окно загрузки (в это время создаются окна программы) — и все. Окно загрузки закрывается, а основное не открывается. Программа не отвечает, висит только на панели задач.
Куда передается управление после Application->Run() я понять не могу.

Кто умный и опытный — подскажите хоть, проблему искать в коде или в настройках билдера.
Guest
Отправлено: 03.03.2006, 11:43


Не зарегистрирован







Сделать хоть одну (главную) автосоздаваемую форму
или при "ручном" создании должна остаться хоть одна активная форма.
pink_frog
Отправлено: 03.03.2006, 12:11


Ученик-кочегар

Группа: Участник
Сообщений: 14



Там надцать этих автосоздаваемых форм. И они таки создаются, но не выводятся. Я полагаю, что до них просто дело не доходит, глюк где-то раньше.
И непосредственно после компиляции и сборки открывается все как надо.
А куда прередается управление после Application->Run() ? как найти?
Guest
Отправлено: 03.03.2006, 12:17


Не зарегистрирован







QUOTE

А куда прередается управление после Application->Run() ? как найти?

Диспетчеру, а сообщения получает та форма, которая в данный момент активна (TScreen->Forms[0])
pink_frog
Отправлено: 03.03.2006, 12:27


Ученик-кочегар

Группа: Участник
Сообщений: 14



Это форма, которая Main или не обязательно?

Строкой (TScreen->Forms[0]) можно передать имя формы в сообщение и посмотреть? (извините уж, если вопросы тупые) sad.gif

И где этого самого диспетчера искать?
olegenty
Отправлено: 03.03.2006, 12:33


Ветеран

Группа: Модератор
Сообщений: 2412



точку останова поставь на TAppication->Run(), и посмотри, доходит ли до туда прога. вообще, поотлаживай.
pink_frog
Отправлено: 03.03.2006, 12:34


Ученик-кочегар

Группа: Участник
Сообщений: 14



через эту точку она перескакивает, а вот чем она занимается дальше?... Виснет..
pink_frog
Отправлено: 03.03.2006, 12:35


Ученик-кочегар

Группа: Участник
Сообщений: 14



Что удивляет меня больше всего: при компиляции работает-то как надо. Вот это почему происходит? Если бы вообще выбивало на одном и том же месте, было бы привычнее.
olegenty
Отправлено: 03.03.2006, 12:36


Ветеран

Группа: Модератор
Сообщений: 2412



тогда смотри код главной формы. главной будет та, что создаётся первой.
pink_frog
Отправлено: 03.03.2006, 12:39


Ученик-кочегар

Группа: Участник
Сообщений: 14



А не может это быть из-за настроек билдера (типа там прога не совсем самостоятельная и нуждается в билдере)? хотя никаких сообщений с требованиями ресурсов нет...
olegenty
Отправлено: 03.03.2006, 12:41


Ветеран

Группа: Модератор
Сообщений: 2412



нет, не может. но точно зависит от рук разработчика.
pink_frog
Отправлено: 03.03.2006, 12:42


Ученик-кочегар

Группа: Участник
Сообщений: 14



Спасибо и на том... Вот бы мне эти руки разработчика. Я б его...
olegenty
Отправлено: 03.03.2006, 12:44


Ветеран

Группа: Модератор
Сообщений: 2412



ну на все методы главной формы воткни точки останова, и глянь, где всё тормозится.
pink_frog
Отправлено: 03.03.2006, 16:51


Ученик-кочегар

Группа: Участник
Сообщений: 14



Проблема вот в чем:

Когда запускаю из-под билдера (при компиляции) переменная Query->ParamCount = 3. Далее по условию цикл IF пропускается, все работает.

Когда запускаю экзешник отдельно от билдера эта переменная =0, поэтому заходим в цикл IF и виснем на строке
CODE

     Query->Open();

Почему эта переменная имеет разные значения?
Почему может не работать Query->Open?

Asher
Отправлено: 03.03.2006, 17:07


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
В run->Parameters...
загляни
pink_frog
Отправлено: 03.03.2006, 17:08


Ученик-кочегар

Группа: Участник
Сообщений: 14



И Вам драссьте! там

Parameters
IBST IB 13148825

Что из этого следует?

Отредактировано pink_frog — 03/03/2006, 17:09
Guest
Отправлено: 03.03.2006, 17:34


Не зарегистрирован







QUOTE

В run->Parameters... загляни

Судя по постам это не параметры запуска приложения а параметры запроса.

QUOTE

Почему эта переменная имеет разные значения?
Почему может не работать Query->Open?

Например потому что отсутствует сам текст запроса или запрос не проанализирован. А может не установлена связь с базой (IBST IB 13148825
).
pink_frog
Отправлено: 03.03.2006, 18:03


Ученик-кочегар

Группа: Участник
Сообщений: 14



вот весь цикл:
CODE

   if(FirstTime && ParamCount()==0)
     {
     TQuery *Query = new TQuery(NULL);
     Query->DatabaseName = ALIAS;
     Query->SQL->Add("SELECT COUNT(*) FROM opers,res WHERE opers.id=res.opid AND opers.optype=110000 AND opers.posted='F' AND res.closedate<'"+DateToStr(Date())+"' AND opers.autor="+IntToStr(SysData->User->ID));
     Query->Prepare();
     Query->Open();  //-------------глючная строка
     int Counter = Query->Fields->Fields[0]->AsInteger;
     delete Query;
     if(Counter>0)
       {
         Timer2->Enabled = true;
         FirstTime = false;
       }
     }


Т.е. это не первый запрос. И логинимся нормально (логин/пароль ведь в базе!)
Guest
Отправлено: 03.03.2006, 18:46


Не зарегистрирован







QUOTE

Программа не отвечает, висит только на панели задач.
...
Query->Open();  //-------------глючная строка

Запрос выполняется слишком долго, программа ждет ответа от сервера.

Выполнить этот запрос в другом средстве (так как TQuery, то SQLExplorer прокатит) и посмотреть результат.

Все, жо понедельника. smile.gif
Guest
Отправлено: 03.03.2006, 18:49


Не зарегистрирован







Да, еще, проверьте блокировки. Может кто заблокировал запись/таблицу а Select ждет.

Вернуться в Вопросы программирования в C++Builder