crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> FreeTDS + MSSQL, Запрос активен, но нет результата
Pirus
  опции профиля:
сообщение 9.1.2013, 11:45
Сообщение #1


Новичок


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

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




Репутация:   0  


Исходники клиентской программы на Qt.
Задача: Найти "бесплатный" способ работы с MSSQL из под Linux.
Нашел FreeTDS (QTDS) и unixODBC + FreeTDS (QODBC), выбрал вариант работы напрямую через QTDS plugin.

Qt: 4.8.4

Клиентская ОС:
Distributor ID: SUSE LINUX
Description: openSUSE 11.1 (i586)

FreeTDS: 0.91
./configure --prefix=/usr/local/freeTDS --enable-msdblib --with-tdsver=8.0
make install

QTDS plugin:
cd %QTDIR%/src/plugins/sqldrivers/tds
qmake -o Makefile "INCLUDEPATH=/usr/local/freeTDS/include" "LIBS=-L/usr/local/freeTDS/lib -lsybdb"
make install

Данные MSSQL сервера:
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Copyright © Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)

freetds.conf
Раскрывающийся текст

[global]
# TDS protocol version
; tds version = 4.2

# Whether to write a TDSDUMP file for diagnostic purposes
# (setting this to /tmp is insecure on a multi-user system)
; dump file = /tmp/freetds.log
; debug flags = 0xffff

# Command and connection timeouts
; timeout = 10
; connect timeout = 10

# If you get out-of-memory errors, it may mean that your client
# is trying to allocate a huge buffer for a TEXT field.
# Try setting 'text size' to a more reasonable limit
text size = 64512

[mycar1]
host = mycar1
port = 51451
tds version = 8.0


Код тестового проекта
Раскрывающийся текст

#include <QtSql>
#include <QtCore/QCoreApplication>
#include <QTextCodec>
int main(int argc, char* argv[])
{
  QCoreApplication a(argc, argv);
  QSqlDatabase db = QSqlDatabase::addDatabase("QTDS");
  db.setDatabaseName("master");
  db.setHostName("MYCAR1");
  db.setUserName("admin");
  db.setPassword("");
  if (!db.open())
  {
    qDebug() << db.lastError().text();
    return 1;
  }

  QString queryS = "declare @i int set @i=123 select @i";
  //QString queryS = "select 123";

  qDebug() << queryS;
  QSqlQuery query;
  query.exec(queryS);
  //QTextCodec* codec1251 = QTextCodec::codecForName("CP1251");
  if (query.isActive())
  {
    qDebug() << "Active";
    if (query.next())
    {
        //QString res = codec1251->toUnicode(query.value(0).toByteArray());
        //qDebug() << res;
        qDebug() << query.value(0).toString();
    }
    else qDebug() << "No result";
  }
  else
  {
    qDebug() << query.lastError().text();
  }
  return 0;
}



По шагам:
1) Собрал Qt - Opensource, shared libs.
2) Установил FreeTDS
3) Собрал QTDS плагин
4) Правил freetds.conf
5) export LD_LIBRARY_PATH=/usr/local/freeTDS/lib дабы плагин видел где искать библиотеку freetds
6) Запустил тестовый проект с запросом "select 123", результат "123" (отлично!)
7) Запустил тестовый проект с запросом "declare @i int set @i=123 select @i", результат "No result" (функция isActive() возвращает true, функция next() возвращает false - нет данных)

Не понимаю в чем дело =(

Пробовал выполнять запросы через tsql - все отлично.
Пробовал играть с кодировкой в и тестовом проекте (QTextCodec) и в настройках freetds.conf (client charset)
Смотрел приходящие на sql сервер запросы с помощью профайлера - все хорошо, в каком виде отправляю в том же и приходят.

Думаю беда где-то в плагинах.

Так же наивно пробовал работать через QODBC плагин (unixODBC + freeTDS) беда та же - запрос активный, данных нет.
isql аналогично tsql выполняет запросы и возвращает данные на ура.

Вопрос - почему нет данных?
Есть какие-то идеи по этому вопросу?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Delisov_*
сообщение 10.7.2014, 20:31
Сообщение #2





Гости








    


Смотрю, тема в интернете не очень популярная. Кому-нибудь да помогу. У меня работает db.setDatabaseName("DRIVER=/usr/local/lib/libtdsodbc.so;URL={ServerName=xxxxx;PortNumber=xxxx;DatabaseName=xxxxx;}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.3.2024, 12:41