Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.131.72] |
|
Сообщ.
#1
,
|
|
|
Всем вечерок!
Недавно пришлось перейти на Rad PHP (Embarcadero® RadPHP™ XE2 Version 4.0.0.1547 ). Для проекта необходима работа с БД MySQL. Со всеми компонентами разобрался, но возникает непонятная ошибка: Application raised an exception class EDatabaseError with message 'Missing query to execute'. Проект состоит из: DBGrid, DataBase,DataSource,Query. Все компоненты настроил правильно, т.к. если ввести SQL -запрос в св-во SQL компонента Query, то сервер возвращает ответ. Ошибка возникает, если это делать программным путём: function Button1Click($sender, $params){ $query = "select * from books"; $this->Query1->close(); $this->Query1->SQL = $query; $this->Query1->open(); } Что предпринимал: поменял MySQL сервер с 5.5 на 5.1.Ничего не изменилось. Знающие люди, в чём проблема? |
Сообщ.
#2
,
|
|
|
Database1->Debug = True;
|
Сообщ.
#3
,
|
|
|
Ошибка всё равно осталась. Пишет тоже самое
|
Сообщ.
#4
,
|
|
|
конечно осталась
но показать должно - что передаётся на сервер текст запроса... Добавлено запускаеш из среды ? |
Сообщ.
#5
,
|
|
|
Спасибо, что меня натолкнули на мысль. Вродеб разобрался, но был очень удивлён (:
Я так понял: св-во SQL компонента Query должно быть изначально заполнено при первом запуске. Т.е. нельзя именно уже во время выполнения сформировать самый первый запрос. Самый первый запрос задаётся по дефолту в средеПравильно? И ещё тогда сразу такой вопрос: Можно ли тогда каким либо образом отправить запрос CREATE TABLE или CREATE DATABASE , и как это сделать, если компонент Query изначально уже должен быть привязан к существующей БД и таблице? |
Сообщ.
#6
,
|
|
|
Цитата NE_KTO_INOI @ Я так понял: св-во SQL компонента Query должно быть изначально заполнено при первом запуске. Т.е. нельзя именно уже во время выполнения сформировать самый первый запрос нет не правильно. всё там можно и без первого запроса просто непонятно в каком месте ошибка возникает возможно отладчиком стоило бы строку найти моё предположение такое (из опыта с Delphi) если до первого запроса датасет не был открыт, то команда $this->Query1->close() должна выдать ошибку в этом случае правильнее написать $this->Query1->active = False |
Сообщ.
#7
,
|
|
|
Ошибка возникает как я понял в файле : |_Callstack #15 File: C:\Program Files (x86)\Embarcadero\RadPHP\4.0\rpcl\dbtables.inc.php Line: 591
Посмотрел этот файл. Там такой код(часть): function InternalOpen() { if (($this->ControlState & csDesigning)!=csDesigning) { $query=$this->buildQuery(); if (trim($query)=='') DatabaseError(_("Missing query to execute")); $this->CheckDatabase(); ... Т.е. здесь видимо проверяется, пустой ли запрос. Ясное дело ,что если запрос формировать программно, то он вначале пустой, и поэтому возникает ошибка. Правильно, или Вы другое имели ввиду? Добавлено Так. Хорошая новость. Проблема решилась!Ошибка была вот в чём. Изначально св-во Query->Active стояло в true . Надо в false поставить, и всё шикарно будет(: Вы были правы.Спасибо! Только на 2-ой вопрос нужен ещё ответ: Можно ли тогда каким либо образом отправить запрос CREATE TABLE или CREATE DATABASE , и как это сделать, если компонент Query изначально уже должен быть привязан к существующей БД и таблице? |
Сообщ.
#8
,
|
|
|
Цитата NE_KTO_INOI @ Можно ли тогда каким либо образом отправить запрос CREATE TABLE или CREATE DATABASE , и как это сделать, если компонент Query изначально уже должен быть привязан к существующей БД и таблице? для таблиц так можно, а для базы не пробовал $this->Database1->execute('CREATE TABLE .... здесь вообще без Query обходиться можно например: function SetSysParam($p_Name,$p_Value) { $query ='UPDATE param_sys SET p_value=? WHERE (p_name=?)'; $xarray=array(); $xarray[]=$p_Value; $xarray[]=$p_Name; $this->Database1->execute($query,$xarray); } А для создания базы как минимум права нужны. Вариантов для PHP в интернете описано много: http://lphp.ru/article/280.html http://www.html.by/threads/14218-Sozdanie-BD-cherez-php http://www.google.com.ua/search?hl=ru&q=%D...&rlz=1I7ADFA_ru Хотя задача динамического создания базы мне кажется непонятной. Это задача администратора, а не пользовательской программы, разьве что если инструмент администрирования делать, тогда да... |
Сообщ.
#9
,
|
|
|
Цитата NE_KTO_INOI @ Изначально св-во Query->Active стояло в true изначально это свойство в False это потом программист его поменял в true |
Сообщ.
#10
,
|
|
|
Цитата если до первого запроса датасет не был открыт, то команда $this->Query1->close() должна выдать ошибку в этом случае правильнее написать $this->Query1->active = False Ошибку не дает, сам по неграмотности всегда пишу $this->Query1->close() хотя полностью согласен что так правильнее $this->Query1->active = False Плохая привычка |