![]() |
|
|
![]()
|
|
| AlexLogos |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 23.4.2009 Репутация: нет Всего: 1 |
Здравствуйте форумчане! Вопрос следующий: работаю з Oracle 8i в Delphi 2009. Создал таблицу в которую пишу сведенья о связи некоего обьекта и нескольких характеристик. Таблица предельно проста:
дело в том что в Oracle нет поля autoincrement, поэтому я решил использовать для этого триггер. Создал следующий сиквенс и триггер:
Для работы с базой я использую Древний Тоад. Когда я добавляю в базу данные с помощью тоада - триггер и сиквенс работают нормально и мне не нужно вводить значение ID - оно заполняется автоматически... Но когда при прогоне программы я с помощью ДБНавигатора добавляю запись, жму на Пост - вилезает ошибка что поле ID должно бить заполнено. Триггер не сработал. Я так понимаю что в этом случае Делфа контролирует ввод данных в таблицу до использования триггера. Каким образом это обойти? Путь выполнения запроса к базе для вычисления максимального значения индекса не предлагать Это сообщение отредактировал(а) AlexLogos - 10.6.2010, 15:57 |
||||
|
|||||
| vovk |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 28.2.2008 Репутация: 6 Всего: 6 |
1)В датасете в наборе исключить поле id
2)Добавлять запросом 3) Подправить procedure TDataSet.CheckRequiredFields; в модуле DB или 4) найти компонент который учитывает ваши требования Это сообщение отредактировал(а) vovk - 10.6.2010, 16:44 |
|||
|
||||
| AlexLogos |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 23.4.2009 Репутация: нет Всего: 1 |
Прекрасный ответ.
Первый вариант работает но выдает ошибку при удалении записи тем же ДБНавигатором - нет поля OldID. Второй вариант классный и безотказный но я не хотел лишний раз писать код и бросать на форму лишние Квоери. Трерий вариант, я б сказал Вариантище - не хоцца мне туду лезть... Четвертый - надо ж искать, а я себе не представляю как сформлировать поисковый запрос. Искать Автоинкрементик? Еще предложения... Пока склоняюсь к запросу... Это сообщение отредактировал(а) AlexLogos - 10.6.2010, 16:52 |
|||
|
||||
| vovk |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 28.2.2008 Репутация: 6 Всего: 6 |
А вы какие компоненты доступа используете? Точнее у TDAtaset (который для отображения редактирования таблиц используете) какая фамилия ?
|
|||
|
||||
| AlexLogos |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 23.4.2009 Репутация: нет Всего: 1 |
Для доступа к базе использую OraSession, для доступа к данным - OraTable, таблицы между собой слегка связаны, но не по тому полю через которое ошибка... Отображаю данныес помощью стандартных DBGrid, DBEdit, DBLookUpListBox...
|
|||
|
||||
| AlexLogos |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 23.4.2009 Репутация: нет Всего: 1 |
Универсального решения не нашел. В одних случаях решил использовать триггер, в некоторых - вычисление и подстановку значений...
|
|||
|
||||
| vovk |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 28.2.2008 Репутация: 6 Всего: 6 |
ну ненаю, то что вы сказали к стандартым компонентам дельфи я не отношу (даже не знаю что это OraSession, OraTable ) Но подход к проблеме простой, всё что нужно делает СУБД , а с клиенского приложения только отправляются данные , что куда записать, или что от куда показать . удалите на**** навигатор, а DBGrid используйте только для отображеня данных, но никак не для редактирования. И вообще ввсякие dbedit Ы подходят для редактирования только локальных бд, нет теоретически можно как угодно, но практически нах.. В общем для редактирования и добавления= только запросы, как и где решайте сами. Или редактируйте стандартные компоненты под свои нужды.. не так сложно как кажется (а гораздо сложнее заколебаешся разбиратся в куче функций и процедур, но вполне возможно
Это сообщение отредактировал(а) vovk - 12.6.2010, 02:26 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |