Я новичок в Qt, поэтому мой вопрос может быть немного базовым.
Я намерен работать с базой данных ODBC, расположенной на моем жестком диске. Я пытался открыть его с помощью этого кода:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("");
db.setDatabaseName("c:\\database.mdb");
bool ok = db.open();
QSqlQuery query;
query.exec("SELECT name FROM results WHERE tag>10");
while (query.next()) {
QString name1 = query.value(0).toString();
qDebug() << name1;
}
Теперь проблема в том, что программа не может найти базу данных, что приводит к сбою в строке db.open (). Я подозреваю, что Qt не может открыть базу данных напрямую, но вместо этого имеет дело с сервером SQL. Это так? Если это так, я был бы признателен, если бы вы могли дать мне несколько подсказок о том, как идти дальше, особенно в отношении имени хоста (это localhost?).
Кроме того, я не уверен, должен ли путь к файлу быть включен в DatabaseName.
PS: у меня нет проблем с переходом на другой тип базы данных / сервера, например MySQL. Так что если ваше решение требует этого, я был бы счастлив с этим!
заранее спасибо
D
Если вам не нужна база данных формата Jet / MS Access для чего-то другого, вам будет лучше пойти с SQLite. Qt имеет встроенную поддержку SQLite (драйвер QSQLITE) — вы просто указываете на файл базы данных и начинаете. Нет необходимости настраивать источники данных ODBC или что-либо еще.
Согласно документация, Вы должны установить setDatabaseName в источник данных ODBC. Затем вы настраиваете источник данных ODBC так, чтобы он указывал на соответствующий файл.
Для дальнейшего использования:
Как и сказал Верн Стридом, аргумент setDatabaseName — это не имя файла базы данных, а имя источника данных ODBC, который указывает на вашу базу данных. Поэтому вам нужно создать ODBC, который указывает на вашу базу данных.
Обычный способ сделать это (в Windows) будет пойти в Панель управления \ Система & безопасность \ Административные инструменты \ Источники данных (ODBC). Но если вы работаете на 64-битной машине и хотите работать с 32-битным драйвером, перейдите вместо этого в C: \ windows \ SysWOW64 и запустите odbcad32.exe
Когда вы сделаете это, откроется диалоговое окно (одно и то же диалоговое окно независимо от 64/32-бит). Здесь вы создаете свой ODBC, даете ему имя и связываете его с вашей реальной базой данных. В моем случае, когда я работаю с локальной базой данных, я использовал вкладку «User DNS».
Затем, вернувшись в Qt, вы помещаете это имя ODBC в качестве аргумента для setDatabaseName. И это работает! (Или это для меня …)
Новый фрагмент кода выглядит так:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("localhost");
db.setDatabaseName("MyDataSource");
bool ok = db.open();
QSqlQuery query;
query.exec("SELECT name FROM results WHERE tag>10");
while (query.next()) {
QString name1 = query.value(0).toString();
qDebug() << name1;
}
где «MyDataSource» — это имя, которое я дал ODCB.