Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.214.106.184] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Здравствуйте, уважаемые.
Расскажите/подскажите, пожалуйста, как соединить 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\ и запустил. в результате получил следующее: 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 я не нашел). |
Сообщ.
#2
,
|
|
|
Цитата Gluckodrom @ одно пользовательская (embedded) или обычный сервер?2. Установил FB 2.1 (GDS32.dll в папке system32 поменялось, но от D4php я сохранил на всякий случай) попробуй путь указать \\localhost\c:\hostel.fdb |
Сообщ.
#3
,
|
|
|
Цитата ViktorXP @ одно пользовательская (embedded) или обычный сервер? Обычный. Цитата ViktorXP @ попробуй путь указать \\localhost\c:\hostel.fdb та же самая ошибка... |
Сообщ.
#4
,
|
|
|
возьми одно пользовательскую и проверь подключен ли модуль firebord-а в php
|
Сообщ.
#5
,
|
|
|
почитай здесь
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 |
Сообщ.
#6
,
|
|
|
Была эта проблема, но благополучно решил:
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. Будут траблы с кодировкой - пиши |
Сообщ.
#7
,
|
|
|
zeon, спасибо огромное за верную подсказку. Теперь даже самому как-то стыдно, что не додумался так с бубном поплясать (заюзать IB компоненты).
С кодировкой проблем не возникло. База на win1251. На форуме нашел где поставить юникод в свойствах, а также саму форму указал в юникод и все нормально. Теперь встал вопрос о том, как юзать ХП. К примеру кидаю на форму (не создаю в рантайме для того чтобы освоиться легче) компонент IBStoredProc. В нем указываю подключение и наименование ХП. Дальше приведите, пожалуйста кусок кода заполнения параметров и выполнения ХП с подтверждением и откатом транзакции. |
Сообщ.
#8
,
|
|
|
работа с хранимой процедурой здесь
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 |
Сообщ.
#9
,
|
|
|
Цитата 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 тоже смотрел. к сожалению, там описана прямая вставка (это на мой взгляд недопустимо!) в таблицу с транзакцией. Хотелось бы увидеть работу с транзакцией с ХП. |
Сообщ.
#10
,
|
|
|
Цитата Gluckodrom @ там описана прямая вставка (это на мой взгляд недопустимо!) в таблицу с транзакцией почему это недопустимо ? по какой причине ? работа с параметрами здесь хранимая должна работать также http://www.qadram.com/vcl4php/docwiki/index.php/Database_Developer%27s_Guide:Parametrized_Queries |
Сообщ.
#11
,
|
|
|
Цитата vicis @ почему это недопустимо ? по какой причине ? Считаю, то пользователю нельзя такое разрешать. Это мое ИМХО. Спорить не буду. Цитата vicis @ работа с параметрами здесь Спасибо. Разобрался. Но теперь встал вопрос следующий: Что за непонятная ошибка "non-existant property BitBtn->DataSet". Какой еще Датасет у кнопки??? Кто нить может пояснить? 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.' |
Сообщ.
#12
,
|
|
|
что этим ты хотел сказать?
$this->$IBDatabase1->Open(); Добавлено Цитата Gluckodrom @ Ну так написано что свойства DataSet у кнопки не нашло. Application raised an exception class EPropertyNotFound with message 'Trying to access non-existant property BitBtn->DataSet in dbgrids.inc.php, line 363.' |
Сообщ.
#13
,
|
|
|
Цитата ViktorXP @ что этим ты хотел сказать? Открытие подключения. Цитата ViktorXP @ Ну так написано что свойства DataSet у кнопки не нашло. Ну а откуда у кнопки это свойство? Почему вообще подобная ошибка возникает? В коде я нигде не указываю такого. Забыл упомянуть, что сперва нажимаю кнопку 2, потом 1. |
Сообщ.
#14
,
|
|
|
Цитата Gluckodrom @ ок. тогда обрати внимания на второй знак доллара. ты уверен что он там должен быть? я сомневаюсь. )))Открытие подключения. Цитата Gluckodrom @ Посмотри в *.xml.php файле. возможно оно там прописано. Ну а откуда у кнопки это свойство? Почему вообще подобная ошибка возникает? В коде я нигде не указываю такого. Добавлено а зачем ты создаешь динамически компоненты. не проще их бросить визуально? |
Сообщ.
#15
,
|
|
|
Цитата ViktorXP @ ок. тогда обрати внимания на второй знак доллара. ты уверен что он там должен быть? я сомневаюсь. ))) Это провокация! Я этого не делал! Это все подстава Поправил, ничего не изменилось. Подключение так же открывается, запрос отрабатывает. Цитата ViktorXP @ Посмотри в *.xml.php файле. возможно оно там прописано. Глянул. Нет такого там. <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> Ошибка осталась. Цитата ViktorXP @ а зачем ты создаешь динамически компоненты. не проще их бросить визуально? Визуально всегда успеется. Сперва нужно опробовать динамическое создание, чтобы почувствовать все грабли. З.Ы.: DBGrid не создавал динамически |