QtSql соединение

Я пытаюсь создать соединение с базой данных и вставить / удалить / сделать запросы к базе данных. Я относительно хорошо знаю SQL, но не могу обернуться вокруг него в Qt. Я привык программировать на Delphi.

Это мой код до сих пор:

QSqlDatabase db;
db.addDatabase("QSQLITE");
db.setHostName( "localhost" ); //I don't know if i should include this the database is in the same directory as my program
db.setDatabaseName( "Xmato.odb" );
db.setUserName( "" ); //There is no username
db.setPassword( "" ); //There is no password
db.open();
db.prepare("SELECT * FROM Members");
db.exec();

Я добавил это в мой файл .pro:

QT += sql;

Включенный QtSql в мой основной файл.

Когда я запускаю этот код, я получаю сообщение об ошибке:

QSqlQuery::prepare: database not open

Любые идеи будут мне высоко оценены.

П.С .: Я использую c ++ в Linux Ubuntu 12.04 и использую LibreOffice Base для создания своей базы данных.

0

Решение

После небольшого google-ing — внутренняя база данных openoffice libre использует HSQLDB (естественный выбор для Java). Вот небольшая дискуссия о HSQLDB.

Похоже, что некоторые версии базы openlibre также могут подключаться к внешние базы данных. Я бы порекомендовал установить что-то более доступное для C ++, в частности Qt.

Только несколько драйверов, таких как ODBC & SQLite включен по умолчанию.

Это означает, что в зависимости от используемой базы данных может потребоваться получить дополнительный исходный код (или пакеты) и скомпилировать плагин / dll / so. Библиотека загружается динамически (то есть во время выполнения) модулем QtSql. Я столкнулся с этим для MySQL драйверы.

Когда вы получите все эти настройки, ваш вызов addDatabase должен соответствовать типу базы данных, которую вы используете.

QSqlDatabase::addDatabase( "QODBC" );  // For something like MSSQL
QSqlDatabase::addDatabase( "QSQLITE" );  // For SQLite
QSqlDatabase::addDatabase( "QMYSQL" );  // For MySQL

Лично, если вы просто делаете это для удовольствия, быстрой и простой базой данных является SQLITE. Вы даже можете загрузить плагины / расширения для Mozilla Firefox, которые предложат вам графический интерфейс к базе данных.

2

Другие решения

Драйвер не загружен

вам нужен драйвер QSQLITE.

db.drivers () возвращает список всех доступных драйверов базы данных.

В Ubuntu 12.04 драйвер для sqlite находится в пакете с именем libqt4-SQL-SQLite.

Но это odb база данных sqlite ??

0

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName( "Xmato.odb" );
if (db.open())
{
QSqlQuery query(db); // if multiple connections used, without the `db` in constructor    will cause the query to use the default database (first opened and available one)
query.exec("select * from members");
}

должен сделать то же самое. имя пользователя и пароль не нужны, и так как это файл, вам просто нужно использовать setDatabaseName установить, какой файл вы хотите открыть.

0
По вопросам рекламы [email protected]