Ваше мнение за запрос...
Ваше мнение за запрос...
Почему этот запрос корректно работает в IBExpert - выдает действительно сумму и выдает в результате 0, если его реализовать через FIBQUERY:
Select SUM(QT*CT) from SF where ID='''+s+'''';
Запрос должен возвращать суммарную стоимость товара из таблицы в которой всего три поля:
QT - количество определенного товара - поле decimal
CT - цена товара - поле decimal
ID - идентификатор некоторого документа со списком товаров и их цен
Select SUM(QT*CT) from SF where ID='''+s+'''';
Запрос должен возвращать суммарную стоимость товара из таблицы в которой всего три поля:
QT - количество определенного товара - поле decimal
CT - цена товара - поле decimal
ID - идентификатор некоторого документа со списком товаров и их цен
Да не собираюсь я спорить, можно сказать, что наоборот обратился за помощью... Глупо спорить с теми, у кого ищешь ответа. Если был неправильно понят - извиняюсь. Я уже пробовал через параметры, тот же результат:
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)??? Но не могу понять где именно ошибка. Конечно можно реализовать все через цыкл без параметров и все тогда работает, но хочется поменьше загружать трафик...
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)??? Но не могу понять где именно ошибка. Конечно можно реализовать все через цыкл без параметров и все тогда работает, но хочется поменьше загружать трафик...
все фигня. берем запрос с конкретным id, который в ibexpert возвращает нужный результат. Потом копируем текст запроса в программу. Выполняем уже оттуда. Если результат РАЗНЫЙ, чего не может быть в принципе, то значит Вы просто не умеете работать с FIBQuery. Можете попробовать то же самое с FIBDataSet, чтобы понять, где проблема.
я конечно FIBQUERY давно уже не видел, но мне что-то шепчет что после
sql.ExecWP('ID',[s]); он ничего не должен вернуть
вот так попробуй для разнообразия
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)).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;
Пока вопрос остается нерешенным. .. Но все равно всем спасибо!
Уважаемый "KDV" - запрос в эксперт я копировал изначально из программы, после того, как он у меня не пошел... Возможно я действительно что-то не учел в FIB, но вроде не первый день работаю с FIB и пока осечек не было... Вот и обратился к Вам с вопросом, где я не так делаю... Что не так может быть с FIB. У меня подозрение, что он просто не может корректно обработать саму конструкцию запроса (SUM(QT*CT)), хотя почему так - не понимаю... Покажите, кто может, в чем я не прав.kdv писал(а):все фигня. берем запрос с конкретным id, который в ibexpert возвращает нужный результат. Потом копируем текст запроса в программу. Выполняем уже оттуда. Если результат РАЗНЫЙ, чего не может быть в принципе, то значит Вы просто не умеете работать с FIBQuery. Можете попробовать то же самое с FIBDataSet, чтобы понять, где проблема.
я занимаю достаточно жесткую позицию по поводу "обращений" в частности по FIBPlus. Обратились Вы не ко мне, а на форум. Причем, если Вы пользуетесь FIBPlus, то непонятно, почему не к разработчикам FIBPlus, а сюда. Если FIBPlus не куплен, или покупайте и обращайтесь к разработчикам, или не покупайте и переходите на IBX.Вот и обратился к Вам с вопросом, где я не так делаю...
FIB ничего не обрабатывает. Он передает серверу запрос. И получает результат. И если в IBE у Вас результат есть, а в FIBQuery - нет, то это просто значит, что Вы НЕ получаете запись с сервера. Только и всего. Именно поэтому я посоветовал Вам попробовать FIBDataSet.У меня подозрение, что он просто не может корректно обработать саму конструкцию запроса (SUM(QT*CT)), хотя почему так - не понимаю..
Лично я не работаю с FIBPlus, и в данный момент у меня эти компоненты не установлены, поэтому я не могу посмотреть FIBQuery и сравнить его отличия от IBSQL. Но по Вашим словам очень похоже что просто-напросто Вы не даете команду FIBQuery получить запись с сервера.
Дима, никаких претензий к тебе не имею, все что ты написал, я также понимаю, FIBPlus купил еще пару лет назад у Devrace. Со всем остальным согласен. метод QueryExec получает результат и по всем остальным(другого формата запросам) работает прекрасно. Сам запрос сформулирован правильно. Вот и непонятно.
Да, обращаться в конечной инстанции нужно было бы к Devrace, но к Вам было проще и быстрее здесь отвечают, как я вижу, поэтому Ваш форум в этом смысле привлекательнее для пользователей. К тому же ответы здесь как видно достаточно профессиональные. Это можете расценивать как комплимент.
Что касается кавычек - идентификатор в данном случае в текстовом виде(это из-за номеров поступающих документов на товар - они бывают из составных символов).
Постараюсь разобраться - если получиться - напишу в чем я ошибался или делал не так.
Но если кто-то все-таки видит явно ошибку - просьба написать здесь.
Да, обращаться в конечной инстанции нужно было бы к Devrace, но к Вам было проще и быстрее здесь отвечают, как я вижу, поэтому Ваш форум в этом смысле привлекательнее для пользователей. К тому же ответы здесь как видно достаточно профессиональные. Это можете расценивать как комплимент.
Что касается кавычек - идентификатор в данном случае в текстовом виде(это из-за номеров поступающих документов на товар - они бывают из составных символов).
Постараюсь разобраться - если получиться - напишу в чем я ошибался или делал не так.
Но если кто-то все-таки видит явно ошибку - просьба написать здесь.
Запрос так и выглядит:
'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'''
все прекрасно работает и в программе во всех вариантах...
Это вообще похоже на глюк, то чего не должно быть... Но известно, что все глюки объяснимы, вот и хотелось узнать, что не так.
Это, как я уже сказал, не безвыходная ситуация, только хочется все делать не через ж... Если найду причину напишу здесь...
Спасибо !
'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'''
все прекрасно работает и в программе во всех вариантах...
Это вообще похоже на глюк, то чего не должно быть... Но известно, что все глюки объяснимы, вот и хотелось узнать, что не так.
Это, как я уже сказал, не безвыходная ситуация, только хочется все делать не через ж... Если найду причину напишу здесь...
Спасибо !
а альяс пробывал типа
?
потому как компонентам на то что внутри sum должно быть поралельно.
ЗЫ и используй теги, а то читать не удобно.
Код: Выделить всё
'Select SUM(QT*CT) mysum from SF where ID=''5555555'''
потому как компонентам на то что внутри sum должно быть поралельно.
ЗЫ и используй теги, а то читать не удобно.