firebird + odbc - несколько запросов
От: Alexey__Boborykin  
Дата: 16.07.09 03:27
Оценка:
есть запрос типа "SET TERM ^;CREATE TRIGGER ...;"
не могу его выполнить из c++ кода через ODBC (http://www.firebirdsql.org/index.php?op=devel&sub=odbc)
во всех случаях ругается на синтаксис, указывает на первое слово после точки с запятой.
крайне необходимо создавать всю структуру таблиц из кода через odbc
подскажите, если ли способ обойти ограничение?
или я что-то не предусмотрел?

PS запрос заменял на более простой типа "delete from table1; delete from table2;" — все равно не проходит, дело не в корректном создании триггера
Re: firebird + odbc - несколько запросов
От: mazurkin http://mazurkin.info
Дата: 16.07.09 05:20
Оценка:
Alexey__Boborykin wrote:
> есть запрос типа "SET TERM ^;CREATE TRIGGER ...;"
> не могу его выполнить из c++ кода через ODBC (http://www.firebirdsql.org/index.php?op=devel&sub=odbc)
> во всех случаях ругается на синтаксис, указывает на первое слово после точки с запятой.
> крайне необходимо создавать всю структуру таблиц из кода через odbc
> подскажите, если ли способ обойти ограничение?
> или я что-то не предусмотрел?
>
> PS запрос заменял на более простой типа "delete from table1; delete from table2;" — все равно не проходит, дело не в корректном создании триггера

SET TERM — это команда препроцессора, а не самой БД

Парсите скрипт на отдельные стейтменты сами и выполняйте их по одному
Posted via RSDN NNTP Server 2.1 beta
Re[2]: firebird + odbc - несколько запросов
От: Alexey__Boborykin  
Дата: 16.07.09 12:07
Оценка:
M>Парсите скрипт на отдельные стейтменты сами и выполняйте их по одному

спасибо, но все равно не понятно. как мне выполнить следующий запрос как один стейтмент?

CREATE TRIGGER NAT_BI FOR NAT ACTIVE BEFORE INSERT POSITION 0 AS DECLARE VARIABLE tmp DECIMAL(18,0);
BEGIN
IF (NEW.NAT_ID IS NULL) THEN NEW.NAT_ID = GEN_ID(GEN_NAT_ID, 1);
ELSE
BEGIN
tmp = GEN_ID(GEN_NAT_ID, 0);
if (tmp < new.NAT_ID) then tmp = GEN_ID(GEN_NAT_ID, new.NAT_ID-tmp);
END
END

?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.