Название: Подключить существующую БД к внешнему виджету Отправлено: Urvin от Февраль 01, 2010, 20:11 Ситуация такая: в главной форме создается и используется объект базы данных:
Код Объекты запросов типа Код Нормально создаются и исполняются. Теперь я хочу сделать собственный виджет, где бы использовалась уже подключенная БД. Объект запросов QSqlQuery должен быть общим, чтобы постоянно память не гонять. Соответственно, в описании класса имеем Код Для передачи указателя на подключенную БД в новом виджете я создал следующую функцию: Код Эта функция вызывается из кода главной формы в конструкторе, но после создания пользовательского интерфейса (экземпляр пользовательского виджета добавлен в *.ui): Код
При попытке использовать query в пользовательском виджете я получаю "QSqlQuery::exec: database not open" в debug-окошке. Что я упустил? Ведь код выглядит вполне стандартно.. Название: Re: Подключить существующую БД к внешнему виджету Отправлено: ecspertiza от Февраль 01, 2010, 20:48 Попробуй в своем виджете не создавать QSqlDatabase* database; А просто где нибудь в майн.цпп создай подключение к БД, а в своем виджете просто в QSqlQuery выполняй запрос.
Да и кстати таким образом void wgtManager::prepareDatabase(QSqlDatabase* db) ты не передаешь объект по ссылке ,а копируешь его, если я не ошибаюсь, соответственно и получается в новом виджете новый QSqlDatabase который неподключен к БД :) Название: Re: Подключить существующую БД к внешнему виджету Отправлено: Urvin от Февраль 01, 2010, 21:04 майнцпп... понимаю, что правильнее.. но QSqlQuery все равно придется подключать, боюсь, будут те же грабли. не?
В prepareDatabase передаю указатель на вполне себе существующий объект managerDatabase.. По всем канонам, должно было проканать :) Название: Re: Подключить существующую БД к внешнему виджету Отправлено: ecspertiza от Февраль 01, 2010, 22:02 если в майн.цпп создашь подключение к БД то потом в любом месте программы использовать QSqlQuery можешь так
Код: QSqlQuery query; Название: Re: Подключить существующую БД к внешнему виджету Отправлено: BRE от Февраль 01, 2010, 22:21 Нет необходимости вообще хранить какую либо ссылку на QSqlDatabase.
После вызова метода QSqlDatabase::addDatabase соединение помещается во внутренний кеш и может быть получено в любой момент через статический метод QSqlDatabase::database(). Создание рабочего экземпляра QSqlQuery возможно только после открытия базы данных. Название: Re: Подключить существующую БД к внешнему виджету Отправлено: CroCIV от Февраль 03, 2010, 14:11 Нет необходимости вообще хранить какую либо ссылку на QSqlDatabase. После вызова метода QSqlDatabase::addDatabase соединение помещается во внутренний кеш и может быть получено в любой момент через статический метод QSqlDatabase::database(). Хо! А я индусский код пишу )))) Название: Re: Подключить существующую БД к внешнему виджету Отправлено: foxexe от Февраль 04, 2010, 11:08 но такие QSqlQuery у вас всё-таки не общий)
я думаю можно было бы просто запрос передать по ссылке и не мотаться с бд, если вы уж так хотите. а по поводу бд во внутреннем кеше это правда , после addDatabase() можно создавать qSqlQuery просто вот так Код ну если у вас только одна БД канеш |