Страница 1 из 2
Ваше мнение за запрос...
Добавлено: 11 фев 2008, 09:52
Nik2008
Почему этот запрос корректно работает в IBExpert - выдает действительно сумму и выдает в результате 0, если его реализовать через FIBQUERY:
Select SUM(QT*CT) from SF where ID='''+s+'''';
Запрос должен возвращать суммарную стоимость товара из таблицы в которой всего три поля:
QT - количество определенного товара - поле decimal
CT - цена товара - поле decimal
ID - идентификатор некоторого документа со списком товаров и их цен
Добавлено: 11 фев 2008, 10:44
Attid
что такое параметры еще не читал ? почитай, должно заработать.
Добавлено: 11 фев 2008, 10:53
Nik2008
С параметрами я знаком, но должно и так работать...
Добавлено: 11 фев 2008, 11:06
WildSery
Nik2008 писал(а):С параметрами я знаком, но должно и так работать...
Вместо того, чтобы спорить с нами, выведи получившийся в FIBQuery.SQL.Text значение куда-нибудь, скопируй, и если всё равно не понятно, почему - вставь
скопированный запрос в IBExpert.
Добавлено: 11 фев 2008, 11:07
stix-s
Nik2008 писал(а):С параметрами я знаком, но должно и так работать...
А может все дело в транзакциях?
Добавлено: 11 фев 2008, 11:49
Nik2008
Да не собираюсь я спорить, можно сказать, что наоборот обратился за помощью... Глупо спорить с теми, у кого ищешь ответа. Если был неправильно понят - извиняюсь. Я уже пробовал через параметры, тот же результат:
sql.SQL.Clear;
sql.SQL.Text:='Select SUM(QT*CT) from SF where ID=:ID';
sql.ExecWP('ID',[s]);
v:=sql.FldByName['SUM'].asFloat;
один из вариантов запроса через параметр
переменной s естественно передано значение зараннее,
переменная v вещественного типа (real)
возвращается в результате 0.00
я думаю, что что-то в самом запросе SUM(QT*CT)??? Но не могу понять где именно ошибка. Конечно можно реализовать все через цыкл без параметров и все тогда работает, но хочется поменьше загружать трафик...
Добавлено: 11 фев 2008, 12:07
kdv
все фигня. берем запрос с конкретным id, который в ibexpert возвращает нужный результат. Потом копируем текст запроса в программу. Выполняем уже оттуда. Если результат РАЗНЫЙ, чего не может быть в принципе, то значит Вы просто не умеете работать с FIBQuery. Можете попробовать то же самое с FIBDataSet, чтобы понять, где проблема.
Добавлено: 11 фев 2008, 12:14
Attid
я конечно FIBQUERY давно уже не видел, но мне что-то шепчет что после
sql.ExecWP('ID',[s]); он ничего не должен вернуть
вот так попробуй для разнообразия
Код: Выделить всё
sql.SQL.Clear;
sql.SQL.Text:='Select SUM(QT*CT) as "MYSUM" from SF where ID=:ID';
sql.parambyname(id).asINTEGER := s;
sql.open;
v:=sql.FldByName['MYSUM'].asFloat;
sql.close;
Добавлено: 11 фев 2008, 14:03
Nik2008
Attid писал(а):я конечно FIBQUERY давно уже не видел, но мне что-то шепчет что после
sql.ExecWP('ID',[s]); он ничего не должен вернуть
вот так попробуй для разнообразия
Код: Выделить всё
sql.SQL.Clear;
sql.SQL.Text:='Select SUM(QT*CT) as "MYSUM" from SF where ID=:ID';
sql.parambyname(id).asINTEGER := s;
sql.open;
v:=sql.FldByName['MYSUM'].asFloat;
sql.close;
Спасибо за предложения... Но это конструкция ничем не отличается от моей и в итоге так же не работает, то есть возвращает 0,00 (кстати вмсето метода OPEN нужно использовать QueryExec, например(это не замечание, учитывая, что Вы давно не работали с FIB)).
Пока вопрос остается нерешенным. .. Но все равно всем спасибо!
kdv писал(а):все фигня. берем запрос с конкретным id, который в ibexpert возвращает нужный результат. Потом копируем текст запроса в программу. Выполняем уже оттуда. Если результат РАЗНЫЙ, чего не может быть в принципе, то значит Вы просто не умеете работать с FIBQuery. Можете попробовать то же самое с FIBDataSet, чтобы понять, где проблема.
Уважаемый "KDV" - запрос в эксперт я копировал изначально из программы, после того, как он у меня не пошел... Возможно я действительно что-то не учел в FIB, но вроде не первый день работаю с FIB и пока осечек не было... Вот и обратился к Вам с вопросом, где я не так делаю... Что не так может быть с FIB. У меня подозрение, что он просто не может корректно обработать саму конструкцию запроса (SUM(QT*CT)), хотя почему так - не понимаю... Покажите, кто может, в чем я не прав.
Добавлено: 11 фев 2008, 14:38
kdv
Вот и обратился к Вам с вопросом, где я не так делаю...
я занимаю достаточно жесткую позицию по поводу "обращений" в частности по FIBPlus. Обратились Вы не ко мне, а на форум. Причем, если Вы пользуетесь FIBPlus, то непонятно, почему не к разработчикам FIBPlus, а сюда. Если FIBPlus не куплен, или покупайте и обращайтесь к разработчикам, или не покупайте и переходите на IBX.
У меня подозрение, что он просто не может корректно обработать саму конструкцию запроса (SUM(QT*CT)), хотя почему так - не понимаю..
FIB ничего не обрабатывает. Он передает серверу запрос. И получает результат. И если в IBE у Вас результат есть, а в FIBQuery - нет, то это просто значит, что Вы НЕ получаете запись с сервера. Только и всего. Именно поэтому я посоветовал Вам попробовать FIBDataSet.
Лично я не работаю с FIBPlus, и в данный момент у меня эти компоненты не установлены, поэтому я не могу посмотреть FIBQuery и сравнить его отличия от IBSQL. Но по Вашим словам очень похоже что просто-напросто Вы не даете команду FIBQuery получить запись с сервера.
Добавлено: 11 фев 2008, 14:59
stix-s
Nik2008 писал(а):
хотя почему так - не понимаю... Покажите, кто может, в чем я не прав.
твой пример у меня прекрасно работает, правда табличка естессно - моя

в IBExpert апдейтов той таблички не делал? транзакции там же коммитил?
Хотя, конечно лично меня еще настораживает имя поля в кавычках......
Добавлено: 11 фев 2008, 15:38
Nik2008
Дима, никаких претензий к тебе не имею, все что ты написал, я также понимаю, FIBPlus купил еще пару лет назад у Devrace. Со всем остальным согласен. метод QueryExec получает результат и по всем остальным(другого формата запросам) работает прекрасно. Сам запрос сформулирован правильно. Вот и непонятно.
Да, обращаться в конечной инстанции нужно было бы к Devrace, но к Вам было проще и быстрее здесь отвечают, как я вижу, поэтому Ваш форум в этом смысле привлекательнее для пользователей. К тому же ответы здесь как видно достаточно профессиональные. Это можете расценивать как комплимент.
Что касается кавычек - идентификатор в данном случае в текстовом виде(это из-за номеров поступающих документов на товар - они бывают из составных символов).
Постараюсь разобраться - если получиться - напишу в чем я ошибался или делал не так.
Но если кто-то все-таки видит явно ошибку - просьба написать здесь.
Добавлено: 11 фев 2008, 16:18
kdv
я хочу все-таки увидеть текст запроса, который в IBE дает результат, а в FIBPlus - нет, причем без параметров.
Кстати, вполне может быть что FIBQuery как-то не так обрабатывает алиас в двойных кавычках. Т.е. это может быть банальный баг, который уже 5 лет как исправлен

Добавлено: 12 фев 2008, 15:38
Nik2008
Запрос так и выглядит:
'Select SUM(QT*CT) from SF where ID=''5555555'''
и не важно, константу писать или через параметр или через переменную, причем также не важно какого типа этот ID. Вообще от него не зависит результат запроса. В эксперте работают все варианты, а в программе нет. Если же убрать один из множителей, например, такой запрос:
'Select SUM(QT) from SF where ID=''5555555'''
или
'Select SUM(CT) from SF where ID=''5555555'''
все прекрасно работает и в программе во всех вариантах...
Это вообще похоже на глюк, то чего не должно быть... Но известно, что все глюки объяснимы, вот и хотелось узнать, что не так.
Это, как я уже сказал, не безвыходная ситуация, только хочется все делать не через ж... Если найду причину напишу здесь...
Спасибо !
Добавлено: 12 фев 2008, 15:50
stix-s
Nik2008 писал(а):
Это, как я уже сказал, не безвыходная ситуация, только хочется все делать не через ж... Если найду причину напишу здесь...
Спасибо !
версия FIB+ какая?
Добавлено: 12 фев 2008, 15:53
Attid
а альяс пробывал типа
Код: Выделить всё
'Select SUM(QT*CT) mysum from SF where ID=''5555555'''
?
потому как компонентам на то что внутри sum должно быть поралельно.
ЗЫ и используй теги, а то читать не удобно.
Добавлено: 12 фев 2008, 16:26
Nik2008
АЛЬЯС пробовал - ничего не меняет, FIB 6.5
меняет только наличие произведения(другие виды мат.операций правда пока не пробовал, не было надобности, но для эксперимента попробую)
Добавлено: 12 фев 2008, 16:27
Nik2008
Attid писал(а):потому как компонентам на то что внутри sum должно быть поралельно.
в моем случае, похоже как раз это и причина...
Добавлено: 12 фев 2008, 17:14
Attid
значит иди на сайт фибов и смотри списки изменений с твоей версии может есть бесплатные обновления на 6,5
Добавлено: 12 фев 2008, 17:17
Nik2008
Спасибо всем за посильную помощь... Меня не будет 5 дней. Постараюсь найти ответ и напишу здесь.