QT+freeTDS+unixODBC+MSSQL2005 |
Здравствуйте, гость ( Вход | Регистрация )
QT+freeTDS+unixODBC+MSSQL2005 |
Гость_rusvid_* |
21.12.2009, 15:59
Сообщение
#1
|
Гости |
Я новичок в программировании под Linux и в QT в частности. Не получается заставить работать сабжевую связку.
Делал следующим образом: 1. Собрал unixODBC Раскрывающийся текст
2. Собрал freeTDS Раскрывающийся текст
3. Собрал qt-4.6.0 Раскрывающийся текст
4. Сконфигурировал: /usr/local/etc/freetds.conf Раскрывающийся текст [MSTEST] host = test port = 1433 tds version = 8.0 client charset = UTF-8 /usr/local/etc/odbcinst.ini Раскрывающийся текст [ODBC] Trace = Yes TraceFile = /tmp/sql.log ForceTrace = Yes Pooling = No [TDS] Description = TDS driver (Sybase/MS SQL) Driver = /usr/local/lib/libtdsodbc.so Setup = /usr/local/lib/libtdsS.so Trace = Yes TraceFile = /tmp/freetds.log FileUsage = 1 /usr/local/etc/odbc.ini Раскрывающийся текст [gambit] Description = FreeTDS Driver = TDS Servername = MSTEST Database = gb1 Trace = Yes TraceFile = /tmp/gambit.log Port = 1433 TDS_Version = 8.0 Пытаюсь выполнить следующую хранимую процедуру:
Код клиента:
Получаю: Цитата Запускается /home/alexey/work/TestODBC/TestODBC... QODBCResult::exec: unable to bind variable: " [FreeTDS][SQL Server]Invalid data type" /home/alexey/work/TestODBC/TestODBC завершился с кодом 2 cat /tmp/sql.log Раскрывающийся текст ... [ODBC][2139][1261399807.724945][SQLPrepare.c][192] Entry: Statement = 0x8d3a808 SQL = [{CALL fp_test(?)}][length = 17] [ODBC][2139][1261399807.725091][SQLPrepare.c][367] Exit:[SQL_SUCCESS] [ODBC][2139][1261399807.725259][SQLBindParameter.c][213] Entry: Statement = 0x8d3a808 Param Number = 1 Param Type = 1 C Type = -8 SQL_C_WCHAR SQL Type = -9 SQL_WVARCHAR Col Def = 30 Scale = 0 Rgb Value = 0x8cf374a Value Max = 30 StrLen Or Ind = 0xbfb1a474 [ODBC][2139][1261399807.725359][SQLBindParameter.c][393] Exit:[SQL_ERROR] DIAG [S1004] [FreeTDS][SQL Server]Invalid data type ... |
|
|
Litkevich Yuriy |
21.12.2009, 16:14
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
rusvid, а другие запросы, например, SELECT выполняются нормально?
|
|
|
MoPDoBoPoT |
21.12.2009, 16:18
Сообщение
#3
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
Ты не правильно используешь функцию QSqlQuery::bindValue(). Ты подготовил запрос для позиционного связывания (query.prepare("{CALL fp_test(?)}"); ), а биндишь не понятно что (query.bindValue("Name",strName); )
Надо либо так:
либо так
|
|
|
rusvid |
21.12.2009, 17:02
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 21.12.2009 Пользователь №: 1323 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ты не правильно используешь функцию QSqlQuery::bindValue(). Не, проблема, имхо, не в этом. Извиняюсь, что сразу не написал, но: 1. Под Виндой данный код работает. 2. Для целочисленного параметра аналогичный код работает под виндой и линуксом: Т.е. такая процедура:
И такой код:
Отрабатывают замечательно. Т.е. проблема именно в строковых (varchar) параметрах. Хотя для очистки совести опробовал и твои варианты - результат тот же самый. rusvid, а другие запросы, например, SELECT выполняются нормально? Как уже написал выше проблемы только со строками. Соотвественно, если выдергиваем не строковые данные, то все ок. На выборке varchar-данных, например:
Получаю кучу: Цитата qGetStringData: Error while fetching data ( "[FreeTDS][SQL Server]Program type out of range" ) Подозреваю, что где-то что-то с кодировками напутано, но что ? |
|
|
MoPDoBoPoT |
21.12.2009, 23:05
Сообщение
#5
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
|
|
|
Tonal |
24.12.2009, 11:17
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Попробуй к опциям сборки добавить --enable-msdblib
|
|
|
rusvid |
25.12.2009, 11:15
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 21.12.2009 Пользователь №: 1323 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
Tonal |
29.12.2009, 7:57
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Собирать FreeTDS.
Я, когда возился, со связкой FreeTDS + PyMSSQL то кодировку пришлось в win1251 выставить - с utf-8 не работало. Но это было ещё на FreeTDS версии 0.6.х. Как сейчас - не разбирался. |
|
|
Текстовая версия | Сейчас: 10.1.2025, 11:40 |