Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.20;
Скачать: CL | DM;

Вниз

проблема с 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.035 c
4-1146479765
Kukuruza
2006-05-01 14:36
2006.08.20
Registry и DWORD


1-1151420017
Inco
2006-06-27 18:53
2006.08.20
Вырезать (Cut) файл в Clipboard


8-1140424615
barakuda
2006-02-20 11:36
2006.08.20
освобождение памяти после просмотра большого JPEG


15-1153560452
brother
2006-07-22 13:27
2006.08.20
Иконки рабочего стола


15-1153658347
ronyn
2006-07-23 16:39
2006.08.20
сообщения принтера