Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.153.38] |
|
Сообщ.
#1
,
|
|
|
Всем привет.
Столкнулся с такой проблемой - нужно сделать 2 разных запроса из двух разных баз на одной форме. Если подключать require_once("DB_Trans1.php"); require_once("DB_Trans2.php"); |
Сообщ.
#2
,
|
|
|
мало информации
где не видна выборка ? что там за компоненты для отображения выборки и т.п... |
Сообщ.
#3
,
|
|
|
Значит имеем 2 файла data module.
В них делаем поотдельности подключение к базе 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 и запросы к бд в форме подключаем эти файлы require_once("DB_Trans1.php"); require_once("DB_Trans2.php"); делаем из формы вызов функции global $Trans_DB1; $Trans_DB1->SelectPositions1(1); // вызов проходит global $Trans_DB2; $Trans_DB2->SelectPositions2(1); // вызов не проходит - пишет что таких таблиц нет в БД Примерно так. Примеры приведены вымышленные, просто показал схему |
Сообщ.
#4
,
|
|
|
Цитата Eremeev @ Примеры приведены вымышленные, просто показал схему на вымышленных примерах получаешь вымышленный ответ Цитата Eremeev @ require_once("DB_Trans1.php"); require_once("DB_Trans2.php"); это действие объединяет твои файлы по сути в один сответственно, что такое $this при этом ? это вопрос в частности, что такое $this->PositionsQuery при объединении трёх файлов в один не должно быть одинаковых имён иначе или будет конфликт или выполнится первый найденный в тексте ответ в исходном коде, но по этому коду не видно скорее всего там проблема, что не $this->PositionsQuery а нужно $Trans_DB2->PositionsQuery |
Сообщ.
#5
,
|
|
|
проверил
если делать так <?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__); ?> то всё работает 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; } |
Сообщ.
#6
,
|
|
|
Прикреплённый файлTest.zip (3,61 Кбайт, скачиваний: 154)
>> проверил
>> если делать так >> то всё работает А вот и нет. Не осилил твой пример. >> на вымышленных примерах получаешь вымышленный ответ Прикладываю реальный пример, там нужно просто создать базу t1 c таблицей t1 и базу t2 c таблицей t2 и запустить на выполнение. У меня стабильная ошибка что одной таблицы в базе нет Table 't2.t1' doesn't exist. |
Сообщ.
#7
,
|
|
|
Цитата 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 @ это действие объединяет твои файлы по сути в один |
Сообщ.
#8
,
|
|
|
Цитата и тем не менее заменаа нужно было осилить и посмотреть разницу между моим и своим примером одинаковых переменных на $DbHost2 = $DbName2 = $DbUser2 = $DbPass2 = ничего не дала, ошибка та же. |
Сообщ.
#9
,
|
|
|
и тем не менее
или в базе нет таблицы с таким именем или ты в другой базе других вариантов нет посмотри в отладчике что там куда присваивается |
Сообщ.
#10
,
|
|
|
Цитата и тем не менее или в базе нет таблицы с таким именем или ты в другой базе других вариантов нет если поочередно закоментить 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"); - ошибка, такой таблицы в базе нет. |
Сообщ.
#11
,
|
|
|
отладчик в руки возьми
|
Сообщ.
#12
,
|
|
|
Цитата Eremeev @ ничего не дала, ошибка та же. заменил везде? попробуй после каждого вызова (или перед) $this->DatabaseX->Connected = true; вывести Host/DatabaseName/UserName/UserPassword например с помощью банального echo |