Название: Как подключить базку? Отправлено: KBAC от Декабрь 08, 2011, 22:15 Во-первых, не понятно почему в разных примерах зачастую пишут такой код
Код: QSqlDatabase *db = QSqlDatabase::addDatabase("QODBC"); Код: QSqlDatabase *db = new QSqlDatabase; Код: bool Connect() { Название: Re: Как подключить базку? Отправлено: Пантер от Декабрь 08, 2011, 22:19 В pro файле QT += sql
Название: Re: Как подключить базку? Отправлено: BuRn от Декабрь 08, 2011, 23:22 delete db; //сделай если база не открылась
Название: Re: Как подключить базку? Отправлено: KBAC от Декабрь 09, 2011, 09:33 Спасибо, помогло. А еще, зачем создавать экземпляр QSqlDatabase, если он локальный и остается в пределах функции?
Название: Re: Как подключить базку? Отправлено: Пантер от Декабрь 09, 2011, 09:35 Спасибо, помогло. А еще, зачем создавать экземпляр QSqlDatabase, если он локальный и остается в пределах функции? Не нужно создавать.QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); Название: Re: Как подключить базку? Отправлено: KBAC от Декабрь 09, 2011, 09:55 Пантер, ты ведь сделал то же самое, на мой взгляд. У тебя db тоже пропадет когда выйдем из функции, если конечно не возвращать его. Можно по-подробнее ,пжлст.
Название: Re: Как подключить базку? Отправлено: Пантер от Декабрь 09, 2011, 10:00 Сравни:
QSqlDatabase *db = QSqlDatabase::addDatabase("QODBC"); QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); QSqlDatabase - синглтон и добавленное соединение не исчезает пока ты его не удалишь вручную. Название: Re: Как подключить базку? Отправлено: joker от Декабрь 09, 2011, 10:02 Внимательнее посмотри как устроен QDatabase.
Если вкратце - то что то вроде синглетона - при addDatabase соединение (назовем это так) создается, но при удалении обьекта (который получен по addDatabase) - соединение не рвется. И в дальнейшем в любом месте ты можешь получить эту базу по QDatabase::database(); Тоесть не надо хранить указатель на базу изадаваться вопросами передачи его в функции и методы, а получать его по необходимости. Насчет написания - имхо раздельно хуже. Вначале ты делаешь пустой обьект, потом привязываешь его к драйверам. В другом же случае - ты сразу создаешь инициализированный объект. (хотя тут стоит посмотреть исходники, может и однофигственно ;) ) Название: Re: Как подключить базку? Отправлено: KBAC от Декабрь 09, 2011, 10:17 Тогда получается, что переменная db только для удобства написания, т.е. для сокращения количества кода. Можно ведь так писать
Код: QSqlDatabase::addDatabase("QODBC"); Название: Re: Как подключить базку? Отправлено: Пантер от Декабрь 09, 2011, 10:19 Да. Плюс не нужно постоянно дергать метод database ().
Название: Re: Как подключить базку? Отправлено: LisandreL от Декабрь 09, 2011, 12:16 Т.е. вместо db очень много значков, но у нас освобождается чуть-чуть памяти. На вызов функции память тоже нужна. Состояние регистров запомнить, значение параметра передать (хоть он тут и дефолтный).Ну и такты на это тратятся. Но скорее всего что память, что такты тут - экономия на спичках. Название: Re: Как подключить базку? Отправлено: KBAC от Декабрь 09, 2011, 13:40 Да, что-то не подумал про вызов database(). Использовать db все-таки, по-моему лучше будет.
Раз заговорили о затратах, меня уже долго волнует вопрос: На сколько затратно хранить ссылку? Как я понимаю: ссылка - это второй идентификатор для какой-то адресной ячейки, и память должна тратиться лишь на хранение идентификатора. Если ссылка типа инт, тогда на ее хранение не надо 4 байта а намного меньше. Если так, то можно было бы ссылку создать на database(); и все будет еще шоколаднее. Название: Re: Как подключить базку? Отправлено: KBAC от Декабрь 10, 2011, 20:27 При подключении в setUser и setPassword надо писать данные для windows идентификации? подключение к SQL Server. И как поглядеть почему не подключается? Шаг с заходом почему-то не работает для QSqlDatabase::open().
Название: Re: Как подключить базку? Отправлено: Пантер от Декабрь 12, 2011, 07:40 db.lastError ().text () покажет тебе ошибку.
Логин и пароль нужно указывать к SQL Server. |