Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-4497
AndrewVolkov
2002-11-20 20:49
2002.12.02
Как сделать, чтобы объявленный тип был виден из другого юнита???


8-4524
Sniffer
2002-08-13 22:39
2002.12.02
Создание трёхмерной карты


1-4299
----
2002-11-19 18:51
2002.12.02
Коннект к запущенному СОМ-обьекту


6-4532
LSW
2002-10-04 22:42
2002.12.02
Как передать параметры GET методом с помощью WinInet?


14-4614
evgeg
2002-11-11 15:36
2002.12.02
Житье в Канаде





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