Форум: "Базы";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизРабота с NavigatorButtons в cxGrid Найти похожие ветки
← →
Наталья (2010-08-04 17:11) [0]База Oracle. Это получилось сделать.
Теперь возник такой вопрос. Я в TUpdateSql вешаю запрос:
insert into NPATS_GTP
(NAME, NPATSID)
values
(:NAME, :NPATSID)
returning gtpid into :gtpid
чтобы вернул первичный ключ-поле для дальнейшего его использования. Но вываливается ошибка
update error.
Подскажите, пржалуйста, как правильно использовать предложение returning или есть какой другой способ?
Спасибо.
← →
Sergey13 © (2010-08-04 17:16) [1]> [0] Наталья (04.08.10 17:11)
> База Oracle. Это получилось сделать.
Так Oracle - это ваше? Круто! 8-)
> insert into
и
> update error.
противоречие однако, не находите?
← →
Sergey13 © (2010-08-04 17:16) [2]> [0] Наталья (04.08.10 17:11)
И при чем тут "NavigatorButtons в cxGrid"?
← →
Игорь Шевченко © (2010-08-04 17:37) [3]
> Но вываливается ошибка
>
> update error.
правильно вываливается. UpdateSQL не понимает таких операторов, насколько я помню
← →
Игорь Шевченко © (2010-08-04 17:39) [4]я к тому, что UpdateSQL считает, что у него все параметры будут входными, а в приведенном операторе параметр :gtpid - выходной.
← →
Наталья (2010-08-04 17:57) [5]>И при чем тут "NavigatorButtons в cxGrid"?
Использую именно этот грид и его панель с кнопками.
> insert into
> update error.
>противоречие однако, не находите?
При нажатии на кнопку + (добавить запись), в список добавляется запись и в базу тоже, тут же пытаюсь редактировать эту же запись, но вылетает ошибка, вот где update, не понимает, что нужно вернуть индекс и по нему редактировать.
> я к тому, что UpdateSQL считает, что у него все параметры будут входными
А как можно сделать, что б понимал? Или как-то обойти это непонимание?
Спасибо.
← →
Игорь Шевченко © (2010-08-04 18:23) [6]
> А как можно сделать, что б понимал? Или как-то обойти это
> непонимание?
например, не использовать returning
← →
Наталья (2010-08-05 09:36) [7]Попробую переформулировать.
Используется BDE, отказаться от него нельзя, т.к. многое придется переделывать.
Имеется СУБД Oracle. В ней создана база.
В Oracle организовано автоинкрементное добавление записи для того.
Запись в таблицу добавляется, но редактировать не удается, т.к. похоже, что на клиентсую сторону не возвращается автоинкрементный ключ.
А реализовано так:
В TUpdateSql в событии Insert создаю запрос:
insert into NPATS_GTP
(NAME, NPATSID)
values
(:NAME, :NPATSID)
returning gtpid into :gtpid
Такое ощущение, что TUpdateSql не обрабатывает предложение returning.
Подскажите, пожалуйста, как можно решить эту задачу?
← →
Виталий Панасенко (2010-08-05 09:43) [8]
> Запись в таблицу добавляется, но редактировать не удается,
> т.к. похоже, что на клиентсую сторону не возвращается автоинкрементный
> ключ.
>
а БДЕ это умеет делать?
← →
Sergey13 © (2010-08-05 10:00) [9]> [7] Наталья (05.08.10 09:36)
> Подскажите, пожалуйста, как можно решить эту задачу?
1. Новое значение ключа можно сгенерировать заранее и вставлять его в запросе явно.
2. Готовить запись заранее, чтобы не нужно было ее после вставки редактировать
3. Переоткрывать датасет после вставки и позиционирование на новую запись - это конечно совсем изврат, но...
← →
Наталья (2010-08-05 10:46) [10]> а БДЕ это умеет делать?
Ну а зачем тогда в Delphi есть свойство AutoGenerateValue со значением arAutoInc.
Может, для его использования нужно еще что-то настраивать?
← →
Игорь Шевченко © (2010-08-05 11:31) [11]
> Ну а зачем тогда в Delphi есть свойство AutoGenerateValue
> со значением arAutoInc.
для Парадокса, например. Но не для оракла.
← →
12 © (2010-08-06 08:53) [12]Автоинкремент в O делается через последовательности, вроде
Хоть и боюсь, что ИШ убъет, но может как то так?oqLoadPrice.SQL.Text := "select PRICE_ID.NEXTVAL as IdPrice from dual";
oqLoadPrice.Open;
IdPrice := oqLoadPrice.FieldByName("IdPrice").AsInteger;
oqLoadPrice.Close;
потомoqLoadPrice.SQL.Text := " Insert into price "+
" ( id_price, subscriber_id, start_data, stop_data, address, phone, ready) "+
" values (:id_price, :subscriber_Id, :start_data, :stop_data, :address, :phone, :ready)";
oqLoadPrice.ParamByName("id_price").AsInteger := IdPrice;
гдеcreate sequence PRICE_ID
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
или если не надо получить id в программуcreate or replace trigger tg_GenerateFILIALID
before insert ON FILIAL
for each row
begin
select FILIAL_ID.NEXTVAL
into :new.ID_FILIAL
from dual;
end tg_GenerateFILIALID;
и тогда
вставляем в таблицу, id не указываем, сам поставится
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.07 c