На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА
Прежде чем задать вопрос, зайдите в раздел FAQ, возможно там уже есть ответ на него.
Если вы хотите вставить код в сообщение, то пожалуйста выделяйте его тегом [code=dfp] ... [/сode].
Для этого используйте кнопку [code=dfp] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Delphi for PHP.
Модераторы: ViktorXP, vicis
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Firebird + D4php , Подключение, выполнение запросов, ХП, вывод данных Firebird в D4php
    Здравствуйте, уважаемые.

    Расскажите/подскажите, пожалуйста, как соединить Firebird 2.1 с D4php 2.1.

    Я делал следующее:
    1. Установил D4php 2.1
    2. Установил FB 2.1 (GDS32.dll в папке system32 поменялось, но от D4php я сохранил на всякий случай)
    3. Положил на форму компонент TDatabase, выбрал имя драйвера Firebird, прописал хост 127.0.0.1, путь к базе c:\hostel.fdb, пользователя, пароль, словарь (диалект как я понял) 3.
    4. установил connected в true, сохранил проект в c:\sys\ и запустил.

    в результате получил следующее:
    ExpandedWrap disabled
      Warning: ibase_connect() [function.ibase-connect]: Unable to complete network request to host "localhost". Failed to locate host machine. Undefined service gds_db/tcp. in C:\Program Files\CodeGear\Delphi for PHP\2.0\vcl\adodb\drivers\adodb-ibase.inc.php on line 74


    Пробовал GDS32.dll от D4php положить в system32 - результат такой же.
    Пробовал GDS32.dll от FB положить в system32, а так же во все места, где нашел одноименную библиотеку в каталоге C:\Program Files\CodeGear\Delphi for PHP\2.0\ - результат такой же.

    Предложение: давайте "разжуем" этот случай и перенесем в FAQ. (такого в FAQ я не нашел).
      Цитата Gluckodrom @
      2. Установил FB 2.1 (GDS32.dll в папке system32 поменялось, но от D4php я сохранил на всякий случай)
      одно пользовательская (embedded) или обычный сервер?

      попробуй путь указать \\localhost\c:\hostel.fdb
        Цитата ViktorXP @
        одно пользовательская (embedded) или обычный сервер?

        Обычный.

        Цитата ViktorXP @
        попробуй путь указать \\localhost\c:\hostel.fdb


        та же самая ошибка...
        Сообщение отредактировано: Gluckodrom -
          возьми одно пользовательскую и проверь подключен ли модуль firebord-а в php
            почитай здесь
            http://forums.delphi-php.net/tutorials/3656-how-connect-firebird-db-server-delphi-php.html
            я не проверял, но по опыту использования firebird и interbase в Delphi
            думаю, что там описано решение

            Добавлено
            http://www.qadram.com/vcl4php/docwiki/index.php/Database_Developer%27s_Guide:Firebird
              Была эта проблема, но благополучно решил:
              1.Снести все старые FireBird, InterBase2007, если были установлены.
              2.Проверь диски на наличие fbclient.dll , gds32.dll
              Обрати внимание на 4 экземпляра gds32.dll, размером 416к, находящиеся в подкаталогах в каталога DelphiForPHP -
              это gds32.dll от InterBase2007. Удали их или спрячь подальше - дело вкуса.
              3. Устанавливай FB2.1, отметь при установке "Создать GDS32.dll", FB2.1 создаст gds32.dll, размером 440к, найди этот файл
              и помести туда, где ранее были dll'ки на 416к.
              4. Запускай DelphiForPHP, выбирай компоненты IBX, далее думаю, сам знаешь, что делать.

              P.S. Будут траблы с кодировкой - пиши ;)
                zeon, спасибо огромное за верную подсказку. Теперь даже самому как-то стыдно, что не додумался так с бубном поплясать (заюзать IB компоненты).

                С кодировкой проблем не возникло. База на win1251. На форуме нашел где поставить юникод в свойствах, а также саму форму указал в юникод и все нормально.

                Теперь встал вопрос о том, как юзать ХП. К примеру кидаю на форму (не создаю в рантайме для того чтобы освоиться легче) компонент IBStoredProc. В нем указываю подключение и наименование ХП. Дальше приведите, пожалуйста кусок кода заполнения параметров и выполнения ХП с подтверждением и откатом транзакции.
                  работа с хранимой процедурой здесь
                  C:\Program Files\CodeGear\Delphi for PHP\2.0\vcl\samples\IBX\storedproc
                  работа с транзакциями здесь
                  C:\Program Files\CodeGear\Delphi for PHP\2.0\vcl\samples\Data Aware\Transactions
                    Цитата vicis @
                    работа с хранимой процедурой здесь
                    C:\Program Files\CodeGear\Delphi for PHP\2.0\vcl\samples\IBX\storedproc

                    там смотрел. к сожалению, там без параметров.

                    Цитата vicis @
                    работа с транзакциями здесь
                    C:\Program Files\CodeGear\Delphi for PHP\2.0\vcl\samples\Data Aware\Transactions

                    тоже смотрел. к сожалению, там описана прямая вставка (это на мой взгляд недопустимо!) в таблицу с транзакцией.
                    Хотелось бы увидеть работу с транзакцией с ХП.
                      Цитата Gluckodrom @
                      там описана прямая вставка (это на мой взгляд недопустимо!) в таблицу с транзакцией

                      почему это недопустимо ?
                      по какой причине ?

                      работа с параметрами здесь
                      хранимая должна работать также
                      http://www.qadram.com/vcl4php/docwiki/index.php/Database_Developer%27s_Guide:Parametrized_Queries
                        Цитата vicis @
                        почему это недопустимо ?
                        по какой причине ?

                        Считаю, то пользователю нельзя такое разрешать. Это мое ИМХО. Спорить не буду.

                        Цитата vicis @
                        работа с параметрами здесь

                        Спасибо. Разобрался.

                        Но теперь встал вопрос следующий:
                        Что за непонятная ошибка "non-existant property BitBtn->DataSet". Какой еще Датасет у кнопки??? Кто нить может пояснить?

                        ExpandedWrap disabled
                          class Unit1 extends Page
                          {
                                 public $BitBtn2        = null;
                                 public $LabeledEdit1   = null;
                                 public $BitBtn1        = null;
                                 public $DBGrid1        = null;
                                 public $IBDatabase1    = null;
                                 public $IBStoredProc1  = null;
                                 public $IBQuery1       = null;
                                 public $Datasource1    = null;
                           
                                 public $host_name = '127.0.0.1';
                                 public $db_name   = 'C:\sys\HOSTEL.FDB';
                                 public $user_name = 'sysdba';
                                 public $user_pwd  = 'masterkey';
                           
                                 function BitBtn1Click($sender, $params)
                                 {
                                  if ($this->LabeledEdit1->Text != '')
                                  {
                                    $this->IBStoredProc1 = new IBStoredProc($this);
                                    $this->IBStoredProc1->Database = $this->IBDatabase1;
                                    //$IBStoredProc1->StoredProcName = 'INS_FACULTET';
                                  }
                                  else
                                  {
                                    ?><script>alert('Не заполнено поле!');</script><?php
                                  }
                                 }
                           
                                 function BitBtn2Click($sender, $params)
                                 {
                                  // БД
                                  $this->IBDatabase1 = new IBDatabase($this);
                                  $this->IBDatabase1->Charset       = 'utf-8';
                                  $this->IBDatabase1->Host          = $this->host_name;
                                  $this->IBDatabase1->DatabaseName  = $this->db_name;
                                  $this->IBDatabase1->UserName      = $this->user_name;
                                  $this->IBDatabase1->UserPassword  = $this->user_pwd;
                                  try
                                  {
                                    $this->$IBDatabase1->Open();
                                    echo 'Есть контакт!';
                                  }
                                  catch (Exception $e)
                                  {
                                    echo $e->getMessage();
                                  }
                           
                                  // Запрос
                                  $this->IBQuery1 = new IBQuery($this);
                                  $this->IBQuery1->Database = $this->IBDatabase1;
                                  $SQL = 'select * from facultet';
                                  $this->IBQuery1->setSQL($SQL);
                                  $this->IBQuery1->LimitCount = 40;
                                  try
                                  {
                                    $this->IBQuery1->Open();
                                    echo 'Есть запрос!';
                                  }
                                  catch (Exception $e)
                                  {
                                    echo $e->getMessage();
                                  }
                           
                                  // соединение и вывод
                                  $this->Datasource1 = new Datasource($this);
                                  $this->Datasource1->DataSet = $this->IBQuery1;
                                  $this->DBGrid1->DataSource = $this->Datasource1;
                                 }
                          }
                           
                           
                          Application raised an exception class EPropertyNotFound with message 'Trying to access non-existant property BitBtn->DataSet in dbgrids.inc.php, line 363.'
                        Сообщение отредактировано: Gluckodrom -
                          что этим ты хотел сказать?
                          ExpandedWrap disabled
                            $this->$IBDatabase1->Open();


                          Добавлено
                          Цитата Gluckodrom @
                          Application raised an exception class EPropertyNotFound with message 'Trying to access non-existant property BitBtn->DataSet in dbgrids.inc.php, line 363.'
                          Ну так написано что свойства DataSet у кнопки не нашло.
                            Цитата ViktorXP @
                            что этим ты хотел сказать?

                            Открытие подключения.

                            Цитата ViktorXP @
                            Ну так написано что свойства DataSet у кнопки не нашло.

                            Ну а откуда у кнопки это свойство? Почему вообще подобная ошибка возникает? В коде я нигде не указываю такого.

                            Забыл упомянуть, что сперва нажимаю кнопку 2, потом 1.
                            Сообщение отредактировано: Gluckodrom -
                              Цитата Gluckodrom @
                              Открытие подключения.
                              ок. тогда обрати внимания на второй знак доллара. ты уверен что он там должен быть? я сомневаюсь. )))
                              Цитата Gluckodrom @
                              Ну а откуда у кнопки это свойство? Почему вообще подобная ошибка возникает? В коде я нигде не указываю такого.
                              Посмотри в *.xml.php файле. возможно оно там прописано.

                              Добавлено
                              а зачем ты создаешь динамически компоненты. не проще их бросить визуально?
                                Цитата ViktorXP @
                                ок. тогда обрати внимания на второй знак доллара. ты уверен что он там должен быть? я сомневаюсь. )))

                                Это провокация! :D Я этого не делал! Это все подстава :lol:
                                Поправил, ничего не изменилось. Подключение так же открывается, запрос отрабатывает.

                                Цитата ViktorXP @
                                Посмотри в *.xml.php файле. возможно оно там прописано.

                                Глянул. Нет такого там.
                                ExpandedWrap disabled
                                    <object class="BitBtn" name="BitBtn2" >
                                      <property name="Caption"><![CDATA[Проверка связи]]></property>
                                      <property name="Height">25</property>
                                      <property name="Left">368</property>
                                      <property name="Name">BitBtn2</property>
                                      <property name="Top">265</property>
                                      <property name="Width">107</property>
                                      <property name="OnClick">BitBtn2Click</property>
                                    </object>

                                Ошибка осталась. :wall:

                                Цитата ViktorXP @
                                а зачем ты создаешь динамически компоненты. не проще их бросить визуально?

                                Визуально всегда успеется. Сперва нужно опробовать динамическое создание, чтобы почувствовать все грабли.
                                З.Ы.: DBGrid не создавал динамически ;)
                                Сообщение отредактировано: Gluckodrom -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0469 ]   [ 15 queries used ]   [ Generated: 29.03.24, 07:42 GMT ]