На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА
Прежде чем задать вопрос, зайдите в раздел FAQ, возможно там уже есть ответ на него.
Если вы хотите вставить код в сообщение, то пожалуйста выделяйте его тегом [code=dfp] ... [/сode].
Для этого используйте кнопку [code=dfp] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Delphi for PHP.
Модераторы: ViktorXP, vicis
  
> Как правильно сделать запросы к 2 разным базам данных
    Всем привет.
    Столкнулся с такой проблемой - нужно сделать 2 разных запроса из двух разных баз на одной форме.
    Если подключать
    ExpandedWrap disabled
      require_once("DB_Trans1.php");
      require_once("DB_Trans2.php");
    то выборка идет только из одной базы, вторая не видна либо пишет что такой таблицы в базе нет.
    Сообщение отредактировано: Eremeev -
      мало информации
      где не видна выборка ?
      что там за компоненты для отображения выборки и т.п...
        Значит имеем 2 файла data module.
        В них делаем поотдельности подключение к базе
        ExpandedWrap disabled
                parent::loaded();
           
                $this->Trans_Database1->Host = $DbHost;
                $this->Trans_Database1->DatabaseName = $DbName;
                $this->Trans_Database1->UserName = $DbUser;
                $this->Trans_Database1->UserPassword = $DbPass;
                $this->Trans_Database1->Connected = true;
           
                $this->Trans_Database2->Host = $DbHost;
                $this->Trans_Database2->DatabaseName = $DbName;
                $this->Trans_Database2->UserName = $DbUser;
                $this->Trans_Database2->UserPassword = $DbPass;
                $this->Trans_Database2->Connected = true;
           
          и например функция
             function SelectPositions1($id_f)
             {
                $params[] = $id_f;
                $this->PositionsQuery->close();
                $this->PositionsQuery->SQL = "
                    SELECT id_p, position FROM ws_position_app WHERE id_f = ? OR id_f = 1
                  ";
                $this->PositionsQuery->Prepare();
                $this->PositionsQuery->Params = $params;
                $this->PositionsQuery->open();
             }

        там же находятся компоненты DataSoure и Query и запросы к бд

        в форме подключаем эти файлы
        ExpandedWrap disabled
          require_once("DB_Trans1.php");
          require_once("DB_Trans2.php");
          делаем из формы вызов функции
                    global $Trans_DB1;
                      $Trans_DB1->SelectPositions1(1); // вызов проходит
           
                    global $Trans_DB2;
                      $Trans_DB2->SelectPositions2(1); // вызов не проходит - пишет что таких таблиц нет в БД

        Примерно так. Примеры приведены вымышленные, просто показал схему
          Цитата Eremeev @
          Примеры приведены вымышленные, просто показал схему

          на вымышленных примерах получаешь вымышленный ответ

          Цитата Eremeev @
          require_once("DB_Trans1.php");
          require_once("DB_Trans2.php");


          это действие объединяет твои файлы по сути в один
          сответственно, что такое $this при этом ?
          это вопрос
          в частности, что такое $this->PositionsQuery
          при объединении трёх файлов в один не должно быть одинаковых имён
          иначе или будет конфликт или выполнится первый найденный в тексте
          ответ в исходном коде, но по этому коду не видно

          скорее всего там проблема, что не
          $this->PositionsQuery
          а нужно
          $Trans_DB2->PositionsQuery
            проверил
            если делать так
            ExpandedWrap disabled
              <?php
              require_once("vcl/vcl.inc.php");
              //Includes
              use_unit("db.inc.php");
              use_unit("dbtables.inc.php");
              use_unit("forms.inc.php");
              use_unit("extctrls.inc.php");
              use_unit("stdctrls.inc.php");
               
              //Class definition
              class DB_Trans2 extends DataModule
              {
                     public $PositionsQuery = null;
                     public $dsdbo_Analiz_state1 = null;
                     public $dbDMExpert1 = null;
               
                function SelectPositions1($id_f)
                {
                   $params[] = $id_f;
                   $this->PositionsQuery->close();
                   $this->PositionsQuery->SQL = " SELECT anst_id, anst_name FROM dbo.Analiz_state WHERE anst_id = ? ";
                   $this->PositionsQuery->Prepare();
                   $this->PositionsQuery->Params = $params;
                   $this->PositionsQuery->open();
                }
              }
               
              global $application;
               
              global $DB_Trans2;
               
              //Creates the form
              $DB_Trans2=new DB_Trans2($application);
               
              //Read from resource file
              $DB_Trans2->loadResource(__FILE__);
               
              ?>

            то всё работает

            ExpandedWrap disabled
              require_once("DB_Trans1.php");
              require_once("DB_Trans2.php");
              ....
               
                     function BitBtn4Click($sender, $params)
                     {
                     global $DB_Trans1;
                     $DB_Trans1->SelectPositions1(4);
                     $this->dbgrid->DataSource=$DB_Trans1->dsadmin1;  // здесь к гриду на главной форме подключим
               
               
                     }
               
                     function BitBtn3Click($sender, $params)
                     {
                     global $DB_Trans2;
                     $DB_Trans2->SelectPositions1(4);
                     $this->dbgrid->DataSource=$DB_Trans2->dsdbo_Analiz_state1;
               
               
               
                     }
              Прикреплённый файлПрикреплённый файлTest.zip (3,61 Кбайт, скачиваний: 154) >> проверил
              >> если делать так
              >> то всё работает
              А вот и нет. Не осилил твой пример.

              >> на вымышленных примерах получаешь вымышленный ответ

              Прикладываю реальный пример,
              там нужно просто создать
              базу t1 c таблицей t1 и
              базу t2 c таблицей t2 и запустить на выполнение.
              У меня стабильная ошибка что одной таблицы в базе нет Table 't2.t1' doesn't exist.
                Цитата Eremeev @
                Не осилил твой пример.

                а нужно было осилить и посмотреть разницу между моим и своим примером

                разница в том, что
                подключаешь в главном юните
                require_once("DB_1.php");
                require_once("DB_2.php");
                а они в свою очередь
                подключают
                require_once("Conf/Conf_1.php");
                и
                require_once("Conf/Conf_2.php");

                в каждом из них
                одинаковые переменные
                $DbHost =
                $DbName =
                $DbUser =
                $DbPass =

                ну вот они и переопределяются
                т.е. нет у тебя двух значений для них
                а только из Conf_2.php

                в принципе, я писал тебе об этом
                Цитата vicis @
                это действие объединяет твои файлы по сути в один
                  Цитата
                  а нужно было осилить и посмотреть разницу между моим и своим примером
                  и тем не менее замена
                  ExpandedWrap disabled
                    одинаковых переменных на
                    $DbHost2 =
                    $DbName2 =
                    $DbUser2 =
                    $DbPass2 =

                  ничего не дала, ошибка та же.
                    и тем не менее
                    или в базе нет таблицы с таким именем
                    или ты в другой базе
                    других вариантов нет

                    посмотри в отладчике что там куда присваивается
                      Цитата
                      и тем не менее
                      или в базе нет таблицы с таким именем
                      или ты в другой базе
                      других вариантов нет

                      если поочередно закоментить

                      require_once("DB_1.php");
                      // require_once("DB_2.php");

                      то выборка из базы и таблицы т1 идет.

                      // require_once("DB_1.php");
                      require_once("DB_2.php");

                      и так выборка из таблицы т2 тоже идет, что означает что таблицы в базах присутствуют.

                      а вот так

                      require_once("DB_1.php");
                      require_once("DB_2.php");

                      - ошибка, такой таблицы в базе нет.
                        отладчик в руки возьми
                          Цитата Eremeev @
                          ничего не дала, ошибка та же.

                          заменил везде?
                          попробуй после каждого вызова (или перед)
                          $this->DatabaseX->Connected = true;
                          вывести Host/DatabaseName/UserName/UserPassword
                          например с помощью банального echo
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0342 ]   [ 17 queries used ]   [ Generated: 20.04.24, 04:17 GMT ]