Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при добавленни записи в таблицу, Ай нид Хелп! 
:(
    Опции темы
AlexLogos
Дата 10.6.2010, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Здравствуйте форумчане! Вопрос следующий: работаю з Oracle 8i в Delphi 2009. Создал таблицу в которую пишу сведенья о связи некоего обьекта и нескольких характеристик. Таблица предельно проста:
Код

CREATE TABLE REF_OSOBA_HO
(
    id    NUMBER UNIQUE NOT NULL,
    idos    NUMBER NOT NULL,
    idcl    NUMBER NOT NULL,
    cluplevel    NUMBER,
    CONSTRAINT PK_REF_OSOBA_HO PRIMARY KEY (id )
)


дело в том что в Oracle нет поля autoincrement, поэтому я решил использовать для этого триггер. Создал следующий сиквенс и триггер:
Код

CREATE SEQUENCE REF_OSOBA_HO_SEQ
 START WITH     1
 INCREMENT BY   1
 NOCACHE
 NOCYCLE
/


CREATE OR REPLACE TRIGGER REF_OSOBA_HO_BI before INSERT on REF_OSOBA_HO FOR each row
BEGIN
IF :new.id IS NULL then
    SELECT REF_OSOBA_HO_SEQ.NEXTVAL
    INTO :new.id
    FROM dual;
  end IF;
END;

Для работы с базой я использую Древний Тоад. Когда я добавляю в базу данные с помощью тоада - триггер и сиквенс работают нормально и мне не нужно вводить значение ID - оно заполняется автоматически... Но когда при прогоне программы я с помощью ДБНавигатора добавляю запись, жму на Пост - вилезает ошибка что поле ID должно бить заполнено. Триггер не сработал. Я так понимаю что в этом случае Делфа контролирует ввод данных в таблицу до использования триггера. Каким образом это обойти? Путь выполнения запроса к базе для вычисления максимального значения индекса не предлагать  smile 





 

Это сообщение отредактировал(а) AlexLogos - 10.6.2010, 15:57
PM MAIL   Вверх
vovk
Дата 10.6.2010, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 28.2.2008

Репутация: 6
Всего: 6



1)В датасете в наборе исключить поле id
2)Добавлять запросом
3) Подправить procedure TDataSet.CheckRequiredFields; в модуле DB
или
4) найти компонент который учитывает ваши требования

Это сообщение отредактировал(а) vovk - 10.6.2010, 16:44
PM MAIL   Вверх
AlexLogos
Дата 10.6.2010, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Прекрасный ответ.
Первый вариант работает но выдает ошибку при удалении записи тем же ДБНавигатором - нет поля OldID.
Второй вариант классный и безотказный но я не хотел лишний раз писать код и бросать на форму лишние Квоери.
Трерий вариант, я б сказал Вариантище - не хоцца мне туду лезть...
Четвертый - надо ж искать, а я себе не представляю как сформлировать поисковый запрос. Искать Автоинкрементик?

Еще предложения...
Пока склоняюсь к запросу...

Это сообщение отредактировал(а) AlexLogos - 10.6.2010, 16:52
PM MAIL   Вверх
vovk
Дата 10.6.2010, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 28.2.2008

Репутация: 6
Всего: 6



А вы какие компоненты доступа используете? Точнее у TDAtaset (который для отображения редактирования таблиц используете) какая фамилия ? smile
PM MAIL   Вверх
AlexLogos
Дата 11.6.2010, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Для доступа к базе использую OraSession, для доступа к данным - OraTable, таблицы между собой слегка связаны, но не по тому полю через которое ошибка... Отображаю данныес помощью стандартных DBGrid, DBEdit, DBLookUpListBox...
PM MAIL   Вверх
AlexLogos
Дата 11.6.2010, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Универсального решения не нашел. В одних случаях решил использовать триггер, в некоторых - вычисление и подстановку значений...
PM MAIL   Вверх
vovk
Дата 12.6.2010, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 28.2.2008

Репутация: 6
Всего: 6



ну ненаю, то что вы сказали к стандартым компонентам дельфи я не отношу (даже не знаю что это OraSession,  OraTable ) Но подход к проблеме простой, всё что нужно делает СУБД , а с клиенского приложения только отправляются данные , что куда записать, или что от куда показать . удалите на**** навигатор, а  DBGrid используйте только для отображеня данных, но никак не для редактирования. И вообще ввсякие dbedit Ы  подходят для редактирования только локальных бд, нет теоретически можно как угодно, но практически нах.. В общем для редактирования и добавления= только запросы, как и где решайте сами. Или редактируйте стандартные компоненты под свои нужды.. не так сложно как кажется (а гораздо сложнее заколебаешся разбиратся в куче функций и процедур, но вполне возможно

Это сообщение отредактировал(а) vovk - 12.6.2010, 02:26
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.