![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Значение поля после 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 нужной записи.