Ваше мнение за запрос...

Модераторы: kdv, CyberMax

Nik2008
Сообщения: 11
Зарегистрирован: 11 фев 2008, 09:42

Ваше мнение за запрос...

Сообщение Nik2008 » 11 фев 2008, 09:52

Почему этот запрос корректно работает в IBExpert - выдает действительно сумму и выдает в результате 0, если его реализовать через FIBQUERY:

Select SUM(QT*CT) from SF where ID='''+s+'''';

Запрос должен возвращать суммарную стоимость товара из таблицы в которой всего три поля:
QT - количество определенного товара - поле decimal
CT - цена товара - поле decimal
ID - идентификатор некоторого документа со списком товаров и их цен

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 11 фев 2008, 10:44

что такое параметры еще не читал ? почитай, должно заработать.

Nik2008
Сообщения: 11
Зарегистрирован: 11 фев 2008, 09:42

Сообщение Nik2008 » 11 фев 2008, 10:53

С параметрами я знаком, но должно и так работать...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 11 фев 2008, 11:06

Nik2008 писал(а):С параметрами я знаком, но должно и так работать...
Вместо того, чтобы спорить с нами, выведи получившийся в FIBQuery.SQL.Text значение куда-нибудь, скопируй, и если всё равно не понятно, почему - вставь скопированный запрос в IBExpert.

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 11 фев 2008, 11:07

Nik2008 писал(а):С параметрами я знаком, но должно и так работать...
А может все дело в транзакциях?

Nik2008
Сообщения: 11
Зарегистрирован: 11 фев 2008, 09:42

Сообщение Nik2008 » 11 фев 2008, 11:49

Да не собираюсь я спорить, можно сказать, что наоборот обратился за помощью... Глупо спорить с теми, у кого ищешь ответа. Если был неправильно понят - извиняюсь. Я уже пробовал через параметры, тот же результат:

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)??? Но не могу понять где именно ошибка. Конечно можно реализовать все через цыкл без параметров и все тогда работает, но хочется поменьше загружать трафик...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 фев 2008, 12:07

все фигня. берем запрос с конкретным id, который в ibexpert возвращает нужный результат. Потом копируем текст запроса в программу. Выполняем уже оттуда. Если результат РАЗНЫЙ, чего не может быть в принципе, то значит Вы просто не умеете работать с FIBQuery. Можете попробовать то же самое с FIBDataSet, чтобы понять, где проблема.

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 11 фев 2008, 12:14

я конечно 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;

Nik2008
Сообщения: 11
Зарегистрирован: 11 фев 2008, 09:42

Сообщение Nik2008 » 11 фев 2008, 14:03

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)), хотя почему так - не понимаю... Покажите, кто может, в чем я не прав.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 фев 2008, 14:38

Вот и обратился к Вам с вопросом, где я не так делаю...
я занимаю достаточно жесткую позицию по поводу "обращений" в частности по FIBPlus. Обратились Вы не ко мне, а на форум. Причем, если Вы пользуетесь FIBPlus, то непонятно, почему не к разработчикам FIBPlus, а сюда. Если FIBPlus не куплен, или покупайте и обращайтесь к разработчикам, или не покупайте и переходите на IBX.
У меня подозрение, что он просто не может корректно обработать саму конструкцию запроса (SUM(QT*CT)), хотя почему так - не понимаю..
FIB ничего не обрабатывает. Он передает серверу запрос. И получает результат. И если в IBE у Вас результат есть, а в FIBQuery - нет, то это просто значит, что Вы НЕ получаете запись с сервера. Только и всего. Именно поэтому я посоветовал Вам попробовать FIBDataSet.

Лично я не работаю с FIBPlus, и в данный момент у меня эти компоненты не установлены, поэтому я не могу посмотреть FIBQuery и сравнить его отличия от IBSQL. Но по Вашим словам очень похоже что просто-напросто Вы не даете команду FIBQuery получить запись с сервера.

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 11 фев 2008, 14:59

Nik2008 писал(а): хотя почему так - не понимаю... Покажите, кто может, в чем я не прав.
твой пример у меня прекрасно работает, правда табличка естессно - моя :)
в IBExpert апдейтов той таблички не делал? транзакции там же коммитил?
Хотя, конечно лично меня еще настораживает имя поля в кавычках......

Nik2008
Сообщения: 11
Зарегистрирован: 11 фев 2008, 09:42

Сообщение Nik2008 » 11 фев 2008, 15:38

Дима, никаких претензий к тебе не имею, все что ты написал, я также понимаю, FIBPlus купил еще пару лет назад у Devrace. Со всем остальным согласен. метод QueryExec получает результат и по всем остальным(другого формата запросам) работает прекрасно. Сам запрос сформулирован правильно. Вот и непонятно.
Да, обращаться в конечной инстанции нужно было бы к Devrace, но к Вам было проще и быстрее здесь отвечают, как я вижу, поэтому Ваш форум в этом смысле привлекательнее для пользователей. К тому же ответы здесь как видно достаточно профессиональные. Это можете расценивать как комплимент.
Что касается кавычек - идентификатор в данном случае в текстовом виде(это из-за номеров поступающих документов на товар - они бывают из составных символов).
Постараюсь разобраться - если получиться - напишу в чем я ошибался или делал не так.
Но если кто-то все-таки видит явно ошибку - просьба написать здесь.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 фев 2008, 16:18

я хочу все-таки увидеть текст запроса, который в IBE дает результат, а в FIBPlus - нет, причем без параметров.

Кстати, вполне может быть что FIBQuery как-то не так обрабатывает алиас в двойных кавычках. Т.е. это может быть банальный баг, который уже 5 лет как исправлен :)

Nik2008
Сообщения: 11
Зарегистрирован: 11 фев 2008, 09:42

Сообщение Nik2008 » 12 фев 2008, 15:38

Запрос так и выглядит:
'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'''
все прекрасно работает и в программе во всех вариантах...
Это вообще похоже на глюк, то чего не должно быть... Но известно, что все глюки объяснимы, вот и хотелось узнать, что не так.
Это, как я уже сказал, не безвыходная ситуация, только хочется все делать не через ж... Если найду причину напишу здесь...
Спасибо !

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 12 фев 2008, 15:50

Nik2008 писал(а): Это, как я уже сказал, не безвыходная ситуация, только хочется все делать не через ж... Если найду причину напишу здесь...
Спасибо !
версия FIB+ какая?

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 12 фев 2008, 15:53

а альяс пробывал типа

Код: Выделить всё

'Select SUM(QT*CT) mysum from SF where ID=''5555555''' 
?
потому как компонентам на то что внутри sum должно быть поралельно.

ЗЫ и используй теги, а то читать не удобно.

Nik2008
Сообщения: 11
Зарегистрирован: 11 фев 2008, 09:42

Сообщение Nik2008 » 12 фев 2008, 16:26

АЛЬЯС пробовал - ничего не меняет, FIB 6.5
меняет только наличие произведения(другие виды мат.операций правда пока не пробовал, не было надобности, но для эксперимента попробую)

Nik2008
Сообщения: 11
Зарегистрирован: 11 фев 2008, 09:42

Сообщение Nik2008 » 12 фев 2008, 16:27

Attid писал(а):потому как компонентам на то что внутри sum должно быть поралельно.
в моем случае, похоже как раз это и причина...

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 12 фев 2008, 17:14

значит иди на сайт фибов и смотри списки изменений с твоей версии может есть бесплатные обновления на 6,5

Nik2008
Сообщения: 11
Зарегистрирован: 11 фев 2008, 09:42

Сообщение Nik2008 » 12 фев 2008, 17:17

Спасибо всем за посильную помощь... Меня не будет 5 дней. Постараюсь найти ответ и напишу здесь.

Ответить