Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вставка записей в таблицу InterBase [D7, IB6.x]


Страницы:   1 2

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); // текущее значение генератора


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо