Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание процедуры программно [D6, IB6.x]


Страницы:   1 2

yuray ©   (2004-12-06 12:57:00) 

Уважаемые мастера! Как программно создать хранимую процедуру?
При использовании TQuery, ругается на строку типа "into :parametr".
Если создавать простенькую процедуру компонентом TQuery, например:
       create procedure myproc returns (a integer)
as
begin
  a=5;
end
тогда все работает.


ЮЮ   (2004-12-08 06:47:00) [1]

Итак, анализ кода показал, что БДЕ исполняет не то, что записано в TQuery.SQL.Text, а то, что - в TQuery.Text, т.е. текст запроса после парсинга (cм.Неlp TQuery.Text)

Но это не баг, а фича. :)


Rule   (2004-12-07 19:29:00) [2]

yuray   (06.12.04 12:57)
Уважаемые мастера! Как программно создать хранимую процедуру?

вот так звучал вопрос и я вроде не него ответил , чем тебе не нравится ИБСкрипт


yuray   (2004-12-07 18:14:00) [3]

> Rule
Я не задаю вопрос "Как создать процедуру?" или "Как проще всего создать процедуру?"


yuray   (2004-12-07 18:09:00) [4]

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Query1.Params.Clear;
 Query1.ParamCheck:=False;
 Query1.ExecSQL
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Query1.ParamCheck:=False;
 Query1.Params.Clear;
 Query1.ExecSQL
end;

Не проходит... Таже ошибка.


Johnmen   (2004-12-07 18:03:00) [5]

А где ParamCheck:=False ?


yuray   (2004-12-07 18:01:00) [6]

Разумеется, кнопку давлю в рантайме


yuray   (2004-12-07 17:58:00) [7]

я добавил на форму кнопку

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Query1.Params.Clear;
 Query1.ExecSQL
end;

Таже ошибка


Johnmen   (2004-12-07 17:56:00) [8]

>Query.params.clear не проходит

С чего ты взял ?


Rule   (2004-12-07 17:46:00) [9]

чегото все так сложно, просто засунь свой запрос в IBScript да и все, там хоть саму базу создавай всеравно


yuray   (2004-12-07 17:45:00) [10]

Как очистить коллекцию параметров в рантайме?
Query.params.clear не проходит


Johnmen   (2004-12-07 17:33:00) [11]

Это НЕ ПРОБЛЕМА. Просто ты забыл очистить коллекцию параметров. Если мы говорим о рантайме.
Но вот в дизайне такое поведение совершенно нормально, что и прописано в исходниках...:)))


yuray   (2004-12-07 17:25:00) [12]

А где проблема? (Только не надо еще раз повторять, что проблема во мне. Я и так с этим полностью согласен.)
Еще раз излогаю вопрос:
1. Создаю пустой проект.
2. Кидаю на форму TDatabase и TQuery. Прописываю все необходимые параметры.
3. Проверяю коннект к базе. Проходит.
4. В TQuery ставлю ParamCheck=false.
5. В SQL TQuery кидаю
 CREATE PROCEDURE PROCEDURES
 RETURNS (
    NAME VARCHAR(25))
 AS
 BEGIN
   FOR select rdb$procedure_name from rdb$procedures
   into :name
   DO
   BEGIN
     suspend;
   END
 end
6. Делаю TQuery.Active=true  и возникает ошибка  
General SQL error. Token unknown - line 7, char 5 ?.
Перекинул все в IBQuery - работает.
Где ошибка???


yuray   (2004-12-07 17:25:00) [13]

А где проблема? (Только не надо еще раз повторять, что проблема во мне. Я и так с этим полностью согласен.)
Еще раз излогаю вопрос:
1. Создаю пустой проект.
2. Кидаю на форму TDatabase и TQuery. Прописываю все необходимые параметры.
3. Проверяю коннект к базе. Проходит.
4. В TQuery ставлю ParamCheck=false.
5. В SQL TQuery кидаю
 CREATE PROCEDURE PROCEDURES
 RETURNS (
    NAME VARCHAR(25))
 AS
 BEGIN
   FOR select rdb$procedure_name from rdb$procedures
   into :name
   DO
   BEGIN
     suspend;
   END
 end
6. Делаю TQuery.Active=true  и возникает ошибка  
General SQL error. Token unknown - line 7, char 5 ?.
Перекинул все в IBQuery - работает.
Где ошибка???


Johnmen   (2004-12-07 17:05:00) [14]

А нет никакой проблемы с TQuery в разрезе поставленного вопроса...


yuray   (2004-12-07 16:52:00) [15]

Может с камнем я и зря... Но нельзя утверждать, что в "том огороде"
мало камней. Это уже другая тема, которая на этом форуме подымалась не раз.

Как это сделать с помощью TQuery?

Я думаю, есть много хороших программ написанных на D2, D3, которые переписывать из-за подобной проблемы нет смысла.


Johnmen   (2004-12-07 16:36:00) [16]

>PS. Это еще один камень в огород BDE.

Не-а. Это ещё один камень в того, кто плохо изучил используемый инструмент.
И БДЕ здесь совершенно непричём...


yuray   (2004-12-07 16:13:00) [17]

Кардинальное решение - это хорошо. Работает нормально когда отключил ParamCheck и ручками почистил Params (независимо от того, когда отключаешь ParamCheck, в Params IBQuery кидает все символы в запросе перед которыми стоит ":").

Всем спасибо.

PS. Это еще один камень в огород BDE.


ЮЮ   (2004-12-07 13:19:00) [18]

Хотя в хелпе о TQury.ParamCheck написано как раз то, что и должно быть :(


Zacho   (2004-12-07 13:10:00) [19]

Сейчас попробовал - SQL Monitor показал, что вместо :name BDE передаёт в запросе ?
Как с этим бороться - не знаю, давно уже не пользуюсь BDE.
Кардинальное решение - выкинь BDE и переходи на IBX, FIBPlus и т.д. и т.п.


ЮЮ   (2004-12-07 13:08:00) [20]

> Если уж упрощать задачу, то хотябы взять компоненты с InterBase закладки, а не BDE :) В IBQuery достаточно отключить CheckParams, как и сказал в [1].


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо