Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как откомпилировать? удаленная сеть (базы данных) 
V
    Опции темы
Лена
Дата 12.4.2007, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

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



Если приложение разрабатывается и в локальной сети есть сервер баз данных, то все происходит нормально. Все работает. Готовый exe файл соединяется с базой данных и загружает в гриды данные. Если этот готовый exe файл перенести в удаленную сеть правильно настроить соединение, то тоже все работает нормально. Однако если на этом удаленном компьютере попробовать откомпилировать проект, то получаю окно, с которым не знаю, как бороться. Получается я могу разрабатывать приложения только в локальной сети, где расположен сервер баз данных, а на удаленном компьютере другое сети компилировать его не могу? Подскажите, как быть?
Я поставила на вкладке Сode Guard все галочки. Но никаких ошибок он не пишет. В FormCreate доходит до строки DataModule2->ClientDataSetKey->Open(); и затем это окно CPU.

Это сообщение отредактировал(а) Лена - 12.4.2007, 13:00

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  sos.gif 24,88 Kb
PM MAIL   Вверх
ama_kid
Дата 12.4.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Цитата(Лена @  12.4.2007,  12:40 Найти цитируемый пост)
получаю окно, с которым не знаю, как бороться
Нало бороться с причиной, а не со следствием...
Цитата(Лена @  12.4.2007,  12:40 Найти цитируемый пост)
Получается я могу разрабатывать приложения только в локальной сети, где расположен сервер баз данных, а на удаленном компьютере другое сети компилировать его не могу?
Бред...
Цитата(Лена @  12.4.2007,  12:40 Найти цитируемый пост)
Подскажите, как быть?
Учиться пользоваться дебагом, ловить исключения и правильно обрабатывать ошибки. 
Цитата(Лена @  12.4.2007,  12:40 Найти цитируемый пост)
В FormCreate доходит до строки DataModule2->ClientDataSetKey->Open(); и затем это окно CPU.
Есть подозрение, что это необрабатываемое тобой исключение, которое ловит среда разработки. Где-то в настройках есть "Stop on exception" - сними её... Ну и желательно, все-таки, его обработать в своей программе - смотри трассировкой, из-за чего бросается исключение, вполне возможно, какие-то настройки некорректные, либо запрос неверный идет... Ну и вообще, сувать в FormCreate работу с элементами формы не стоит, ибо это тоже может привести к исключениям. 

P.S. Кстати, судя по тому, что без среды эта программа работает корректно - есть подозрение, что данный код - лишний...



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Лена
Дата 12.4.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

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



Если закомментировать код в FormCreate, то код компилируется. Может быть это связано с созданием DataModule? Может он не успевает создаться? Он у меня первый в списке Auto create forms.
Как смотртреть трассировкой? Научите.
PM MAIL   Вверх
ama_kid
Дата 12.4.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



FormCreate - это метод, вызываемый в момент создания формы и неважно, каким по счету он стоит у тебя в AutoCreateForms, вполне возможно, что компоненты не успевают создаться к моменту, когда ты вызываешь их методы (в данном случае, ты вызываешь метод Open() компонента DataModule). Использовать методы формы (или её компонентов) в момент её создания - мало того, что плохой стиль, но и принципиально неправильно, ибо метод может обращаться к переменным и объектам, для которых еще не выделена память... Но вообще, надо смотреть конкретно код, а не гадать просто так...
Цитата(Лена @  12.4.2007,  16:19 Найти цитируемый пост)
Как смотртреть трассировкой? Научите.
Посмотри тут (и конкретно третий пункт)



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Лена
Дата 12.4.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

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



Я переместила весь код для эксперимента в OnShow формы. Не помогло.
Устанавливаю точку останова в самом начале кода. Начинаю компилировать. Доходит до точки останова, далее используя клавишу F8, спускаюсь вниз по коду. Когда дохожу до строки DataModule2->ClientDataSetKey->Open(); выскакивает окно CPU. Жму дальше, получаю еще одно окно (см. рис.) на втором разе. Жму в нем ОК и опять жму F8 после нескольких раз опять это окно на фоне окна CPU.
Спасибо за сссылку. Сейчас посмотрю.

P.S.
После длительных экспериментов выявила что СPU ругается на строку: DataModule2->ADOConnection1->Connected = true; В настройках соединения делаю тест, пишет все нормально, а при компиляции выдает CPU.


Это сообщение отредактировал(а) Лена - 12.4.2007, 17:46

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  new_1.gif 5,59 Kb
PM MAIL   Вверх
Vyacheslav
Дата 12.4.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

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



Сколько можно уже твердить:
" Не пользуйтесь событием OnCreate" В С++ для этого существуют конструкторы.  

Цитата(Лена @  12.4.2007,  16:19 Найти цитируемый пост)
Он у меня первый в списке Auto create forms.
Как смотртреть трассировкой?

DataModule - первый? Вообще первая в списке форма автоматически становится главной и ее время жизни определяет время жизни приложения. А у Вас  первым оказывается DataModule. Ну, не знаю. Может конечно Билдер разруливает данный момент и берет в качестве главно1 формы не первого в списке вообще, а первую форму в списке. Никогда не задавался этим вопросом, потому как это порочная практика. Кто мешает Вам убрать ее из списка и содавать вручную , хотя бы в конструкторе тойже формы.

Добавлено @ 18:37
Цитата(Лена @  12.4.2007,  16:42 Найти цитируемый пост)
После длительных экспериментов выявила что СPU ругается на строку: DataModule2->ADOConnection1->

DataModule2 случайно не равно NULL. Отладчиком смотрели?



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Лена
Дата 12.4.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

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



Я добавила обработчик в DataModule
Код

void __fastcall TDataModule2::DataModuleCreate(TObject *Sender)
{
 ShowMessage("Создан DataModul");
}

Я вижу ShowMessage, он появляется перед окном CPU.
PM MAIL   Вверх
Vyacheslav
Дата 13.4.2007, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

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



Цитата(Лена @  12.4.2007,  18:44 Найти цитируемый пост)
Я добавила обработчик в DataModule

Лена. Неужели отладчиком пользоваться не умеете?  Если нет, учитесь. Значительно облегчает жизнь программиста. Посмотрите, на всякий случай свойство у формы OldCreateOrder. Должно быть false. Может случайно переправили.




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
HappyLife
Дата 13.4.2007, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

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



Лена, самый простой способ отладки.
Слево от кода программы, есть полоса, тыкая на ней будут выделяться строки цветом соответсвующим  настройкам (по-умолчанию красный). Напротив которых тех что вы ткнете, программа в реалтайме, будет останавливаться. Если наводить мышкой на переменные, будут всплывать плавающие окна со значением этих переменных.

Это сообщение отредактировал(а) HappyLife - 13.4.2007, 10:56
PM MAIL   Вверх
Лена
Дата 13.4.2007, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

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



HappyLife, точками остонова я умею конечно пользоваться.  smile Постоянно их использую! Только в этом случае они мне пока не помогают разобраться в проблеме. 
На строке DataModule2->ADOConnection1->Connected = true; вижу DataModule2->ADOConnection1 = :01084DC0

Vyacheslav, что скрывается за термином "отладчик", Code Guard? В опциях проекта поставила у Code Guard контролировать все ошибки. OldCreateOrder стоит false.
PM MAIL   Вверх
ama_kid
Дата 13.4.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Лена
Если честно, я не понимаю вот эту строку:
Код
DataModule2->ADOConnection1->Connected = true;

На кой она нужна? При выполнении Open коннект автоматом откроется, обычно это свойство используют для проверки, а устанавливать в ручную его не надо. Может у тебя там запросы не совсе верные? Или настройки соединения еще не выставлены, а ты уже пытаешься открыть БД... 


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Vyacheslav
Дата 13.4.2007, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

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



Компилите в debug режиме. Ставите в нужном место breakpoint как указал HappyLife. Давите F9 и далее  по шагам F8 (выполинить следующую строку) или F7 ( войти внутрь вызываемой фукции) в зависимости от обстоятельств. Так по шагам идете и конторлируете состояние переменных


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Лена
Дата 13.4.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

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



Вот весь код:
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{

   AnsiString Path = ExtractFilePath(Application->ExeName);
   Path = Path + "ADO.ini";
   if(FileExists(Path))
    {
     Ini = new TIniFile(Path);
     //DataModule2->ADOConnection1->Connected = false;
     DataModule2->ADOConnection1->ConnectionString = Ini->ReadString("ADO","ADOConnection","ADOConnection=Provider=MSDASQL.1;Persist Security Info=False;Data Source=Baza");
     DataModule2->ADOConnection1->Connected = true;

     sSkinManager1->SkinName = Ini->ReadString("AC","Skin","Office12Style");
     PageControl1->Enabled = true;
     //delete Ini; см.OnDestroy
    }
    else
        {
         sShowMessage("Нe удалось прочитать настройки соединения");
         PageControl1->Enabled = false;
         return;
        }
 

  try{


  DataModule2->ClientDataSetKey->Open();
  DataModule2->ClientDataSetKey->First();

  DataModule2->ClientDataSetDoors->Open();
  DataModule2->ClientDataSetDoors->First();

  DataModule2->ClientDataSetOrgan->Open();
  DataModule2->ClientDataSetOrgan->First();

  DataModule2->ClientDataSetVis->Open();
  DataModule2->ClientDataSetVis->First();

  DataModule2->ClientDataSetGrup->Open();
  DataModule2->ClientDataSetGrup->First();

  DataModule2->ClientDataSetRule->Open();
  DataModule2->ClientDataSetRule->First();

  DataModule2->ClientDataSetLog->Open();
  DataModule2->ClientDataSetLog->First();

  }
   catch(...)
       {
        sShowMessage("Нет соединения с сервером. ");
        PageControl1->Enabled = false;
       }

}


Исли идти по коду через точки останова начиная с первой строки, то CPU появиться на строке:  DataModule2->ClientDataSetKey->Open();

Если закомментировать DataModule2->ADOConnection1->Connected = true; CPU появиться опять на строке DataModule2->ClientDataSetKey->Open();

Если закомментировать весь блок: 
 
Код

 DataModule2->ClientDataSetKey->Open();
  DataModule2->ClientDataSetKey->First();

  DataModule2->ClientDataSetDoors->Open();
  DataModule2->ClientDataSetDoors->First();

  DataModule2->ClientDataSetOrgan->Open();
  DataModule2->ClientDataSetOrgan->First();

  DataModule2->ClientDataSetVis->Open();
  DataModule2->ClientDataSetVis->First();

  DataModule2->ClientDataSetGrup->Open();
  DataModule2->ClientDataSetGrup->First();

  DataModule2->ClientDataSetRule->Open();
  DataModule2->ClientDataSetRule->First();

  DataModule2->ClientDataSetLog->Open();
  DataModule2->ClientDataSetLog->First();


то CPU появиться на строке Application->Run(); главного файла.

Vyacheslav, сейчас попробую ваши рекомендации.



Это сообщение отредактировал(а) Лена - 13.4.2007, 12:28
PM MAIL   Вверх
ama_kid
Дата 13.4.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Лена
Хм, у тебя вот такая строка подключения? :
Цитата
"ADOConnection=Provider=MSDASQL.1;Persist Security Info=False;Data Source=Baza"

А если попробовать так?:
Цитата
"Provider=MSDASQL.1;Persist Security Info=False;Data Source=Baza"



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Лена
Дата 13.4.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

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



Тоже CPU выскакивает. Главное что мне не понятно, почему этот проект прекрасно работал и компилировался в локальной сети офиса где был сервер. Вот и exe файл созданный там, прекрасно запускается у меня. А вот откомпилировать на моей нынешнем удаленном компьютере не получается. Буду копать.  smile 


PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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