![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вставка записей в таблицу InterBase [D7, IB6.x]
asd © (2003-08-27 18:55:00)
Привет! Подскажите пожалуйста как можно узнать при вставке ID записи, который присвоил генератор InterBase?
AlexWeb (2003-08-28 12:13:00) [21]
> Zacho © (28.08.03 08:01) [6]
А в общем случае - в событии OnNewRecord выполнять запрос типа SELECT GEN_ID(MY_GEN,1) FROM RDB$DATABASE и полученное значение присваивать полю.
Нефига не выйдет. Т.к. "GEN_ID(MY_GEN,1)" увеличит значение генератора "MY_GEN" на "1".
Zacho (2003-08-28 10:40:00) [22]
> HSolo © (28.08.03 10:37) [8]
Можно, конечно, но толку-то от этого в IBX ? Только лишний гемморой.
HSolo (2003-08-28 10:37:00) [23]
CREATE PROCEDURE INS_UPD_BAZA(
ID INTEGER,
FNAME VARCHAR(100),
FDATER DATE)
RETURNS (
IDENT INTEGER)
AS
BEGIN
if (id>0) then
begin
ident = id;
update baza set
fname = :fname, fdater = :fdater
where ident = :id;
end
else begin
ident = gen_id(g_baza, 1);
insert into baza(ident, fname, fdater)
values (:ident, :fname, :fdater);
end
suspend;
END
Жук (2003-08-28 08:27:00) [24]
> asd (28.08.03 07:53) [5]
> Опишу ситуацию. Происходит вставка записи и надо чтобы указатель
> в Gride стоял на вставленной записи.
Append
Zacho (2003-08-28 08:01:00) [25]
> asd (28.08.03 07:53) [5]
Если используешь IBX - то у TIBDataSet и TIBQuery есть св-во GeneratorField.
А в общем случае - в событии OnNewRecord выполнять запрос типа SELECT GEN_ID(MY_GEN,1) FROM RDB$DATABASE и полученное значение присваивать полю.
asd (2003-08-28 07:53:00) [26]
>Вариант 1: перед вставкой записи взять очередное значение генератора, и вставлять с уже известным значением
Скажите а как можно из программы вызвать это значение? (Хотя оно уже может измениться)
Опишу ситуацию. Происходит вставка записи и надо чтобы указатель в Gride стоял на вставленной записи. Но дело в том что частенько это не последняя запись (много народу работает).
Или подскажите пожалуйста пример хранимой процедуры, которая бы делала вставку и как получить от нее значение newid.
Заранее благодарен
Pat (2003-08-27 23:58:00) [27]
>который присвоил генератор InterBase
Генератор ничего никому не присваивает
Вставлять значения на клиенте. IBX и FIBPlus поддерживают работу с генераторами для "autoinc" полей.
З.Ы. "autoinc" в кавычках:-)
HSolo (2003-08-27 19:03:00) [28]
> select max(id) from YourTable
Вот так делать не надо. Можно сильно нарваться при интенсивной многопользовательской работе
HSolo (2003-08-27 19:02:00) [29]
Вариант 1: перед вставкой записи взять очередное значение генератора, и вставлять с уже известным значением.
Вариант 2: написать хранимую процедуру, к-рая вставляет запись и возвращает соотв.значение
Все прочее - от лукавого :)
Calm (2003-08-27 19:00:00) [30]
select max(id) from YourTable
Если же нужно одиним махом, то можно делать добавление через хранимую процедуру.
В ХП сделать один выходной параметр, который получать так:
NewID=gen_id(YourGenerator, 0); // текущее значение генератора