Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.27;
Скачать: CL | DM;

Вниз

Значение поля после 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-87705
Olivka
2003-02-09 12:46
2003.02.27
что лучше выбрать


1-87431
Дима2003
2003-02-17 10:11
2003.02.27
iif ?


7-87734
Uka
2002-12-27 06:32
2003.02.27
Вы знаете что передача файл на КОМ port


1-87476
ALeXiuS
2003-02-16 22:43
2003.02.27
написать на экране когда идет игра


1-87392
Артём К
2003-02-14 12:37
2003.02.27
Как удалить пробелы до первого символа?