Форум: "Базы";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Внизпроблема с SET TERM Найти похожие ветки
← →
Klaus B. (2006-06-13 19:57) [0]Добрый день!
Имею проблему с созданием хранимой процедуры
работаю с Delphi 5.0 и InterBase 7.1
выкидывается ошибка при прохождении строки
SET TERM ^;
все перепробовал
ничего не получается
← →
Klaus B. (2006-06-13 20:20) [1]Доподлино код выглядит так
ibtransaction1.active := true;
ibquery1.Close;
ibquery1.sql.Clear;
ibquery1.SQL.add("SET TERM ## ;");
ibquery1.SQL.add("CREATE PROCEDURE PRICE(P_INC INTEGER)");
ibquery1.SQL.add("AS BEGIN");
ibquery1.SQL.add("PR_INC := 1##");
ibquery1.SQL.add("SUSPEND##"); }
ibquery1.SQL.add("END##");
ibquery1.SQL.add("SET TERM ; ##");
ibquery1.execSQL;
ibtransaction1.commit;
← →
starling13 © (2006-06-13 21:08) [2]
ibquery1.SQL.add("SET TERM ## ;");
ibquery1.SQL.add("CREATE PROCEDURE PRICE(P_INC INTEGER)");
ibquery1.SQL.add("AS BEGIN");
ibquery1.SQL.add("PR_INC := 1;");
ibquery1.SQL.add("SUSPEND;");
ibquery1.SQL.add("END##");
ibquery1.SQL.add("SET TERM ; ##");
Нет?
← →
starling13 © (2006-06-13 21:10) [3]
ibquery1.SQL.add("SET TERM ## ;");
ibquery1.SQL.add("CREATE PROCEDURE PRICE(P_INC INTEGER)");
ibquery1.SQL.add("AS BEGIN");
ibquery1.SQL.add("PR_INC = 1;");
ibquery1.SQL.add("SUSPEND;");
ibquery1.SQL.add("END##");
ibquery1.SQL.add("SET TERM ; ##");
← →
Sergey Masloff (2006-06-13 21:41) [4]А с каких пор IbQuery по многу команд разрешает выполнять?
← →
Desdechado © (2006-06-13 22:19) [5]вообще-то SET TERM предназначен строго для скриптов и скриптогонялок
как раз для разделения команд
а в квери только по одной команде писатьнадо, без всяких термов
создание процедуры - тоже команда, тольдо длииииинная
← →
Виталий Панасенко (2006-06-14 09:22) [6]И вообще-то, в 7 его уже нет. насколько я помню из просмотренной документации.
← →
kaif © (2006-06-14 11:25) [7]1. IBQuery исполняет одновременно только одну SQL-команду.
2. Такой SQL-команды, как SET TERM, не существует.
3. Команду SET TERM вылавливает разборщик скрипта, например парсер программы IBConsole и им подобных.
4. Для того чтобы создать хранимую процедуру с помощью IBQuery достаточно вписать в его свойство SQL текст процедуры без всяких SET TERM и вызвать метод ExecSQL.
В тексте процедуры терминатором должен оставаться символ ";".
В конце команды никаких термигнаторов нре нужно - IBSQL и так выполняет только одну команду и поэтому в терминаторе не нуждается.
То есть:
ibtransaction1.active := true;
ibquery1.Close;
ibquery1.SQL.Text :=
"CREATE PROCEDURE PRICE(P_INC INTEGER)")#13+
"AS BEGIN"+#13+
" PR_INC = 1;"+#13+ //#13 - возврат каретки для красоты
" SUSPEND;"+#13+
"END";
ibquery1.execSQL;
ibtransaction1.commit;
Однако для этих целей лучше использовать не IBQuery (это слишком избыточно), а IBSQL (компонент с минимальной функциональностью).
Все то же самое, только метод ExecQuery вместо ExecSQL.
← →
kaif © (2006-06-14 11:27) [8]ibquery1.Close - лишнее.
← →
kaif © (2006-06-14 11:34) [9]Кстати, в IBX 6.04 существует компонент IBScript.
Вот он, кажется, понимает SET TERM. Я не помню - я писал свой IBScript для этой цели.
Единственное, на что рекомендую обратить внимание, так это то, что:
1. Изменения метаданных должны производиться в отдельной транзакции от изменения данных.
2. Изменения метаданных как правило рекомендуется сразу подтверждать.
← →
Desdechado © (2006-06-14 20:22) [10]3. изменения метеданных часто требуют переподключения к БД, бо они кэшируются при подключении
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.046 c