Главная страница
    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.008 c
1-4370
K0riN
2002-11-22 13:21
2002.12.02
Сравнение каталогов


1-4273
borg
2002-11-21 09:37
2002.12.02
коды символов


4-4657
Tihas
2002-10-17 01:17
2002.12.02
Несколько вопросов...


6-4539
MasterVovan
2002-10-06 11:03
2002.12.02
Как создать простой html редактор???


3-4230
Rule
2002-11-12 22:49
2002.12.02
Подскажите пожалуйста где мне найти сервер IB 5 для Линуха и доки





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