Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как проверит через SQL уникальность записи 
:(
    Опции темы
Dimich
Дата 31.12.2004, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ничего, бывает.... Главное до истины докапались!
Значит, пришли к выводу, что WHERE в самом Insertе сделать таки нельзя, но разовью свою предыдущую мысль, где я предлагал вставлять запись селектом.
1.
Т.е. я предложил пример для Oracle, но поразмыслив немного привел его к общему виду:
Код

insert into mytable (f1,f2,f3)
(select distinct :p1 as f1, :p2 as f2, :p3 as f3 from mytable where :p1 not in (select f1 from mytable))

Поясню: Что касается названия полей в качестве параметров, то это вовсе не то, про что вы подумали! Вот передаем три параметра (:p1..:p3) как например 1, 2 и 3 и получаем селект такого вида:
Код

select distinct 1 as f1, 2 as f2, 3 as f3 from mytable where 1 not in (select f1 from mytable)

который выполнившись выберет данные 1, 2, 3 в том случае, если в таблице MYTABLE в поле F1 нет 1 и ничего не выверет в противном случае (если 1 встречается в поле F1). Соответственно эти данные и будут вставлены командой Insert!

2.
Вот еще, мы рассматривали вариант, с selectom и инсертов, т.е. где сперва проверяем, а потом уже решаем вставлять или нет. Так вот, в таком виде для многопользовательских баз никак не катит, как говорил я и как справедливо заметили Вы. Но стоп! А что нам мешает залочить таблицу перед селектом?

3.
А вообще, лучше, чем заниматься таким гемороем, сперва продумывать структуру БД так, чтобы эту работу переложить на уникальные ключи, индексы, ограничения.

З.Ы. Благодарю Вас, Bes, за интересную дискуссию! С Новым Годом!
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Bes
Дата 31.12.2004, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2Dimich: предложение - после нового года продолжить, поскольку есть вопросы. С новым годом.
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.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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