На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА
Прежде чем задать вопрос, зайдите в раздел FAQ, возможно там уже есть ответ на него.
Если вы хотите вставить код в сообщение, то пожалуйста выделяйте его тегом [code=dfp] ... [/сode].
Для этого используйте кнопку [code=dfp] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Delphi for PHP.
Модераторы: ViktorXP, vicis
  
> Синтаксис SQL запроса с параметром , Синтаксис SQL запроса с параметром
    Подскажите пожалуйста синтаксис SQL запроса с параметром
      http://www.qadram.com/vcl4php/docwiki/index.php/Database_Developer%27s_Guide:Parametrized_Queries
        Спасибо

        Добавлено
        эдж
          И все таки ничего не получается, к сожалению.
          ExpandedWrap disabled
                    $hostel_con = GetDB_module()->Hostel_con;
                    $hostel_con->Connected = False;
                    $hostel_con->Connected = True;
                    $sql = "select * from facultet where facultet_id = '?'";
                    $sql_params = array();
                    $sql_params[] = $_GET["facultet_id"];
             
                    $NewQuery = new IBQuery();
                    $NewQuery->LimitCount = 0;
                    $NewQuery->Database = $hostel_con;
                    $NewQuery->SQL = $sql;
                    $NewQuery->prepare();
                    $NewQuery->Params = $sql_params;
                    $NewQuery->open();


          Выдает, что не знает поля под названием "?".

          И еще вопрос, как юзать именованные параметры?
            Цитата Gluckodrom @
            $sql_params[] = $_GET["facultet_id"];

            проверь в отладчике что $_GET["facultet_id"] имеет значение

            Цитата Gluckodrom @
            $NewQuery->prepare();
            $NewQuery->Params = $sql_params;

            местами поменяй
            я так вообще prepare не использую
            при этом его с большой буквы писать нужно
              Цитата vicis @
              проверь в отладчике что $_GET["facultet_id"] имеет значение

              Там все верно, в значении имеет айдишник.

              Цитата vicis @
              при этом его с большой буквы писать нужно

              Как оказалось, регистр значения не имеет.
                Только что выяснил, что если юзать не IB компоненты для связки c FirebBird, а обычный DataBase c выбранным драйвером ibase, то запрос с параметром, описанным в этом сообщении отрабатывает на ура! Так же и ХП.

                И проблема корявости отображения OpenGrid'а (см.рисунок) при использовании не IB компонентов исчезла

                Просьба перенести в FAQ.

                Вопрос о том, как юзать именованные параметры остается! Может у кого-нить есть идеи.
                Сообщение отредактировано: Gluckodrom -
                  Цитата Gluckodrom @
                  Вопрос о том, как юзать именованные параметры остается! Может у кого-нить есть идеи.

                  В делфи до этог омомента было так
                  ExpandedWrap disabled
                      $sql = "select * from facultet where facultet_id = ':facultet_id'";
                      $sql_params = array("facultet_id"=>$_GET["facultet_id"]);

                  в DelphiForPHP не пробовал.
                    Цитата Gluckodrom @
                    Только что выяснил, что если юзать не IB компоненты для связки c FirebBird, а обычный DataBase c выбранным драйвером ibase, то запрос с параметром, описанным в этом сообщении отрабатывает на ура! Так же и ХП.

                    И проблема корявости отображения OpenGrid'а (см.рисунок) при использовании не IB компонентов исчезла

                    Просьба перенести в FAQ.

                    думаю. что ответ здесь
                    в сообщении установить easyGrid, OpenGrid (сообщение #2562262)
                    там написано что работаеш с firebird
                    т.к. нет такого драйвера
                    то и стандартного способа нет
                    несмотря на всю схожесть СУБД
                    т.е. разработчик ничего не гарантирует
                    а раз так то надо лезть в исходники

                    при этом можно конечно перенести в FAQ
                    но с таким же успехом можно написать
                    что эти компоненты не работают с массой других СУБД <_<
                      Цитата ViktorXP @
                      В делфи до этог омомента было так

                      Согласен, до этого всех клиентов БД на делфи писал, сейчас хочу перевести в веб. Но в D4php так не идет =(

                      Еще вопрос с хранимой процедурой появился. О том что с ней все отрабатывает я поторопился. Ничего не происходит.
                      ExpandedWrap disabled
                                $hostel_con = GetDB_module()->Hostel_con;
                                $hostel_con->Connected = False;
                                $hostel_con->Connected = True;
                                $sql_params = array();
                                $sql_params[] = 6;                         // факультет id
                                $sql_params[] = $this->LabeledEdit2->Text; // наименование
                                $sql_params[] = null;                      // адрес
                                $sql_params[] = null;                      // декан
                                $sql_params[] = null;                      // контакты
                         
                                try
                                {
                                  $NewSP = new StoredProc;
                                  $NewSP->LimitCount = -1;
                                  $NewSP->Database = $hostel_con;
                                  $NewSP->StoredProcName = "UPD_FACULTET";
                                  $NewSP->Params = $sql_params;
                                  $NewSP->Database->BeginTrans();
                                  $NewSP->Prepare();
                                  $NewSP->Execute();
                                  $NewSP->Database->CompleteTrans();
                                  GetDB_module()->Q_facultet->Refresh();
                                }
                                catch (Exception $e)
                                {
                                  $NewSP->Database->CompleteTrans();
                                  GetDB_module()->Q_facultet->Refresh();
                                  echo $e;
                                  ?>
                                  alert('Ошибка ХП!');
                                  <?php
                                }
                        Цитата Gluckodrom @
                        $NewSP->StoredProcName = "UPD_FACULTET";


                        1.попробуй вызвать процедуру или sql запрос без массива параметров
                        сформируй его руками
                        например
                        ExpandedWrap disabled
                          $facultet_id=5;
                          $sql = "select * from facultet where facultet_id = '".$facultet_id."'";
                          или
                          $sql = "select * from facultet where facultet_id = '$facultet_id'";
                          или (
                          $sql = "exec UPD_FACULTET $facultet_id,".$this->LabeledEdit2->Text;
                           
                          или
                          $facultet_id=5;
                          $d_name = 'Вася';
                          $sql = "select * from facultet where (facultet_id = $facultet_id) and (dekan_name like '%$d_name%')";


                        2. значения null могут не подставится корректно
                        опять же попробуй руками подставить

                        3. попробуй пример из поставки DelphiForPhp с хранимыми процедурами
                        он у тебя работает или нет
                          Цитата vicis @
                          сформируй его руками

                          Ручками, само собой разумеется, все работает.
                          Мое виденье, все должно крутиться в БД, а клиент только параметрами кидаться должен.

                          По поводу ХП выяснил, что компонент SroredProc требует чтобы ему возвращали значение. В итоге, в конце процедуры изменения в SQL пришлось дописать безобидный код и все заработало.
                          ExpandedWrap disabled
                            select 1 from rdb$database into :var;
                            suspend;


                          А вот при втором варианте отсюда, никакого возвращаемого значения, как правило, не потребовало!

                          И еще вопрос, нужно ли
                          ExpandedWrap disabled
                            BeginTrans();
                            CompleteTrans();

                          или и без этого все хорошо отрабатывает?
                          Сообщение отредактировано: Gluckodrom -
                            Цитата Gluckodrom @
                            И еще вопрос, нужно ли

                            BeginTrans();
                            CompleteTrans();


                            или и без этого все хорошо отрабатывает?

                            зависит от степени ответственности запроса или нескольких запросов
                            если не страшно для базы и всей задачи в целом что запрос почему то не выполнится
                            то и ставить не обязательно
                            иначе ставь
                            в случае сбоя база откатится на состояние до
                            начала транзакции
                            в принципе это классическая теория про транзакции
                            Сообщение отредактировано: vicis -
                            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0423 ]   [ 14 queries used ]   [ Generated: 18.05.24, 06:59 GMT ]