Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.219.98.26] |
|
Сообщ.
#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 не создавал динамически |
Сообщ.
#16
,
|
|
|
тогда поставь птичку на отладку vcl и потрасируй. (можно попробовать начинать с того места (или выше) где говорит ошибка)
|
Сообщ.
#17
,
|
|
|
Цитата Gluckodrom @ Поправил, ничего не изменилось. не важно изменилось или нет код был неправильный т.е. на одни грабли меньше стало Цитата Gluckodrom @ Визуально всегда успеется. Сперва нужно опробовать динамическое создание, чтобы почувствовать все грабли. ну, почуствовал грабли теперь сделай по нормальному столько лишнего кода это же визуальное программирование зачем опять руки мучать попробуй заглянуть в модуль dbgrids.inc.php, на строку 363 и скорее всего проблема из за этой строки $this->DBGrid1->DataSource = $this->Datasource1; ничего здесь не присваивается смотри в отладчике |
Сообщ.
#18
,
|
|
|
Цитата vicis @ ну, почуствовал грабли теперь сделай по нормальному столько лишнего кода это же визуальное программирование зачем опять руки мучать Верно говоришь! Зачем нужна D4php, если там ручками писать все =) Переделаю. Думаю ошибки не будет. Если все пройдет нормально, сделаю небольшой хелп в один пост, чтобы закинули в FAQ. |
Сообщ.
#19
,
|
|
|
Создал Datamodule, на него кинул IBDatabase1.
На Unit1 кинул LabeleleEdit1. В Unit1 сделал команду File -> Use unit и указал Datamodule. Попытался обратиться к IBDatabase командой DM_form->IBDatabase1->Username = $this->LabeleleEdit1->Text или $DM_form->IBDatabase1->Username = $this->LabeleleEdit1->Text оказалось неверным. Встал вопрос: как закинуть имя пользователя в базу? |
Сообщ.
#20
,
|
|
|
Цитата Gluckodrom @ Встал вопрос: как закинуть имя пользователя в базу? вопрос сформулирован не верно правильный вопрос: почему не присваивается свойство компонента из другого модуля думаю проблема где то здесь: 1. есть ли ссылка на модуль Datamodule в заголовке этого модуля 2. перед присваиванием есть ли код global $DM_form Вообще то все эти вопросы потому, что не посмотрел примеры там всё это решено загляни в C:\Program Files\CodeGear\Delphi for PHP\2.0\vcl\samples\ECommerceExample запусти пример, посмотри как работает а то что тебе нужно здесь: index.php DbModule.php configure.php |
Сообщ.
#21
,
|
|
|
Извините, но ничего не понял в этом примере.
Не могли бы вы на пальцах объяснить, пожалуйста. |
Сообщ.
#22
,
|
|
|
Цитата Gluckodrom @ Извините, но ничего не понял в этом примере. а что сделано что бы понять ? пример запустился ? вот так он должен работать |
Сообщ.
#23
,
|
|
|
Пример не запустился, потому что D4php не смог определить компоненты.
Откуда взялась функция GetDBModule(), в подсказках ее не нашел, в коде тоже. |
Сообщ.
#24
,
|
|
|
Цитата Gluckodrom @ Пример не запустился, потому что D4php не смог определить компоненты а readme.txt кто читать будет... Там написано следующее Цитата --------------------------------------------------------------------- | E-Commerce Example for Delphi For PHP | | | | Author: Jonathan Benedicto | --------------------------------------------------------------------- -- Installation -- This e-commerce example is based around a MySQL database, containing 6 tables. The database structure can be created using the included ecom.sql file. Database connection information is stored in the configure.php file. Customize this file to your particular database setup. You need to install the components located in jbsamplecomponents.zip into the IDE before using this demo. Follow the instructions in the Readme.txt file in that zip for installation instructions. -- Administration -- The default username and password for the administration panel is test/test. The actual values are stored in the admins table. -- Misc -- The "ads" displayed on the store home page are set via the ads table. -- How To Run -- Open index.php and hit the Run button. Товарищ Гугл переводит: Цитата Пример электронной торговля использует базу данных MySQL, содержащую 6 таблиц. Структура базы данных может быть создана с помощью входящего в ecom.sql файла. Информация для одключения к базе данных хранится в файле configure.php. Настройте этот файл для вашей индивидуальной установки базы данных. Вам необходимо установить компоненты находятся в jbsamplecomponents.zip в IDE, прежде чем использовать эту демонстрацию. Следуйте инструкциям в файле Readme.txt в Zip, чтобы осуществить установку. - Администрирование -- Имя пользователя и пароль по умолчанию на панели администрирования test/test. Фактические значения хранятся в таблице admins. - Разное -- "Рекламные объявления" отображаются на главной странице магазина устанавливаются с помощью таблицы объявлений. - Как запускать -- Открыть index.php и нажмите кнопку "Выполнить". Цитата Gluckodrom @ Откуда взялась функция GetDBModule(), в подсказках ее не нашел, в коде тоже. а поиском по содержимому файлов в директории, я так понимаю, пользоватся влом функция GetDBModule() находится в модуле DbModule.php и содержит следующее function GetDBModule() { global $DBModule; return $DBModule; } по сути глобальная функциия для ссылки на этот модуль достаточно удобно чем каждый раз прописывать перед доступом к модулю global $DBModule; |
Сообщ.
#25
,
|
|
|
не серчайте! на работе сидел в запарке!
а по идее, спасибо огромное! помог! только спокойнее бы! |
Сообщ.
#26
,
|
|
|
да куда уж спокойнее
спокойнее это когда тебе не отвечают |