Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Paradox и Qt
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
AD
Общий вопрос - Qt поддерживает базы данных Paradox? Для этого надо использовать плагины и как к ним подключаться? Если есть статья какая-нибудь на эту тему, буду благодарен.
panter_dsd
Только через ODBC.
AD
Цитата(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
Все то же самое, главное правильно указать строку подключения db.setDatabaseName(ВОТ_ЭТУ); А строки подключения можно в инете глянуть. И, да, нужно установить драйвер парадокса для одбц.
AD
Не так вопрос задал. Как мне qsqlodbc.lib подключить к проекту в статическом режиме?
panter_dsd
Конечно нужен плугин QODBC, или его вкомпилирование в QtSql.
AD
Вопрос, как в готовый статический Qt вкомпилировать его? У меня лежит этот lib в папке плагинов на данный момент. Можно ли это сделать не перекомпилируя все остальное в статической версии?
panter_dsd
Блин, плагин odbc компиляется как и любой другой плагин Qt (sqlite, ibase, etc). Воспользуйся поиском по форуму.
Litkevich Yuriy
Цитата(AD @ 17.11.2010, 19:40) *
Не так вопрос задал. Как мне qsqlodbc.lib подключить к проекту в статическом режиме?
это уже совсем другой вопрос.

П.С. ты с Qt и SQL вроде не первый день.
AD
Блин. Да искал я. Ответы только по динамической сборке.

Юра, я не первый день с Qt и SQL, но ответа на вопрос не видел, тем более, что с Paradox я сталкиваюсь впервые!

тут подумал. Раз при сборке собрались эти lib-файлы, если их просто подключить в проект, то, по идее, можно будет использовать. Так и попробую....

Ладно. Спасибо еще раз. Тему можно закрыть. Попробую описанный выше вариант.
Litkevich Yuriy
Цитата(AD @ 18.11.2010, 2:07) *
что с Paradox я сталкиваюсь впервые!
про парадокс уже сказали - через ODBC.
AD
Сделал следующую функцию подключения:
/// Глобальные переменные
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
connectionstrings
AD
Цитата(panter_dsd @ 22.11.2010, 18:01) *

А что это за строчки? Это в программу надо вставить или в реестр?
AD
Я действительно буду благодарен за помощь. Видимо, я чего-то недопонимаю. Но такие ответы в одну строку мне тяжело расшифровать. Итак. В plugins/sqldrivers у меня есть lib файл qodbc.lib, который я подключил к проекту. Создал указанную функцию соединения и сделал записи в реестр, что указал. Что именно означают строчки по данной ссылке? Я их попробовал записать в реестр. Не помогло!
panter_dsd
db.setDatabaseName ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\myDb;Extended Properties=Paradox 5.x;");
c:\\myDb заменяешь на нужное тебе. В реестр ничего писать не нужно.
Если данная строка не подойдет, попробуй другие с того сайта.
Если не получится, выложи куда-нибудь свою базу, попробую к ней законнектиться.
AD
Цитата(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
Выложи куда-нибудь БД, я поковыряюсь.
AD
Цитата(panter_dsd @ 23.11.2010, 11:17) *
Выложи куда-нибудь БД, я поковыряюсь.

Дело в том, что ее нет пока. Она будет программой создаваться. Нет ни одной таблички пока что.
panter_dsd
А путь какой указываешь? Уверен, что одбц позволяет создавать базу?
AD
Цитата(panter_dsd @ 23.11.2010, 11:23) *
А путь какой указываешь? Уверен, что одбц позволяет создавать базу?

Надо почитать. На счет этого уточню. Пока не знаю, что ответить.
panter_dsd
Не забывай, что БД парадокс - не файл, а каталог. Может, в этом проблема?
AD
Создал нужный каталог. Теперь пишет следующее имя ошибки: "Невозможно найти сетевой путь или имя пользователя"
panter_dsd
Читай маны по парадоксу. А лучше достань утилитку для создание БД (с делфей когда-то распространялась такая) и создай с ее помощью БД, к которой потом будешь пробовать коннектиться.
AD
Все. Проблему решил. Создавать ничего необязательно. Главное, как ты сказал, создать путь. Еще необходимо имя пользователя задавать и пароль. Как доделаю функцию соединения, выложу. Спасибо!
AD
Вот функция соединения с БД:
/// Глобальные переменные
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
Пожалуйста. B)
BRE
Цитата(AD @ 23.11.2010, 14:00) *
/// Глобальные переменные
QSqlDatabase db;

Не нужно объявлять переменную QSqlDatabase, тем более глобально.
Ты всегда сможешь получить этот объект используя QSqlDatabase::database(...)
Обсуждали же уже не обднократно. ;)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.