crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Создание простенького приложения для работы с БД, СУБД - SQL Server 2005 express
AD
  опции профиля:
сообщение 21.7.2008, 14:41
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Ну вообщем-то вопрос один: что-то дособирать надо для работы с SQL Server через ODBC? Сборку Qt делал ту, что была по-умолчанию. Напомню, что работаю с MS Visual Studio (в смысле, использую его компилятор - (вдруг различия будут в указании флажков каких-то))!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.7.2008, 14:54
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


просто плагин ODBC собирай
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 21.7.2008, 14:59
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 21.7.2008, 15:54) *

У мну в папочке plugins\sqldrivers есть два таких файла: qsqlodbc4.dll, qsqlodbc4.lib. Этого достаточно? Их надо подключить к моему приложению и все?

Сообщение отредактировал AD - 21.7.2008, 14:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.7.2008, 15:35
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


этого достаточно, подключать ничего специально не надо, только модуль SQL должен быть подключен.
Работу ODBC драйвера лучше всего проверить с помощью %QTDIR%\demos\sqlbrowser, в списке доступных драйверов должен быть QODBC
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 21.7.2008, 15:53
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 21.7.2008, 16:35) *
этого достаточно, подключать ничего специально не надо, только модуль SQL должен быть подключен.
Работу ODBC драйвера лучше всего проверить с помощью %QTDIR%\demos\sqlbrowser, в списке доступных драйверов должен быть QODBC

Спасибо! :)
Все просто зашибись :)
Вот результат работы этой демо-программки (выборка из моей таблички тестовой):
[attachment=141:sqlTable.JPG]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.7.2008, 16:01
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


если у тебя в программе будет только одно соединение с БД, то можно так сделать:
static bool dbconnect()
{

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("MY_ODBC_ALIAS");
    db.setUserName("user");
    db.setPassword("password");
    
    if (!db.open())
    {
        QString qerr = db.lastError().text();
        QMessageBox::critical(0,  QObject::tr("Ошибка базы данных"),
                                 QObject::tr("Невозможно установить соединение.\n\r")+qerr,
                                QMessageBox::Cancel);
        return 1;
    }
    return 0;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 21.7.2008, 16:09
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Я не понял, почему он только первую запись выводит!
Вот код:
/// Соединение с базой данных и проверка этого соединения
void TestDBAppl::connectClick()
{
    is_conn = (createConnection()) ? true : false;

    if(!is_conn)
    {
        QMessageBox msg(QMessageBox::Critical, "Connections", "Connection is not found", QMessageBox::Ok, this);
        msg.exec();
        return;
    }
    else
    {
        QSqlQuery query;
        if(query.exec("use MyDB"))
        {
            QMessageBox msg(QMessageBox::Information, "Connections", "Successfully", QMessageBox::Ok, this);
            msg.exec();
        }
        else
        {
            QMessageBox msg(QMessageBox::Information, "Connections", "Isn't this table", QMessageBox::Ok, this);
            msg.exec();
        }
    }
}

/// Обзор всех записей в таблице
void TestDBAppl::selectClick()
{
    QSqlQuery query;
    query.exec("select name from UserNames");

    int index = 0;
    while(query.next())
    {
        QString recordName = query.value(index).toString();
        listDBNames -> addItem(recordName);
        ++index;
    }
    update();
}


listDBNames - это QListWidget!

Вот как это выглядит:
[attachment=142:query_my.JPG]

Как видно на рисунке, что остальные строки пустые. Количество строк правильно отсчитывает, а вот содержание не выводит. В пред. постах показывал, какие имена д.б. Сможете помочь? Где ошибка?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.7.2008, 16:28
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


query.value(index)
index - это столбец таблицы, а строки перебираются с помощью query.next(), поставиь вместо index.фиксированый номер столбца, который тебя интерисует.
по сути ты сейчас идешь по диагонали таблицы
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.12.2024, 7:58