![]() |
|
![]() ![]() ![]() |
|
kami |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 3 Всего: 72 |
Не нужно программе ничего объяснять. Приведенный мной SQL-код создает ограничение - СУБД не сможет добавить запись в таблицу, если в ней уже есть аналогичная. По каким полям производить сравнение - подставляется вместо (Поле1, Поле2). Можете хоть все поля таблицы перечислить через запятую. Таким образом, после добавления Constraint задача будет сведена к следующему:
И всё. Не нужно никаких формирований лишних запросов, выборок, сравнений с добавляемым и так далее и тому подобное. Всю эту нагрузку возьмет на себя СУБД. А вообще, уважаемый, за столько времени можно уже было почитать справку о том, что такое CONSTRAINT и с чем его едят. Потому что прежде чем писать его сюда, я просмотрел справку к Access, увидел нужный синтаксис, создал тестовую таблицу, ввел ограничение и попробовал добавить одинаковые записи. В отличие от вас. |
||||
|
|||||
ivanfr |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 1.4.2009 Репутация: нет Всего: нет |
Буду учиться.
Так как мне нет необходимости в создании таблицы, то я беру вот эту строку:
в Место: 1)"Таблица1" -" Table_of_key_media" 2)"myConstraint" - не понял что это такое. Смотрел в примерах стоит всегда другое значение нe связанное с таблицей, например,
3)"UNIQUE(Поле1, Поле2)" - UNIQUE(Type_Carrier, Serial_Number_Carrier, Issued_Keys, Name_Of_The_Holder_Of_The_Keys,+ 'Employee_Number_Key_Holder, Position_Or_Location_Key, Workstation_Installation_Inventory_Number,'+ 'Type_Key, Date_Of_Issue_Of_Key_Media, Date_of_delivery_of_key, Date_Of_Last_Inspection,'+ 'Integrity_Of_The_Sealing, Order_Of_The_Key_Storage_Medium, Comments )'; И должно получиться следующее: Параметры оставлять и использовать insert нужно?
![]() Не совсем понятно, как добавить в связную таблицу оставшиеся данные. По логике
Прошу Вас объяснить моменты, которые я не понимаю. Это сообщение отредактировал(а) ivanfr - 28.8.2012, 11:05 |
||||||||||
|
|||||||||||
kami |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 3 Всего: 72 |
да. А нужно смотреть не в примерах, а в описании самого оператора и особенно - в ремарках. Хелп пересказывать не буду. нет. Читаем. Смотрим еще раз на синтаксис ALTER TABLE. Думаем. Смотрим на выделенное жирным шрифтом. Опять думаем И понимаем, что этот SQL оператор нужно/можно выполнить непосредственно в Access ОДИН раз при создании БД. А потом пользоваться обычным INSERT INTO с его параметрами. Кстати, по поводу исключения могу ошибаться - возможно, ADOQuery.ExecSQL при добавлении записи в таблицу просто вернет 0 вместо 1. Но сути дела это не меняет.
Если добавление было успешно, то следующий запрос "SELECT @@IDENTITY" вернет ID добавленной записи в том случае, если ID поле - автоинкрементное. |
||||
|
|||||
ivanfr |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 1.4.2009 Репутация: нет Всего: нет |
Ура!!! наконце получилось!
Как делал: 1)нашёл эту статью где все понятно написано ссылка:http://office.microsoft.com/ru-ru/access-h...A010341600.aspx Выполнил по пунктно
Запускаю в Delphi следующий код:
БД не дает ввносить изменение если идентичная строка в базе сущестует, если изменить 1 или два поля то данные добавить можно. Благодарю всех кто помогал, отдельное спасибо kami kami Если б сразу сказал, что нужно выполнить SQL запрос в самом Access, что в итоге позволит создать ограничение на несколько полей уже бы сделал давно. Это сообщение отредактировал(а) ivanfr - 24.9.2012, 08:12 |
||||
|
|||||
kami |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 3 Всего: 72 |
то ли лыжи не едут,... но:
![]() |
||||
|
|||||
ivanfr |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 1.4.2009 Репутация: нет Всего: нет |
На всякий случай добавляю вариант с INSERT INTO
|
|||
|
||||
ivanfr |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 1.4.2009 Репутация: нет Всего: нет |
Помогите довести данный вопрос до логического конца.
![]() Рисунок - Схема данных Сейчас данные добавляются, но не связываются, так как отсутсвуют индексы записи. Ранее я устанавливал в ДБ Гриде на запись с locate таблице persona_stor на нужную запись, а затем записывал данные. Сейчас же запись осуществляется с помощью INSERT INTO и ему нужно предоставить индекс для связи таблиц. Делаю следующим образом, передаю, пытаюсь записать данные о ключевом носителе информации. В БД сделал ограничение по 10 столбцам, если совпадают, то запись сделать не возможно. И далее обрабатывается исключительная ситуация, а именно except, - где я пытаюсь дописать информацию о ключе, если запись не совпадает - то записывается в БД. Тут возникает проблема, как узнать все ID нужных мне записей, по которым таблицы связываются друг с другом. Допустим, после записи я могу сразу получить ID текущей записи, следующим образом:
Запишу значение в следующую таблицу (в моём случае Таблица Key_User записи Id_Table_of_Key_Media), но как узнать ID записи вышестоящей таблицы, а именно таблицы persona_stor записи Id_persona_stor записав это значение в таблицу Table_of_key_media столбца Id_table_persona_stor? Есть предположение как это сделать, сформировать sql-запрос на поиск данных из него выбрать id. Есть еще вариант с помощью LOCETE установить на запись а затем извлеч ID только не пойму как. на запись перехожу так:
Помогите решить задачу. Это сообщение отредактировал(а) ivanfr - 26.9.2012, 09:29 |
||||||
|
|||||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 3 Всего: 72 |
После Locate:
Добавлено через 2 минуты и 56 секунд Ну и соответственно в этот гигантский Insert Into добавляем поле 'id_persona_stor' и значение id_persona_stor |
|||
|
||||
ivanfr |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 1.4.2009 Репутация: нет Всего: нет |
Сам разобрался вчера, долго парился..
но все равно спасибо за ответ.
если так сделать, то он должен добавить индекс только в таблицу КНИ, а в таблицу КИ ничего не добавит и ключ не свяжется. я сделал так для таблицы КНИ
а для таблцы КИ след. образом
Привожу итоговый код:
Это сообщение отредактировал(а) ivanfr - 27.9.2012, 13:41 |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "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. |