Russian Qt Forum
Май 06, 2024, 09:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 [2]
16  Программирование / Базы данных / Re: MSSQL 2005 Хранимая процедура : Апрель 14, 2012, 11:48
Цитата: Странник
предлагаю вам собрать демо-проект sqlbrowser и попробовать выполнить через него запрос:
Код:
{CALL teststoreproc (2)}
или
Код:
EXEC teststoreproc 2
если отработает, будем курить ваш код, если нет - нужно копать в сторону ODBC или MS SQL Server.

эксперимент произведён Улыбающийся
результат тот же - при наличии IF'а -  "Forward-only queries cannot be used in a data model"

попытка тут же повторно выполнить exec даёт:

[Microsoft][ODBC SQL Server Driver]Подключение занято до получения результатов для другого hstmt QODBC3: Unable to execute statement


скриншоты прилагаю

информация о системе (клиент):
Microsoft SQL Server Management Studio      9.00.1399.00
Microsoft Analysis Services Client Tools      2005.090.1399.00
Microsoft Data Access Components (MDAC)   2000.085.1132.00 (xpsp.080413-0852)
Microsoft MSXML                  2.6 3.0 5.0 6.0
Operating System                  5.1.2600

сервер:
Product Microsoft SQL Server Standard Edition
Operating System Microsoft Windows NT 5.2 (3790)
Version 9.00.4262.00

самое интересное - я проверял на MS SQL 2000 в совершенно другой сети  - результат был аналогичный
правда ещё на QSqlTableModel а не на собственной

Цитировать
и exec() отрабатывает, и результаты запроса видны. if 3=3 на месте
ума не приложу - что же  я не так делаю то?...
17  Программирование / Базы данных / Re: MSSQL 2005 Хранимая процедура : Апрель 13, 2012, 16:48
Цитата: Странник
хранимая процедура выполняется и возвращает верный результат
в смысле exec отрабатывает без ошибки или видны результаты запроса?
и if 3=3 в коде процедуре не закомментарен?
18  Программирование / Базы данных / Re: MSSQL 2005 Хранимая процедура : Апрель 13, 2012, 11:45
Спустя ровно месяц удалось вернуться к вопросу Улыбающийся

Цитата: Rem Norton
QSqlQueryModel не работает с forward-only запросами.
Сделал я собственную модель...
В общем проблема осталась.
Дело не в forward-only.
MS SQL не возвращает результат, точнее numRowsAffected() равен -1  - "cannot be determined"

Цитата: Rem Norton
При отключении управляющих конструкций процедура перестает быть T-SQL.

Не хочу спорить - но хранимая процедура MS SQL в любом случае T-SQL (ну или тот диалект, который используется конкретным сервером, скажем PL/SQL или Watcom).
И как бы управляющие конструкции в виде IF'ов и прочего и есть собственно язык SQL.

Цитата: Rem Norton
И дело не в ODBC, а в MS SQL.

И получается, похоже по всему, что проблема таки в QODBC.
Поскольку именно QODBC прослойка к основному ODBC и тот же Visual FoxPro не имеет проблем с получением результата от сервера не смотря на наличие или отсутствие управляющих конструкций.

Для тех, кто хочет как-то разобраться в ситуации, прикладываю проект.
19  Программирование / Базы данных / Re: MSSQL 2005 Хранимая процедура : Март 16, 2012, 13:45
Цитата: Rem Norton
Код
C++ (Qt)
qDebug() << viewModel->lastError().text();
 
и посмотри, что напишет в консоли.
"Forward-only queries cannot be used in a data model"

Так всё таки - при отключении управляющих конструкций результат перестаёт быть forward-only?
При чём настройка setForwardOnly(true) игнорируется...
Или как?
Почему тогда с ASA 8.02 через QODBC нет ни каких проблем?

Цитата: Странник
что помогло сейчас помню очень смутно
очень бы хотелось найти объяснение...
20  Программирование / Базы данных / Re: MSSQL 2005 Хранимая процедура : Март 14, 2012, 08:58
Цитата: Rem Norton

QSqlQueryModel не работает с forward-only запросами.

Хорошо.
Но вот только одно "но" - как только я убираю управляющую конструкцию в хранимой процедуре (или IF или SET NOCOUNT),
то всё работает замечательно.
И ещё - я провёл аналогичный эксперимент с Adaptive Server Anywhere 8.02 (Sybase ASA) через тот же QODBC с аналогичной процедурой - всё отлично отрабатывает.
21  Программирование / Базы данных / Re: MSSQL 2005 Хранимая процедура : Март 13, 2012, 14:04
надо QSqlQuery сказать setForwardOnly(true).
Чтобы корректно отпустить HSTMT надо сделать QSqlQuery::finish();
да говорил и то и другое Улыбающийся

проект прикладываю
там же скрипты ХП и таблицы
22  Программирование / Базы данных / MSSQL 2005 Хранимая процедура : Март 12, 2012, 16:50
MSSQL 2005, Qt 4.8, QODBC
Имеется хранимая процедура простого содержания:
Код:
select field1,field2 from SomeTable

Отрабатывает без проблем.
Изменяю текст процедуры на:
Код:
if 3=3
select field1,field2 from SomeTable

(IF 3=3 для примера, на самом деле любая проверка)
Ошибок запроса нет, но и результата на клиенте нет тоже.
При попытке тут же повторить запрос ответ "Подключение занято".

[Microsoft][ODBC SQL Server Driver]Подключение занято до получения результатов для другого hstmt QODBC3: Unable to execute statement


При этом другой клиент (не Qt) через ODBC в обоих случаях результат получает.
В чём может быть проблема?


23  Программирование / Базы данных / Re: QPSQL для PostgreSQL 9.0 под WinXP x64 : Март 10, 2011, 15:57
Ну раз ни кто не пробовал тогда расскажу Улыбающийся
Проблема конечно же заключается в несовместимости 32-х битных библиотек Qt и 64-х битных самого x64 Postgres 9.
Решил собрать Qt 4.7.2 под x64 (кстати изменения для версий Postgres выше 8.2, в том числе и 9 в 4.7.2 уже внесены).

С MinGW собрать x64 Qt не удаётся ни под каким соусом - этот вываливается с ошибками не смотря ни на какие танцы с бубном, этот же компилит только 32 битный код.

Ни чего не осталось как использовать компилятор MS...
Собственно всё описано тут.
После сборки Qt 4.7.2 x64 драйвер для Postgres 9 x64 собрался без вопросов.

P.S. Если кому нужны x64 Qt 4.7.2 и Qt Creator 2.1.0 - обращайтесь
24  Программирование / Базы данных / QPSQL для PostgreSQL 9.0 под WinXP x64 [РЕШЕНО] : Март 07, 2011, 20:12
Не удаётся скомпилировать драйвер для PostgreSQL 9.0 под WinXP x64
Qt 4.7.1
Creator 2.1.0
Обращаю внимание - и сервер и система 64 бита.

Компилирование в 32 бит проходило без всяких проблем.
Все пути прописаны.
Изменения в исходники драйвера для поддержки версии выше 8.2 внесены - всё успешно компилировалось и работало.

Пробовал различные варианты.
Из командной строки :
Цитировать
C:\Qt\4.7.1\src\plugins\sqldrivers\psql>qmake "INCLUDEPATH+=C:/PostgreSQL/9.0/in
clude/" "LIBS+=C:/PostgreSQL/9.0/lib/libpq.lib" psql.pro

C:\Qt\4.7.1\src\plugins\sqldrivers\psql>make
mingw32-make -f Makefile.Debug all
mingw32-make[1]: Entering directory `C:/Qt/4.7.1/src/plugins/sqldrivers/psql'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
DQT_EVAL -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT
_SQL_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMX
...skiped...
Creating library file: c:\Qt\4.7.1\plugins\sqldrivers\libqsqlpsqld4.a
tmp/obj/debug_shared/qsql_psql.o: In function `qMakeError':
C:\Qt\4.7.1\src\plugins\sqldrivers\psql/../../../sql/drivers/psql/qsql_psql.cpp:
176: undefined reference to `PQerrorMessage'
tmp/obj/debug_shared/qsql_psql.o:C:\Qt\4.7.1\src\plugins\sqldrivers\psql/../../.
./sql/drivers/psql/qsql_psql.cpp:186: undefined reference to `PQresultStatus'
tmp/obj/debug_shared/qsql_psql.o:C:\Qt\4.7.1\src\plugins\sqldrivers\psql/../../.
./sql/drivers/psql/qsql_psql.cpp:190: undefined reference to `PQntuples'
tmp/obj/debug_shared/qsql_psql.o: In function `qDeallocatePreparedStmt':
C:\Qt\4.7.1\src\plugins\sqldrivers\psql/../../../sql/drivers/psql/qsql_psql.cpp:
254: undefined reference to `PQexec'
...skiped...
collect2: ld returned 1 exit status
mingw32-make[1]: *** [..\..\..\..\plugins\sqldrivers\qsqlpsqld4.dll] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.7.1/src/plugins/sqldrivers/psql'
mingw32-make: *** [debug-all] Error 2
Т.е. C:\PostgreSQL\9.0\include\ не видны не смотря на то что указаны...
Что подтверждается открыв проект в Creator -
#include <libpq-fe.h>
#include <pg_config.h>
No such file or directory

Пробую компилировать из Creatora добавив в проект
Цитировать
INCLUDEPATH+= C:/PostgreSQL/9.0/include
LIBS+= C:/PostgreSQL/9.0/lib/libpq.lib
Получаю:
Цитировать
c:/qt/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lpq
collect2: ld returned 1 exit status
mingw32-make[1]: *** [..\..\..\..\plugins\sqldrivers\qsqlpsqld4.dll] Error 1
mingw32-make: *** [debug-all] Error 2
The process "C:\QT\mingw\bin\mingw32-make.exe" exited with code 2.
Error while building project psql (target: Desktop)
When executing build step 'Make'
Дальше пробую:
Цитировать
INCLUDEPATH+= C:/PostgreSQL/9.0/include
LIBS+=-LC:/PostgreSQL/9.0/lib -lpq
Итог:
Цитировать
C:/PostgreSQL/9.0/lib/libpq.dll: file not recognized: File format not recognized
collect2: ld returned 1 exit status
mingw32-make[1]: *** [..\..\..\..\plugins\sqldrivers\qsqlpsqld4.dll] Error 1
mingw32-make: *** [debug-all] Error 2
The process "C:\QT\mingw\bin\mingw32-make.exe" exited with code 2.
Error while building project psql (target: Desktop)
When executing build step 'Make'

Кто-нибудь пробовал скомпилировать под 64 бит?
В чём тут загвоздка? MinGW?
Страниц: 1 [2]

Страница сгенерирована за 0.074 секунд. Запросов: 23.