Форум: "Базы";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];
ВнизКак получить текущее значение генератора.. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c