crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QT+freeTDS+MSSQL 2005
yTo4ko
  опции профиля:
сообщение 15.4.2009, 16:45
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 15.4.2009
Пользователь №: 683

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




Репутация:   0  


Здравствуйте. Начал изучать C++ и QT, чтобы написать кроссплатформенное приложение :) Всё было отлично, пока не решил вывести данные из таблицы БД в QTableView.
Вот код:
if (createConnection(&name, &db, &user, &pass))
{
        QSqlQueryModel *model = new QSqlQueryModel;
        model->setQuery("SELECT * FROM first");
        model->setHeaderData(0, Qt::Horizontal, tr("ID"));
        model->setHeaderData(1, Qt::Horizontal, tr("Name"));
        model->setHeaderData(2, Qt::Horizontal, tr("Salary"));
        this->ui->tableView->setModel(model);
        this->ui->tableView->show();
}


функция createConnection объявлена в connection.h
static bool createConnection(QString *host, QString *database, QString *user, QString *pass)
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setHostName(*host);
#if defined(Q_OS_LINUX)
    //Для Linux
    db.setDatabaseName("mssrv");
    //db.setDatabaseName("DRIVER={TDS};Server="+*host+";port=1433;Database="+*database+"");
#else
    //Для Windows
    db.setDatabaseName("DRIVER={SQL Native Client};Server=192.168.1.19;Database=test;Trusted_Connection=no");
#endif
    db.setUserName(*user);
    db.setPassword(*pass);

    if (!db.open()) {
        QSqlError error = db.lastError();
        QMessageBox::critical(0, "Ошибка о_О", "Проблема ..."+error.databaseText(), QMessageBox::Cancel);
        return false;
    }
    return true;
}

В Windows всё отлично работает, в QTableView выводятся все данные.
В Linux - выводится первый столбец - id (тип int), остальные 2 столбца делал и varchar, и nvarchar ... ничего не помогает - просто пустоту выводит :(
И сыпяться вот такие сообщения:
qGetStringData: Error while fetching data ( "[FreeTDS][SQL Server]Program type out of range" )

Если я всё правильно понимаю - проблема в unixODBC+FreeTDS ... Но вот как побороть :(
У кого какие предложения имеются?
Может кто просто поделится опытом работы на C++ в Linux с связке с MSSQL... Буду рад услышать любые советы по этому поводу:)
И ещё - я так понял как таковую UTF-8 кодировку MSSQL не поддерживает - это так?
PS если в коде что то не так (как вам кажется) - сообщите)) Я только пару дней назад начал более-менее писать на C++ и QT - ошибок может быть море ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.4.2009, 17:09
Сообщение #2


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

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

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




Репутация:   94  


глянь программу clienteODBC, она изначально задумана как кросплатформенный клиент для работы с Мелкосовтовской СУБД и насколько я знаю работает и под линём.

вот страничка документации

вот страничка посвещенная настройкам TDS Прикрепленный файл  odbc_linux_en.zip ( 2.25 килобайт ) Кол-во скачиваний: 288

(зазипованый html)

Цитата(yTo4ko @ 15.4.2009, 20:45) *
db.setDatabaseName("DRIVER={SQL Native Client};Server=192.168.1.19;Database=test;Trusted_Connection=no");
я вообще так не делал в виндовозе. Просто имя источника данных указываешь и всё
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
yTo4ko
  опции профиля:
сообщение 15.4.2009, 17:11
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 15.4.2009
Пользователь №: 683

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




Репутация:   0  


ммм ... ну имя источника указываешь - если источник создан :) верно? :) а я без создания источника подключаюсь ... но смысл не в этом ) коннект проходит отлично. Ща посмотрим эту прогу ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.4.2009, 17:21
Сообщение #4


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

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

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




Репутация:   94  


Цитата(yTo4ko @ 15.4.2009, 21:11) *
а я без создания источника подключаюсь
просто много раз всплывала проблема с ODBC, описывалась многократно на разных форумах.
И самый надёжный вариант, создать источник на локальной машине, а затем использовать его. В чём причина я не знаю, не вникал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
yTo4ko
  опции профиля:
сообщение 15.4.2009, 18:50
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 15.4.2009
Пользователь №: 683

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




Репутация:   0  


Litkevich Yuriy, за программу конечн спасибо, но точно такие же симптомы :( не показывает текстовые поля ... или FreeTDS или unixODBC ... но интересно другое - isql и tsql работают отлично ... неужто QODBC драйвер косячит? :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 15.4.2009, 19:17
Сообщение #6


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


А если попробовать поиграть с кодировкой получаемых от MSSQL данных?

Просто то, что ты описал мне напоминает ситуацию, когда UTF-8 данные записывают в поля предназныченные для windows-1251.

p.s. еще думаю полезно будет почитать и Advanced Configurations FreeTDS

И глянь логи MSSQL, там по идее должны быть какие-нибудь записи по этому поводу...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 15.4.2009, 21:04
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

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




Репутация:   0  


Кроссплатформенное программирование и ODBC это вещи трудно-совместимые.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Theli
  опции профиля:
сообщение 20.5.2009, 15:05
Сообщение #8


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 20.5.2009
Пользователь №: 762

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




Репутация:   0  


C M$SQL из Linux работаю через QTDS вместо QODBC. Работает на УРА ;)

для использования QTDS нужно иметь установленные пакеты FreeTDS и собрать QT c флагом -plugin-sql-tds -qt-sql-tds ...

QTDS в Windows работать не будет!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 19.4.2024, 20:08