Полная версия этой страницы:
Paradox и Qt
Общий вопрос - Qt поддерживает базы данных Paradox? Для этого надо использовать плагины и как к ним подключаться? Если есть статья какая-нибудь на эту тему, буду благодарен.
panter_dsd
17.11.2010, 17:06
Только через ODBC.
Цитата(panter_dsd @ 17.11.2010, 17:06)
Только через ODBC.
Как использовать? Ну в смысле что надо написать, чтобы начать использовать? Ну к примеру для работы с SQLServer есть что-то подобное:
/// Глобальные переменные
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;
}
Ну а еще учитывать папку с плагинами и помещать в нужное место.
А с Paradox как? Какой-то плагин нужен к нему или нет?
panter_dsd
17.11.2010, 17:28
Все то же самое, главное правильно указать строку подключения db.setDatabaseName(ВОТ_ЭТУ); А строки подключения можно в инете глянуть. И, да, нужно установить драйвер парадокса для одбц.
Не так вопрос задал. Как мне qsqlodbc.lib подключить к проекту в статическом режиме?
panter_dsd
17.11.2010, 17:41
Конечно нужен плугин QODBC, или его вкомпилирование в QtSql.
Вопрос, как в готовый статический Qt вкомпилировать его? У меня лежит этот lib в папке плагинов на данный момент. Можно ли это сделать не перекомпилируя все остальное в статической версии?
panter_dsd
17.11.2010, 19:55
Блин, плагин odbc компиляется как и любой другой плагин Qt (sqlite, ibase, etc). Воспользуйся поиском по форуму.
Litkevich Yuriy
17.11.2010, 22:04
Цитата(AD @ 17.11.2010, 19:40)
Не так вопрос задал. Как мне qsqlodbc.lib подключить к проекту в статическом режиме?
это уже совсем другой вопрос.
П.С. ты с Qt и SQL вроде не первый день.
Блин. Да искал я. Ответы только по динамической сборке.
Юра, я не первый день с Qt и SQL, но ответа на вопрос не видел, тем более, что с Paradox я сталкиваюсь впервые!
тут подумал. Раз при сборке собрались эти lib-файлы, если их просто подключить в проект, то, по идее, можно будет использовать. Так и попробую....
Ладно. Спасибо еще раз. Тему можно закрыть. Попробую описанный выше вариант.
Litkevich Yuriy
18.11.2010, 2:38
Цитата(AD @ 18.11.2010, 2:07)
что с Paradox я сталкиваюсь впервые!
про парадокс уже сказали - через ODBC.
Сделал следующую функцию подключения:
/// Глобальные переменные
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 БД
И есть два файлика reg, которые я заношу в реестр. Вот они:
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 )"
Мне выдается сообщение "Unable to connect QODBC3". Как исправить ошибку?
panter_dsd
22.11.2010, 18:01
Цитата(panter_dsd @ 22.11.2010, 18:01)
А что это за строчки? Это в программу надо вставить или в реестр?
Я действительно буду благодарен за помощь. Видимо, я чего-то недопонимаю. Но такие ответы в одну строку мне тяжело расшифровать. Итак. В plugins/sqldrivers у меня есть lib файл qodbc.lib, который я подключил к проекту. Создал указанную функцию соединения и сделал записи в реестр, что указал. Что именно означают строчки по данной ссылке? Я их попробовал записать в реестр. Не помогло!
panter_dsd
23.11.2010, 0:24
db.setDatabaseName ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\myDb;Extended Properties=Paradox 5.x;");
c:\\myDb заменяешь на нужное тебе. В реестр ничего писать не нужно.
Если данная строка не подойдет, попробуй другие с того сайта.
Если не получится, выложи куда-нибудь свою базу, попробую к ней законнектиться.
Цитата(panter_dsd @ 23.11.2010, 0:24)
db.setDatabaseName ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\myDb;Extended Properties=Paradox 5.x;");
c:\\myDb заменяешь на нужное тебе. В реестр ничего писать не нужно.
Если данная строка не подойдет, попробуй другие с того сайта.
Если не получится, выложи куда-нибудь свою базу, попробую к ней законнектиться.
Хм.... Через программу не удалось, он мне пишет, что слишком длинное имя БД. А вообще, это настройки ODBC, которые и помещаются в реестр.
panter_dsd
23.11.2010, 11:17
Выложи куда-нибудь БД, я поковыряюсь.
Цитата(panter_dsd @ 23.11.2010, 11:17)
Выложи куда-нибудь БД, я поковыряюсь.
Дело в том, что ее нет пока. Она будет программой создаваться. Нет ни одной таблички пока что.
panter_dsd
23.11.2010, 11:23
А путь какой указываешь? Уверен, что одбц позволяет создавать базу?
Цитата(panter_dsd @ 23.11.2010, 11:23)
А путь какой указываешь? Уверен, что одбц позволяет создавать базу?
Надо почитать. На счет этого уточню. Пока не знаю, что ответить.
panter_dsd
23.11.2010, 11:27
Не забывай, что БД парадокс - не файл, а каталог. Может, в этом проблема?
Создал нужный каталог. Теперь пишет следующее имя ошибки: "Невозможно найти сетевой путь или имя пользователя"
panter_dsd
23.11.2010, 12:29
Читай маны по парадоксу. А лучше достань утилитку для создание БД (с делфей когда-то распространялась такая) и создай с ее помощью БД, к которой потом будешь пробовать коннектиться.
Все. Проблему решил. Создавать ничего необязательно. Главное, как ты сказал, создать путь. Еще необходимо имя пользователя задавать и пароль. Как доделаю функцию соединения, выложу. Спасибо!
Вот функция соединения с БД:
/// Глобальные переменные
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 БД
panter_dsd
23.11.2010, 14:02
Пожалуйста.
Цитата(AD @ 23.11.2010, 14:00)
/// Глобальные переменные
QSqlDatabase db;
Не нужно объявлять переменную QSqlDatabase, тем более глобально.
Ты всегда сможешь получить этот объект используя QSqlDatabase::database(...)
Обсуждали же уже не обднократно.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.