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

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

Значение поля после Post


Oleksiy ©   (2003-02-10 10:16:00) 

Проблема в следующем. Добавляю в таблицу запись, все поля в записи указываю явно, а ключевое поле генерируется при помощи последовательности (база Oracle8), после Post"а таблицы пытаюсь вернуть значение ключевого поля - возвращается нулевое значение (в самой таблице все нормально - значение стоит явное), значения же всех остальных полей возвращаются действительно те, которые присутствуют в таблице... Не могу понять в чем дело.


Oleksiy   (2003-02-10 15:25:00) [1]

ну ты все правильно говоришь, так это и делается, читай сначала - написано, что значение выбирается, но на клиента возвращается 0, в базе все нормально, но это уже неважно... все уже заработает


DarkGreen   (2003-02-10 13:40:00) [2]

Я уж не помню, как там с послеовательностями работают, но скорее всего будет что-то вроде
select Sequence_Name.NextVal from DUAL


DarkGreen   (2003-02-10 13:12:00) [3]

Хм... А что, в Оракле select из последовательности нельзя сделать?? Неверю.


Oleksiy   (2003-02-10 11:10:00) [4]

проблему решил, спасибо за внимание, а последовательности - объекты в базе, которые генерируют уникальное значение, создаешь последовательность, задаешь правила генерации уникальных значений, а потом используешь ее для вставки уникальных значений в таблицу, у каждой последовательности есть два метода nextval, prevval - соответственно выбирают предыдущее и последующее значения последовательности. насколько я знаю в интербейсе есть аналог - генератором называется


passm   (2003-02-10 11:01:00) [5]

Oleksiy (10.02.03 10:56)> Можно поподробнее: что за последовательности?
Просто интересно.


Oleksiy   (2003-02-10 10:56:00) [6]

мне такое вариант точно не подойдет, в Oracle для этого как раз те самые последовательности и используются


passm   (2003-02-10 10:53:00) [7]

Oleksiy (10.02.03 10:46)> Оговорюсь сразу - работаю с DB2.
Есть функция, которая всегда возвращает уникальное значение GENERATE_UNIQUE.
Пишу запрос:
SELECT NUM.NUM
FROM (VALUES(GENERATE_UNIQUE())) AS NUM(NUM)
И оформляю его в функцию:
funcion GenerateID: Variant;
begin
Query.Open;
Result:= QueryNUM.Value;
Query.Close
end;

Далее, при добавлении где-либо новой строки:
procedure Query1.NewRecord(DataSet: TDataSet);
begin
Query1ID.Value:= GenerateID
end;


Oleksiy   (2003-02-10 10:46:00) [8]

а как ты получаешь id записи до отправки запроса?


passm   (2003-02-10 10:40:00) [9]

Oleksiy (10.02.03 10:29)> Верно. Отсюда два пути:
1. Делать Locate после переоткрытия. Для идентификации записи использовать набор остальных полей.
2. Получать идентификатор ID до отправки SQL запроса вставки строки на сервер.
Но, насколько я понял, 2-й путь тебе не подходит.

ЗЫ: Для избежания подобных неувязок почти всегда поступаю 2-м способом.


Oleksiy   (2003-02-10 10:29:00) [10]

Если переоткрыть запрос, т.е. сделать Refresh, то текущей записью может стать другая, так что значение ключего поля могу получить совсем не то.


passm   (2003-02-10 10:19:00) [11]

Oleksiy (10.02.03 10:16)> Значение полей на сервере генерируешь? Если да, то необходимо переоткрыть запрос или написать отдельный для поиска ID нужной записи.


Наверх

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