Вот код:
Код: Выделить всё
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 - ошибок может быть море ...