Главная страница
    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.043 c
4-1146195109
Progh
2006-04-28 07:31
2006.08.20
Добавление и удаление сетевого ресурса


15-1153907501
Чапаев
2006-07-26 13:51
2006.08.20
Делфи2006, вопрос для телепатов


2-1154418720
vladimirg88
2006-08-01 11:52
2006.08.20
3-d программирование


2-1154522690
AlexanderMS
2006-08-02 16:44
2006.08.20
Ассоциация программы с файлами.


9-1132981739
rtyrt
2005-11-26 08:08
2006.08.20
Как определить поддерживается ли OpenGL аппаратно или нет?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский