Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.041 c
4-1145970065
N0ve11
2006-04-25 17:01
2006.08.20
Plug and Play устройства


5-1137874670
2San
2006-01-21 23:17
2006.08.20
Отключить обработку сочетаний клавиш в RichEdit


15-1153744232
IceBeerg
2006-07-24 16:30
2006.08.20
Вот и Гугел порадовал...


3-1150371269
Vital_k
2006-06-15 15:34
2006.08.20
Картинка в базе


2-1154371338
FFx01
2006-07-31 22:42
2006.08.20
Статистическая загрузка dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский