Вниз
Скачать: CL | DM;

Как получить текущее значение генератора..   Найти похожие ветки 

← →
koks ©   (2002-11-14 11:56) [0]

Уважаемые мастера - подскажите...
Добавляю в таблицу данные через TIBQuery с параметрами.
TIBQuery.SQL: INSERT INTO MyTable
Values(:V1, :V2, :V3);

В таблице MyTable есть поле Id, которое обновляется генератором через триггер.

CREATE TRIGGER "CREATE_ID" FOR "MyTable"
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
NEW.ID = GEN_ID("MyTable_ID", 1);
END

Как мне сразу после TIBQuery.ExecSQL вытащить значение поля id для только что вставленной записи... Неужели отдельным запросом...


← →
KoluChi ©   (2002-11-14 12:01) [1]

Получить значение генератора
function ...(const GeneratorName: String; var Value: Integer): Boolean;
begin
Result := false;
ibsql_GetGenerator.Close();
ibsql_GetGenerator.SQL.Text :=
"SELECT GEN_ID(" + UpperCase(GeneratorName) + ", 0) AS GEN_VALUE " +
"FROM RDB$GENERATORS GEN " +
"WHERE GEN.RDB$GENERATOR_NAME=" + QuotedStr(UpperCase(GeneratorName));
try
ibsql_GetGenerator.Transaction.StartTransaction();
ibsql_GetGenerator.ExecSQL();
{$IFDEF FIELD_BY_NAME_AS_FUNC}
Value := ibsql_GetGenerator.FldByName["GEN_VALUE"].AsInteger;
{$ELSE}
Value := ibsql_GetGenerator.FieldByName["GEN_VALUE"].AsInteger;
{$ENDIF}
ibsql_GetGenerator.Transaction.Commit();
Result := true;
except
ibsql_GetGenerator.Transaction.Rollback();
end;
ibsql_GetGenerator.Close();
end;


← →
KoluChi ©   (2002-11-14 12:01) [2]

>Неужели отдельным запросом...
IMHO, только так.


← →
koks ©   (2002-11-14 12:14) [3]

Большле спасибо
Толбко вопрос: для чего нужна
{$IFDEF FIELD_BY_NAME_AS_FUNC}
Value := ibsql_GetGenerator.FldByName["GEN_VALUE"].AsInteger;
{$ELSE}
<< то же самое >>
{$ENDIF}

и почему SELECT выполняется методом ExecSql, а не open.

и еще вопрос в догонку - нужно ли с запросом ibsql_GetGenerator связывать отдельную транзакцию...



← →
koks ©   (2002-11-14 13:19) [4]

да....... извиняюсь - бредовые задал вопросы. Я просто подумал что в данном случае используется TIBQuery. А оказалось - IBSQL, с которым я пока плохо дружу...


← →
Roma111   (2002-11-14 13:36) [5]

Лично у меня проще

select gen_id(GEN_ID_EXAM,0) as MaxID
from list_okrug
where id_okrug=0;

естественно подставь названия своего генератора и таблицы, которую можно взять любой "справочник", а "where" нужно, чтобы выводилась одна запись.


← →
Val ©   (2002-11-14 14:28) [6]

есть класичесий вариант, в котором для получения нового значения генератора используется хп, возвращающая его значение, она может вызываться и в триггере при вставке, и вами в приложении, одним словом - где угодно.


← →
KoluChi ©   (2002-11-14 15:09) [7]

>Val © (14.11.02 14:28)
получится что для каждого генератора надо хп писать, а так получаем универсальную функцию для любого генератора.


← →
KoluChi ©   (2002-11-14 15:13) [8]

>Roma111 (14.11.02 13:36)
>Лично у меня проще
Чем проще? Будет работать только с одной базой (совсем не универсально).




← →
Val ©   (2002-11-14 15:24) [9]

>KoluChi © (14.11.02 15:09)
не для каждого, а там где это нужно.


← →
KoluChi ©   (2002-11-14 15:28) [10]

>Val © (14.11.02 15:24)
>не для каждого, а там где это нужно.
Я это и имел ввиду.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.011 c
3-4218
VeLeS
2002-11-14 02:08
2002.12.02
Компонент для отображения дерева


14-4617
Бегинер
2002-11-12 19:06
2002.12.02
Хостинг?...


4-4668
Velocity
2002-10-18 20:59
2002.12.02
ScrollBox и SpeedButton на API


3-4247
fomstas
2002-11-14 14:19
2002.12.02
Из Delphi в 1С???


14-4576
Николай Быков
2002-11-09 10:53
2002.12.02
Почему по выходным жизнь на сайте замирает?




   Наверх