![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание процедуры программно [D6, IB6.x]
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].