Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Баг с обработкой запроса к PgSQL из программы 
V
    Опции темы
iDeus
Дата 25.3.2012, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Deus vult
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 5.6.2008
Где: Vladivostok

Репутация: нет
Всего: нет



Здравствуйте, на днях столкнулся с довольно странной проблемой, есть приложение, которое пишется в RAD Studio XE,
приложение обращается к локальной БД PostgreSQL через PSQLQuery, входящий в набор компонентов PostgresDAC

Запрос выглядит следующим образом:

Код

this->PSQLQuery_CriterionAdd->Close();
this->PSQLQuery_CriterionAdd->SQL->Clear();
this->PSQLQuery_CriterionAdd->SQL->Text = "UPDATE criterion SET    \
            name = :name,                    \
            var = :var,                        \
            add_by = :add_by,                \
            when_editing = :when_edit,        \
            qt_subcriterions = :qt_subcrit,    \
            weight = :weight,                \
            noun = :noun,                    \
            norm = :norm,                    \
            for_school = :for_s,            \
            comment = :comm,                \
            formula = :formula,                \
            var_vector = :varVector,        \
            qt_var = :qt_var,                \
            real_formula = :realFormula        \
            WHERE id = :id";
this->PSQLQuery_CriterionAdd->ParamByName("for_s")->Value = this->rb_school->Checked;
this->PSQLQuery_CriterionAdd->ParamByName("name")->Value = e_name->Text;
this->PSQLQuery_CriterionAdd->ParamByName("var")->Value = e_var->Text;
this->PSQLQuery_CriterionAdd->ParamByName("add_by")->Value = MainForm->UserId;
this->PSQLQuery_CriterionAdd->ParamByName("when_edit")->Value = MainForm->DateTime2Unix(Now());
this->PSQLQuery_CriterionAdd->ParamByName("weight")->Value = e_weight->Text.ToDouble();
this->PSQLQuery_CriterionAdd->ParamByName("comm")->Value = m_comment->Text;
this->PSQLQuery_CriterionAdd->ParamByName("qt_subcrit")->Value = this->qt_subCriterions;
this->PSQLQuery_CriterionAdd->ParamByName("id")->Value = this->criterion_id;
this->PSQLQuery_CriterionAdd->ParamByName("noun")->Value = this->cb_noun->Text;
this->PSQLQuery_CriterionAdd->ParamByName("norm")->Value = this->E_norm->Text;

this->PSQLQuery_CriterionAdd->ParamByName("formula")->Value = this->formula;
this->PSQLQuery_CriterionAdd->ParamByName("realFormula")->Value = this->realFormula;
this->PSQLQuery_CriterionAdd->ParamByName("qt_var")->Value = this->qt_var;
this->PSQLQuery_CriterionAdd->ParamByName("varVector")->Value = this->varVector;

this->PSQLQuery_CriterionAdd->ExecSQL();
this->PSQLQuery_CriterionAdd->Close();


Проблема заключается вот в чем:
Приведенный код компилируются, но при работе выдает ошибку "Parameter 'realFormula' not found", при этом, если в тексте самого запроса, поменять строку с realFormula на другую, но ошибка будет уже с новым параметром. 

Таким образом, получатся, что Pg каждый раз ругается на последний параметр в запросе. В то время, как в других модулях программы идентичные конструкции работают без проблем. Добавление скобок проблему не решило.  

В чем может быть проблема, комрадс?  
PM MAIL ICQ Skype GTalk   Вверх
_Dimon_
Дата 26.3.2012, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



PSQLQuery_CriterionAdd->ParamCheck = true (можно и в инспекторе обьектов) и будет тебе счастье )))
PM MAIL   Вверх
iDeus
Дата 26.3.2012, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Deus vult
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 5.6.2008
Где: Vladivostok

Репутация: нет
Всего: нет



_Dimon_, во всех PSQLQuery ParamCheck == true изначально,
перепроверил, перед запросом установил true руками в коде, не помогло. проблема та же. 
PM MAIL ICQ Skype GTalk   Вверх
_Dimon_
Дата 26.3.2012, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Попробуй поставить после запроса, перед присвоениями параметров 

Код

this->PSQLQuery_CriterionAdd->Params->ParseSQL(this->PSQLQuery_CriterionAdd->SQL->Text,true);



PM MAIL   Вверх
iDeus
Дата 26.3.2012, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Deus vult
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 5.6.2008
Где: Vladivostok

Репутация: нет
Всего: нет



Цитата(_Dimon_ @ 26.3.2012,  10:30)
Попробуй поставить после запроса, перед присвоениями параметров 

Код

this->PSQLQuery_CriterionAdd->Params->ParseSQL(this->PSQLQuery_CriterionAdd->SQL->Text,true);

Попробовал только что, не помогло

PM MAIL ICQ Skype GTalk   Вверх
Riviero
Дата 29.3.2012, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 25.3.2010

Репутация: 2
Всего: 3



Цитата(iDeus @  25.3.2012,  14:53 Найти цитируемый пост)
WHERE id = :id";


Мне кажется, что тут значение должно быть.

С пострег не работаю
PM MAIL   Вверх
iDeus
Дата 7.4.2012, 07:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Deus vult
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 5.6.2008
Где: Vladivostok

Репутация: нет
Всего: нет



Переписал руками весь модуль. Добавляя по одной строке и проверяя. Работает. Таким образом добавил все исходные строки -- работает! Товарищ говорит, что вероятно где-то затесался непечатный символ, либо виной тому платформа разработки, венда же. 

Код

MainForm->Cursor = crSQLWait;
                                            Screen->Cursor = crSQLWait;
                                            this->PSQLQuery_CriterionAdd->Close();
                                            this->PSQLQuery_CriterionAdd->SQL->Clear();
                                            this->PSQLQuery_CriterionAdd->SQL->Text = "UPDATE criterion SET  \
                                                        name = :name,        \
                                                        var = :var,            \
                                                        add_by = :add_by,    \
                                                        when_editing = :when_edit,    \
                                                        qt_subcriterions = :qt_subcrit,    \
                                                        noun = :noun,        \
                                                        norm = :norm,        \
                                                        for_school = :for_s,\
                                                        comment = :comm,    \
                                                        formula = :formula,    \
                                                        var_vector = :varVector,        \
                                                        qt_var = :qt_var,    \
                                                        real_formula = :realFormula,    \
                                                        weight = :weight    \
                                                        WHERE id = :id";
                                            this->PSQLQuery_CriterionAdd->ParamByName("name")->Value = e_name->Text;
                                            this->PSQLQuery_CriterionAdd->ParamByName("var")->Value = e_var->Text;
                                            this->PSQLQuery_CriterionAdd->ParamByName("add_by")->Value = MainForm->UserId;
                                            this->PSQLQuery_CriterionAdd->ParamByName("when_edit")->Value = MainForm->DateTime2Unix(Now());
                                            this->PSQLQuery_CriterionAdd->ParamByName("qt_subcrit")->Value = this->qt_subCriterions;
                                            this->PSQLQuery_CriterionAdd->ParamByName("noun")->Value = this->cb_noun->Text;
                                            this->PSQLQuery_CriterionAdd->ParamByName("norm")->Value = this->E_norm->Text;
                                            this->PSQLQuery_CriterionAdd->ParamByName("for_s")->Value = this->rb_school->Checked;
                                            this->PSQLQuery_CriterionAdd->ParamByName("comm")->Value = m_comment->Text;
                                            this->PSQLQuery_CriterionAdd->ParamByName("formula")->Value = this->formula;
                                            this->PSQLQuery_CriterionAdd->ParamByName("varVector")->Value = this->varVector;
                                            this->PSQLQuery_CriterionAdd->ParamByName("qt_var")->Value = this->qt_var;
                                            this->PSQLQuery_CriterionAdd->ParamByName("realFormula")->Value = this->realFormula;
                                            this->PSQLQuery_CriterionAdd->ParamByName("weight")->Value = e_weight->Text.ToDouble();
                                            this->PSQLQuery_CriterionAdd->ParamByName("id")->Value = this->criterion_id;
                                            this->PSQLQuery_CriterionAdd->ExecSQL();
                                            this->PSQLQuery_CriterionAdd->Close();
                                            Screen->Cursor = crDefault;
                                            MainForm->Cursor = crDefault;



Done
PM MAIL ICQ Skype GTalk   Вверх
_Dimon_
Дата 7.4.2012, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Цитата(iDeus @  7.4.2012,  07:05 Найти цитируемый пост)
Товарищ говорит, что вероятно где-то затесался непечатный символ, либо виной тому платформа разработки, венда же


Возможно, потому-что я хоть не на Postgrе работаю, но такой запрос имхо должен работать.

З.Ы. В моем посте в слове Postgrе последняя буква русская, это так, для размышления, мы не машины, все-таки ))))))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.