Общий вопрос - Qt поддерживает базы данных Paradox? Для этого надо использовать плагины и как к ним подключаться? Если есть статья какая-нибудь на эту тему, буду благодарен.
Только через ODBC.
/// Глобальные переменные
QSqlDatabase db;
/// Функция для создания соединения с базой данных
bool createConnection(QString odbc_name, QString db_name)
{
if(db.isOpen()) db.close();
db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(odbc_name);
db.setUserName("RTTT");
db.setPassword("PTUUUH");
if(!db.open())
{
QSqlError error = db.lastError();
QMessageBox msg(QMessageBox::Critical, "Соединения", error.text(), QMessageBox::Ok, 0);
msg.exec();
return false;
}
/// Подключение к базе данных DBKeyGB
QSqlQuery query;
QString sql_useDB = "use " + db_name;
if(!query.exec(sql_useDB))
{
/// Подключение к этой БД неуспешное
QSqlError error = query.lastError();
QMessageBox msg(QMessageBox::Critical, "Определение БД", error.text(), QMessageBox::Ok, 0);
msg.exec();
return false;
}
return true;
}
Все то же самое, главное правильно указать строку подключения db.setDatabaseName(ВОТ_ЭТУ); А строки подключения можно в инете глянуть. И, да, нужно установить драйвер парадокса для одбц.
Не так вопрос задал. Как мне qsqlodbc.lib подключить к проекту в статическом режиме?
Конечно нужен плугин QODBC, или его вкомпилирование в QtSql.
Вопрос, как в готовый статический Qt вкомпилировать его? У меня лежит этот lib в папке плагинов на данный момент. Можно ли это сделать не перекомпилируя все остальное в статической версии?
Блин, плагин odbc компиляется как и любой другой плагин Qt (sqlite, ibase, etc). Воспользуйся поиском по форуму.
Блин. Да искал я. Ответы только по динамической сборке.
Юра, я не первый день с Qt и SQL, но ответа на вопрос не видел, тем более, что с Paradox я сталкиваюсь впервые!
тут подумал. Раз при сборке собрались эти lib-файлы, если их просто подключить в проект, то, по идее, можно будет использовать. Так и попробую....
Ладно. Спасибо еще раз. Тему можно закрыть. Попробую описанный выше вариант.
Сделал следующую функцию подключения:
/// Глобальные переменные
QSqlDatabase db;
/// Функция для создания соединения с базой данных
bool createConnection(QString odbc_name)
{
if(db.isOpen()) db.close();
db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(odbc_name);
if(!db.open())
{
QSqlError error = db.lastError();
QMessageBox msg(QMessageBox::Critical, "Connections", error.text(), QMessageBox::Ok, 0);
msg.exec();
return false;
}
return true;
}
/// Вызов
bool is_conn = createConnection("azt"); /// noдключенue k БД
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\azt]
"Driver"="C:\\WINDOWS\\system32\\odbcjt32.dll"
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources]
"azt"="Microsoft Paradox Driver (*.db )"
http://connectionstrings.com/
Я действительно буду благодарен за помощь. Видимо, я чего-то недопонимаю. Но такие ответы в одну строку мне тяжело расшифровать. Итак. В plugins/sqldrivers у меня есть lib файл qodbc.lib, который я подключил к проекту. Создал указанную функцию соединения и сделал записи в реестр, что указал. Что именно означают строчки по данной ссылке? Я их попробовал записать в реестр. Не помогло!
db.setDatabaseName ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\myDb;Extended Properties=Paradox 5.x;");
c:\\myDb заменяешь на нужное тебе. В реестр ничего писать не нужно.
Если данная строка не подойдет, попробуй другие с того сайта.
Если не получится, выложи куда-нибудь свою базу, попробую к ней законнектиться.
Выложи куда-нибудь БД, я поковыряюсь.
А путь какой указываешь? Уверен, что одбц позволяет создавать базу?
Не забывай, что БД парадокс - не файл, а каталог. Может, в этом проблема?
Создал нужный каталог. Теперь пишет следующее имя ошибки: "Невозможно найти сетевой путь или имя пользователя"
Читай маны по парадоксу. А лучше достань утилитку для создание БД (с делфей когда-то распространялась такая) и создай с ее помощью БД, к которой потом будешь пробовать коннектиться.
Все. Проблему решил. Создавать ничего необязательно. Главное, как ты сказал, создать путь. Еще необходимо имя пользователя задавать и пароль. Как доделаю функцию соединения, выложу. Спасибо!
Вот функция соединения с БД:
/// Глобальные переменные
QSqlDatabase db;
/// Функция для создания соединения с базой данных
bool createConnection(const QString& odbc_path)
{
if(db.isOpen()) db.close();
db = QSqlDatabase::addDatabase("QODBC");
QString name(QString("DRIVER={Microsoft Paradox Driver (*.db )};FIL={Paradox 5.X};DBQ=") + odbc_path);
db.setDatabaseName(name);
db.setUserName("aztUser");
db.setPassword("aztUser");
if(!db.open())
{
QSqlError error = db.lastError();
QMessageBox msg(QMessageBox::Critical, "Connections", error.text(), QMessageBox::Ok, 0);
msg.exec();
return false;
}
return true;
}
/// valueElement, writeElement - чтение и запись при работе с реестром.
QString aztdb_path(valueElement("Azt/AztDbPath", QString("")).toString()), odbc_path("");
if(aztdb_path.isEmpty())
{
odbc_path = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(this,
QString("Selecting path for Paradox DB"), aztdb_path));
if(odbc_path.isEmpty()) exit(1);
}
else if(!aztdb_path.isEmpty()) odbc_path = aztdb_path;
else exit(1);
writeElement("Azt/AztDbPath", odbc_path);
bool is_conn = createConnection(odbc_path); /// noдключенue k БД
Пожалуйста.
/// Глобальные переменные
QSqlDatabase db;
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)