Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-87334
Yagoda
2003-02-10 21:16
2003.02.27
Transfer data from xls ...


14-87697
microsoft
2003-02-11 19:12
2003.02.27
ПОМОГИТЕ СРОЧНО. Кто нибудьзнает как сделать Code Completion


1-87517
Armageddon
2003-02-16 23:04
2003.02.27
Немного не в тему.


9-87234
Гуляющий просто так
2002-09-20 14:30
2003.02.27
DirectX


6-87592
Ruf
2003-01-08 14:33
2003.02.27
Socket





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский