Название: Проблема с QSqlDatabase::removeDatabase() в Release mode Отправлено: juggernaut от Июль 07, 2011, 08:24 Доброго времени суток.
Есть проблема с QSqlDatabase, и с QSQLITE если конкретнее. Платформа Windows XP, Visual Studio 2008, Qt 4.7.x. Я пишу класс обёртку для БД. Если в кратце, то выглядит всё примерно так Код: public class MySqlDB В Debug mode программа работает нормально, а в Release mode падает на строчке QSqlDatabase::removeDatabase(CONNECTION_NAME) жалуясь на heap corruption. то есть все действия с БД локализованы в трёх описанных функциях, в остальных функциях никаких вызовов БД не делается. Перековырял уже весь гугль, ничего приличного так и не нашёл ((((( Если нужно больше инфы - спрашивайте, предоставлю. Заранее спасибо. Название: Re: Проблема с QSqlDatabase::removeDatabase() в Release mode Отправлено: LisandreL от Июль 07, 2011, 09:16 Точную жалобу покажите, пожалуйста.
Название: Re: Проблема с QSqlDatabase::removeDatabase() в Release mode Отправлено: Пантер от Июль 07, 2011, 09:17 Вроде, все в норме. Вполне может из-за чего-то другого падать.
ПыСы: Код Замени на Код А то очень некрасиво. :) Название: Re: Проблема с QSqlDatabase::removeDatabase() в Release mode Отправлено: juggernaut от Июль 07, 2011, 09:27 кода под рукой нет, чуть позже будет, поэтому сейчас точную жалобу кинуть не могу, помню что в free.c вылатает, раздел там про WINHEAP что то
а может быть потому, что экземпляр моего класса MyClass, в котором я вызываю мои БД: void MyClass::func() { ..... MySqlDB db(file); db.createConnection(); db.f1(); db.close(); ..... } создаётся вот так: MyClass* myClass = new MyClass(); myclass->func(); ?? Название: Re: Проблема с QSqlDatabase::removeDatabase() в Release mode Отправлено: LisandreL от Июль 07, 2011, 09:29 А то очень некрасиво Ещё очень не нравится, что запрос принимается строкой, в итоге параметры, как всегда, будут в строку вставляться простым сложением без всякой фильтрации. *это такой Ванга mode*Название: Re: Проблема с QSqlDatabase::removeDatabase() в Release mode Отправлено: juggernaut от Июль 07, 2011, 09:31 не, всё строки для запросов формируются в других функциях, которые будут вызывать эту, с помощью QString::arg()
Название: Re: Проблема с QSqlDatabase::removeDatabase() в Release mode Отправлено: juggernaut от Июль 07, 2011, 09:32 собственно это мелочи, в Debug всё работает как надо ....
Название: Re: Проблема с QSqlDatabase::removeDatabase() в Release mode Отправлено: Пантер от Июль 07, 2011, 09:33 Давай, наверное, больше кода и точную ошибку + бэктрейс, а то гадать долго будем.
Название: Re: Проблема с QSqlDatabase::removeDatabase() в Release mode Отправлено: juggernaut от Июль 07, 2011, 09:35 окей
Название: Re: Проблема с QSqlDatabase::removeDatabase() в Release mode Отправлено: LisandreL от Июль 07, 2011, 09:47 не, всё строки для запросов формируются в других функциях, которые будут вызывать эту, с помощью QString::arg() QString::arg() ничего не знает про Sql и соответственно не фильтрует параметры ( не экранирует символы и т.п.): http://xkcd.ru/327/собственно это мелочи, в Debug всё работает как надо... Когда допишете программу отдавать тоже дебажный исполняемый файл будете?Название: Re: Проблема с QSqlDatabase::removeDatabase() в Release mode Отправлено: juggernaut от Июль 07, 2011, 09:51 конечно нет, релизный, в том то и проблема
просто все запросы правильные, я сто раз их перепроверил, просмотрел в ручную полученные таблицы в начале глюки конечно были, но прога тогда падала в других местах .... точнее она не падала, а выдывала ворнинги при не отработке запросов и прочее ладно, я выложу полную версию жалобу на heap corruption, тогда посмотрим Название: Re: Проблема с QSqlDatabase::removeDatabase() в Release mode Отправлено: juggernaut от Июль 07, 2011, 13:00 Всё оказалось намного проще ... только не бейте больно по голове
когда я через стандартную менюшку добавил в проект модуль QtSql, то он линковщику в и Debug и в Release прописал дебажные либы, сейчас поставил нормальные либы - всё заработало но зато хоть в QtSql разобрался более чем исчерпывающе )))) |