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

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: MSSQL 2005 Хранимая процедура  (Прочитано 19667 раз)
chagovets
Новичок

Offline Offline

Сообщений: 24


Просмотр профиля
« Ответ #15 : Апрель 14, 2012, 15:14 »

Цитировать
проблема с выполннием запроса или все-таки с моделью?
с выполнением запроса из Management Stidio нет ни каких проблем, в любом виде процедура отрабатывает (скриншоты приводил)
как советовали - я из демо sqlbrowser пытался проверять вызов процедуры
о результатах эксперимента с sqlbrowser доложил
само собой, в sqlbrowser используется QSqlQueryModel  - но Вы же утверждаете, что у Вас
Цитировать
и exec() отрабатывает, и результаты запроса видны. if 3=3 на месте.
проверил на MS SQL 2005, драйвера SQL Server и SQL Native Client, Qt 4.8.1.

поскольку
Цитировать
MS SQL Server возвращает forward only результат, на чем QSqlQueryModel и затыкается.
я и решил использовать свою модель
но как оказалось, дело не в forward only результате
о чём выше написал, что проблема осталась

Цитировать
почему не работает ваша собственная реализация, давайте разбираться. с ходу вижу, что у вас неверно реализовано добавление данных в модель. не используйте size() или numRowsAffected() для определения числа записей, надежнее крутиться в while(mQuery.next()).
моя реализация вполне работает
вот только до тех пор пока нет пресловутой "управляющей конструкции" Улыбающийся
size() я не использую - поскольку MS SQL его не поддерживает - просто код использовался и для других серверов, и закомментарен  сейчас
numRowsAffected() вполне работоспособен на MS SQL - но сейчас я тоже его исключил
ориентируюсь исключительно на next()

НО
как только я раскомментариваю if 3=3 или SET NOCOUNT ON возвращаемый на Qt клиента результат запроса не содержит ни одной записи
вот в чём проблема
и я ни как не могу понять причины этого
сейчас установил MS SQL 2005 Express на рабочую станцию - результат не изменился

« Последнее редактирование: Апрель 14, 2012, 15:36 от chagovets » Записан
Странник
Гость
« Ответ #16 : Апрель 15, 2012, 19:49 »

в самом деле, любопытно. что имеется у меня на MS SQL Express 2005:
- запрос успешно выполняется и при отсутствии, и при наличии управляющих инструкций в хранимой процедуре. результат запроса доступен в QSqlQuery в обоих случаях
- при наличии управляющих инструкций QSqlQuery::isForwardOnly() возвращает true
- numRowsAffected() возвращает -1 (первый затык вашей модели в setQuery), заменяем на while(mQuery.next())
затем ваша модель у меня затыкается на setData (value содержит верные данные из запроса, а index не валиден), дальше пока не копал.
завтра попробую повторить эксперимент на другом сервере, вдруг там запрос не сработает.
Записан
chagovets
Новичок

Offline Offline

Сообщений: 24


Просмотр профиля
« Ответ #17 : Апрель 16, 2012, 08:05 »

Орешек знаний тверд
Но все же, мы не привыкли отступать!


Странник, Вы были правы!
Цитата: Странник
надежнее крутиться в while(mQuery.next()).
я хоть и писал что
Цитировать
numRowsAffected() вполне работоспособен на MS SQL - но сейчас я тоже его исключил
ориентируюсь исключительно на next()
но исключил не до конца
в общем если действительно идти по next() всё встало на свои места
премного благодарен Страннику за наставление на путь истинный Подмигивающий

P.S. MS SQL впечатляет в плохом смысле Улыбающийся
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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