Главная страница
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.038 c
2-1154538692
Tivaya
2006-08-02 21:11
2006.08.20
Поток в потоке


3-1150218131
starling13
2006-06-13 21:02
2006.08.20
TIBTransaction.Rollback


15-1153584712
WC2
2006-07-22 20:11
2006.08.20
Как вы представляете дни недели?


1-1152085849
JohnnySE
2006-07-05 11:50
2006.08.20
работа с DLL и ее интерфейсами


15-1153770856
palva
2006-07-24 23:54
2006.08.20
Активный отдых в Подмосковье