Форум: "Базы";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];
ВнизЗначение поля после Post Найти похожие ветки
← →
Oleksiy (2003-02-10 10:16) [0]Проблема в следующем. Добавляю в таблицу запись, все поля в записи указываю явно, а ключевое поле генерируется при помощи последовательности (база Oracle8), после Post"а таблицы пытаюсь вернуть значение ключевого поля - возвращается нулевое значение (в самой таблице все нормально - значение стоит явное), значения же всех остальных полей возвращаются действительно те, которые присутствуют в таблице... Не могу понять в чем дело.
← →
passm (2003-02-10 10:19) [1]Oleksiy (10.02.03 10:16)> Значение полей на сервере генерируешь? Если да, то необходимо переоткрыть запрос или написать отдельный для поиска ID нужной записи.
← →
Oleksiy (2003-02-10 10:29) [2]Если переоткрыть запрос, т.е. сделать Refresh, то текущей записью может стать другая, так что значение ключего поля могу получить совсем не то.
← →
passm (2003-02-10 10:40) [3]Oleksiy (10.02.03 10:29)> Верно. Отсюда два пути:
1. Делать Locate после переоткрытия. Для идентификации записи использовать набор остальных полей.
2. Получать идентификатор ID до отправки SQL запроса вставки строки на сервер.
Но, насколько я понял, 2-й путь тебе не подходит.
ЗЫ: Для избежания подобных неувязок почти всегда поступаю 2-м способом.
← →
Oleksiy (2003-02-10 10:46) [4]а как ты получаешь id записи до отправки запроса?
← →
passm (2003-02-10 10:53) [5]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:56) [6]мне такое вариант точно не подойдет, в Oracle для этого как раз те самые последовательности и используются
← →
passm (2003-02-10 11:01) [7]Oleksiy (10.02.03 10:56)> Можно поподробнее: что за последовательности?
Просто интересно.
← →
Oleksiy (2003-02-10 11:10) [8]проблему решил, спасибо за внимание, а последовательности - объекты в базе, которые генерируют уникальное значение, создаешь последовательность, задаешь правила генерации уникальных значений, а потом используешь ее для вставки уникальных значений в таблицу, у каждой последовательности есть два метода nextval, prevval - соответственно выбирают предыдущее и последующее значения последовательности. насколько я знаю в интербейсе есть аналог - генератором называется
← →
DarkGreen (2003-02-10 13:12) [9]Хм... А что, в Оракле select из последовательности нельзя сделать?? Неверю.
← →
DarkGreen (2003-02-10 13:40) [10]Я уж не помню, как там с послеовательностями работают, но скорее всего будет что-то вроде
select Sequence_Name.NextVal from DUAL
← →
Oleksiy (2003-02-10 15:25) [11]ну ты все правильно говоришь, так это и делается, читай сначала - написано, что значение выбирается, но на клиента возвращается 0, в базе все нормально, но это уже неважно... все уже заработает
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c