Некорректное закрытие QSqlDatabase, при использовании QSqlTableModel |
Здравствуйте, гость ( Вход | Регистрация )
Некорректное закрытие QSqlDatabase, при использовании QSqlTableModel |
Гость_silver_* |
4.8.2008, 18:27
Сообщение
#1
|
Гости |
Здравствуйте!
Использую в простеньком приложении QSqlTableModel для отображения и редактирования таблицы. При закрытии программы выдаёт предупреждение
Пробовал в деструкторе окна, где используется модель, делать вещи вроде
не помогает Оно, вроде бы, и нестрашно, но как-то неправильно. Кто-нибудь сталкивался с таким? |
|
|
Litkevich Yuriy |
6.8.2008, 12:58
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Что делать? если тебе надо использовать уже созданое тобой соединение то используй так: QSqlDatabase app_db = QSqlDatabase::database(); Перевод из SVN-хранилища: Цитата Подробное описание Класс QSqlDatabase предоставляет подключение к базе данных. Класс QSqlDatabase предоставляет абстрактный интерфейс для доступа к базе данных. Он использует конкретный QSqlDriver базы данных для доступа и манипуляции данными. В следующем коде показано как установить соединение:
После создания объекта QSqlDatabase, устанавливаем параметры соединения с помощью setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort(), и setConnectOptions(). Только после установки параметров вызывается open() для открытия соединения. Соединение определеное выше — безымянное соединение. Это соединение по умолчанию и доступ к нему может быть получен позже используя database():
Чтобы сделать програмирование более удобным, QSqlDatabase реализован как класс-значение (англ. "value class"). Любые изменения сделаные в соединении с базой данных через один объект QSqlDatabase будут влиять на другие объекты QSqlDatabase представляющие это же соединение. Вызовите cloneDatabase(), если вы хотите создать независимое соединение с базой данных на основе существующего. Если вы нуждаетесь во множестве соединений с базами данных одновременно, определите произвольное имя в addDatabase() и database(). Вызовите removeDatabase(), чтобы удалить соединение. QSqlDatabase выведет предупреждение, если вы попытаетесь удалить соединение, указанное в других объектах QSqlDatabase. Используйте contains(), чтобы видеть если заданное имя соединения есть в списке соединений. Как только соединение установлено вы можете посмотреть, какие таблицы база данных предоставляет с помощью tables(), найти первичный индекс для таблицы с помощью primaryIndex(), получить мета-информацию о полях таблицы (например, их имена) с помощью record() и выполнить запрос с помощью exec(). Если транзакции поддерживаются, вы можете использовать transaction(),чтобы начать транзакцию, и затем commit() или rollback(), чтобы завершить ее. Вы можете узнать поддерживается ли транзакция используя QSqlDriver::hasFeature(). При использовании транзакции вы должны начать транзакцию, прежде чем создадите свой запрос. Если произошла ошибка, она может быть получена с помощью lastError(). Имена SQL драйверов доступны из drivers(), вы можете проверить доступность драйвера с помощью isDriverAvailable(). Если вы создали свой собственный драйвер, вы можете зарегистрировать его с помощью registerSqlDriver(). Смотрите также QSqlDriver, QSqlQuery, Модуль QtSql и Потоки и Модуль QtSql. Цитата QSqlDatabase QSqlDatabase::addDatabase ( const QString & type, const QString & connectionName = QLatin1String( defaultConnection ) ) [static] Добавляет базу данных в список соединений баз данных используя драйвер type и имя соединения connectionName. Если уже существует соединение с базой данных называющееся connectionName, этосоединение удаляется. Соединения с базой данных в дальнейшем именуется connectionName. Вновь добавленое соединение будет возвращено. Если параметр connectionName не определен, внови добавленное соединение становится для приложения соединением поумолчанию, и последующие вызовы database() без параметра вернут ссылку на него. Если connectionName задан, используйте database(connectionName), чтобы вернуть указатель на соединение. Предупреждение: Если вы добавите базу данных с тем же именем как и у существующей базы данных, старая база данных будет заменена новой. Это происходит автоматически, если вы вызываете эту функцию больше, чем один раз без указания connectionName. Чтобы использовать соединение, вам нужно настроить его, например, вызвав некоторые или все из фунций setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort(), и setConnectOptions(), а затем вам нужно открыть соединение с помощью open(). Замечание: Эта функция потокобезопасная. Смотрите также database(), removeDatabase(), и Драйвера баз данных SQL. acen83, silver, почитайте вот эту тему Базы данных |
|
|
Текстовая версия | Сейчас: 15.1.2025, 1:47 |