Название: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: varkon от Июнь 18, 2010, 17:19 Столкнулся с подобной ошибкой, работая с БД Firebird 2.1.
Перепробовал все варианты - в приложении открыть view не удавалось никак. Несмотря на то, что строка запроса в IBExpert выполнялась без всяких проблем. Так же этот же запрос нормально отрабатывал с QSqlQueryModel. Насколько лично я понял - проблема была непосредственно в классе QSqlQuery - ему не нравилось имя объекта свыше 16 знаков - по крайней мере, преименование объекта проблему решило. В тоже время я не нашел вроде никаких ограничений в исходниках. Подскажите, может кто сталкивался. Название: Re: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: MoPDoBoPoT от Июнь 18, 2010, 18:05 Что-то как-то не очень понятно причем здесь
Перепробовал все варианты - в приложении открыть view не удавалось никак. если ошибка в QSqlQuery.Так же этот же запрос нормально отрабатывал с QSqlQueryModel. То есть в QSqlQuery запрос не проходил, а в QSqlQueryModel нормально отработал? Странно, так как QSqlQueryModel является оберткой над QSqlQuery.Для пущей ясности нужен код все-таки. Название: Re: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: varkon от Июнь 19, 2010, 09:53 Что-то как-то не очень понятно причем здесь Еще раз проверил и выяснил - проблема оказалась видимо в моем не понимании разницы методов класса exec() и executeQuery()Перепробовал все варианты - в приложении открыть view не удавалось никак. если ошибка в QSqlQuery.Так же этот же запрос нормально отрабатывал с QSqlQueryModel. То есть в QSqlQuery запрос не проходил, а в QSqlQueryModel нормально отработал? Странно, так как QSqlQueryModel является оберткой над QSqlQuery.Для пущей ясности нужен код все-таки. Дело в том, что в процессе разработки я использовал такой код: Код: QSqlQuery *model = new QSqlQuery(dmModule::db); Так вот, получить это значение иначе (выполнив execute procedure) у меня не получалось. Получилось только используя конструкцию select. Логично, что когда мне понадобилось получить forward-only выборку из вьюхи по определенным параметрам, я использовал подобную же конструкцию. С exec(). Который нормально отрабатывал селект с процедурой. Но как выяснилось - для вьюх и таблиц надо использовать executeQuery(). Так что проблема как оказалось даже не в размерах названия. Так случайно попало, что видимо я изменил наименование объекта в базе и обратив внимание на executeQuery() (который как я считал предназначен для запросов-модификаторов - insert/update/delete) решил от отчаяния попробовать его. Спасибо за внимание. Название: Re: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: crossly от Июнь 19, 2010, 10:33 executeQuery() - это метод какого класса... ??
Название: Re: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: varkon от Июнь 19, 2010, 11:01 прошу прощения опечатался - executedQuery.
Название: Re: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: crossly от Июнь 19, 2010, 11:13 Цитировать Но как выяснилось - для вьюх и таблиц надо использовать executeQuery() что сие означает??Название: Re: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: varkon от Июнь 19, 2010, 12:10 Уважаемый, вы то что я написал во втором своем посте прочли?
Что именно вам не понятно? Я не прав в своем выводе? Укажите в чем. Повторяю еще раз - попытка выполнить заранее подготовленый запрос вида "select * from vwsome" где vwsome - объект БД Firebird типа view, используя класс QSqlQuery и его метод exec() - приводит к ошибке, которая указана в заголовке. В то же время запрос вида "select * from some_xp()" (где some_xp() - хранимая процедура) выполняется нормально. Решением проблемы явилось вызов вместо метода exec() - executedQuery(). Хотя согласно документации - разница у этих методов только в возвращаемом значении. В таком случае - почему возникает ошибка? Название: Re: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: BRE от Июнь 19, 2010, 12:23 Уважаемый, вы то что я написал во втором своем посте прочли? Вообще то executedQuery ничего не выполняет, он просто возвращает:Что именно вам не понятно? Я не прав в своем выводе? Укажите в чем. Повторяю еще раз - попытка выполнить заранее подготовленый запрос вида "select * from vwsome" где vwsome - объект БД Firebird типа view, используя класс QSqlQuery и его метод exec() - приводит к ошибке, которая указана в заголовке. В то же время запрос вида "select * from some_xp()" (где some_xp() - хранимая процедура) выполняется нормально. Решением проблемы явилось вызов вместо метода exec() - executedQuery(). Хотя согласно документации - разница у этих методов только в возвращаемом значении. В таком случае - почему возникает ошибка? Цитировать the last query that was successfully executed. Название: Re: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: crossly от Июнь 19, 2010, 13:38 Цитировать Вообще то executedQuery ничего не выполняет, он просто возвращает: +100Цитировать the last query that was successfully executed. вообще я посоветовал бы пользоваться драйвером QIBASE....+ пишите имена объектов(таблиц, вьюх) в верхнем регистре.... Название: Re: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: varkon от Июнь 19, 2010, 14:10 Хм. Действительно. Запрос выполнился просто потому, что уже сформированную строку я передал в конструктор.
Вероятно где то затупил - сейчас нормально выполняется и параметризованный запрос. Цитировать вообще я посоветовал бы пользоваться драйвером QIBASE....+ пишите имена объектов(таблиц, вьюх) в верхнем регистре.... пока с ним проблемы - вроде собрался нормально, но загружаться не хочет. Решать эту проблему буду в последнюю очередь.По поводу верхнего регистра - это больше актуально для создания объектов в самой БД насколько мне известно. Какое отношение это может иметь к клиенской части? Да и ошибка тогда другая. Название: Re: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: lit-uriy от Июнь 19, 2010, 15:10 >>но загружаться не хочет
в PATH при запуске приложения, должен быть виден клиент Firebird, т.к. драйвер от него зависит Название: Re: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: crossly от Июнь 19, 2010, 15:17 Цитировать По поводу верхнего регистра - это больше актуально для создания объектов в самой БД насколько мне известно. Какое отношение это может иметь к клиенской части? Да и ошибка тогда другая. у меня были когда то проблемы... не находились объекты если в запросе писал в нижнем регистре.... хотя в isql без проблем в любом....Название: Re: QSqlQuery - ошибка последовательности функций ODBC3 ... Отправлено: varkon от Июнь 19, 2010, 16:16 >>но загружаться не хочет :) прикольно. Буквально только что прочел рекомендацию (и по моему вашу же) на этом форуме подбросить длл в папку запуска программы. И заработало.в PATH при запуске приложения, должен быть виден клиент Firebird, т.к. драйвер от него зависит В PATH было добавлено - и отдельно папку ФБ добавил, и преставил сам сервер, что бы он был в папке без пробелов, и в систем32 запихнул - проблему решило только это. Спасибо всем за помощь. Тему можно считать закрытой. |