Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.056 c
2-1331751635
White
2012-03-14 23:00
2013.03.22
Сбивается БД


15-1328657511
Забаненный
2012-02-08 03:31
2013.03.22
Корень зла.


15-1336163402
Юрий
2012-05-05 00:30
2013.03.22
С днем рождения ! 5 мая 2012 суббота


2-1338481759
NatashaZ
2012-05-31 20:29
2013.03.22
Поток и ShowModal (Delphi2009)


15-1341997928
Дмитрий С
2012-07-11 13:12
2013.03.22
Наушники от которых не болят уши.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский