Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.02;
Скачать: 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 вся ветка

Текущий архив: 2002.12.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
1-4327
VDen
2002-11-21 19:33
2002.12.02
Выделение строки в Memo


6-4551
megatrend
2002-09-25 18:22
2002.12.02
Обсуждение статьи


1-4317
asdf
2002-11-21 16:36
2002.12.02
Font.Style


6-4541
Дмитрий К.К.
2002-10-06 19:11
2002.12.02
MSHTML_TLB.pas


3-4219
Uran
2002-11-13 09:49
2002.12.02
BDE32 Component -подскажите где его можно скачать под d5,d6 ?