Приложению microsoft access не удается добавить все записи в запросе на добавление
Репутация: нет
Всего: нет
Заранее благодарю.
Репутация: нет
Всего: нет
. Помогите, пожалуйста, разобраться.
Репутация: нет
Всего: 11
Проблема в том, что на таблицы БД наложено ограничение ссылочной целостности. Ошибка типа "Violating of foreign key".
Сначала стоит узнать, что это такое.
Enjoy yourself, still you can. ;)
Репутация: 30
Всего: 453
О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.
Репутация: нет
Всего: нет
и, совершенно не понятно, как добавлять новые данные в таблицу. Из комментариев выше - не ясно как делать надо?!
Если не затруднит, опишите порядок действий для чайников. Чувствую, что просто должно быть.
Очень благодарю.
Репутация: 3
Всего: 252
Посмотри с какой таблицей связана твоя, открой ту таблицу, посмотри значения и в свою таблицу в соответствующее поле (видно в схеме данных) вноси только те записи которые есть в той таблице.
Репутация: 30
Всего: 453
Надо еще смотреть макет таблиц - там могут быть поля подстановки.
О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.
Репутация: нет
Всего: нет
Общая форма для заполнения содержит все поля из первой и второй таблиц.
Например:
"№ (ключ, типа- счетчик)", "ФИО", "группа" - поля Табл.1;
"№ (ключ, типа- счетчик)", "адрес", "тел." - поля Табл.2;
Связь- один к одному полей "№(ключ, типа- счетчик)" между Табл.1 и Табл.2;
Пусть БД из этих двух таблиц состоит.
Как новые данные туда внести.
Репутация: нет
Всего: 11
Enjoy yourself, still you can. ;)
Репутация: 21
Всего: 21
Anark1, очень сложно решение.
Дейстительно в таблицу необходимо добавить поле внешнего ключа Table1_Id - куда будут записываться коды из первичного ключа "№ (ключ, типа- счетчик)" из Таблицы 1.
Дальше делаются две формы. Для таблицы1 и таблицы2 - форма1 и форма2. На форма2 будет подчиненной (надеюсь ты знаешь как добавлять подчиненные формы на форму). Далее в свойствах элемента увпраленя подчиненной формы на вкладке "Даные" необходимо указать отношения между полями. Подчиненные поля - Table1_Id, Основные поля - "№ (ключ, типа- счетчик)".
Все пользователь со спокойной душой может добавить несколько записей.
Репутация: нет
Всего: 11
Enjoy yourself, still you can. ;)
Репутация: нет
Всего: нет
Репутация: 21
Всего: 21
Anark1, сложность заключается в том, что записи нужно не только добавлять, но и удалять. Писать каждый раз (если принять этот метод для всех подобных случаев) подобный код утомительно (прикинь полей эдак 50-т INSERT-ом).
Можно воспользоваться стандартными возможностями. Быстрее, проще, работает!
- Действия модераторов можно обсудить здесь
- С просьбами о написании курсовой, реферата и т.п. обращаться сюда
- Вопросы по реализации алгоритмов рассматриваются здесь
- Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
Запрещается!
1. Публиковать ссылки на вскрытые компоненты
2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.
[ Время генерации скрипта: 0.1467 ] [ Использовано запросов: 21 ] [ GZIP включён ]
За время работы разработчиком Access набралась куча полезностей, которую считаю своим долгом выложить на Хабр. Многие из этих сниппетов находятся в сети, а некоторые находятся с трудом или безнадежно затеряны.
Указав в виде параметра 0 для отключения и 1 для включения.
2. Для того, чтобы защитить базу данных от посторонних глаз и разграничить права доступа используется файл рабочей группы ( формата .MDW ). Путь к файлу рабочей группы можно указать вручную, но если в сети много пользователей, то гораздо удобнее иметь файлик Access с кнопкой, по нажатию которой отрабатывает одна строка кода, задающая путь к MDW:
3. Не знаю, как бы я работал (наверное, работал бы так же, но гораздо медленнее), если бы не создал себе форму с поиском текста в содержимом запросов или форм. Очень часто необходимо производить какой-то рефакторинг или определять область применения таблицы или поля.
Для поиска по запросам поможет форма с кодом, который выполняет поиск в тексте запросов:
Для поиска по формам код немного объемнее:
4. Для того, чтобы сделать нашу работу чуть более солидной с точки зрения программирования и для возможности поиска ошибок при работе в режиме production на рабочей базе данных очень желательно добавить модуль VBA (tracing модуль) для записи происходящих событий в текстовый файл лога. Простая функция записи в текстовый файл будет очень полезна при отладке.
5. Этот код (из пункта 4) вполне можно вынести в отдельный файл базы данных Access и добавить во все существующие базы данных через References/Ссылки редактора VBA.
Если у вас имеется несколько файлов баз данных Access, то любой повторяющийся код можно вынести в отдельный файл. Единственное изменение, которое может быть необходимо сделать — в случае если в коде используется объект CurrentDb, то заменить его на CodeDb, дабы обращение шло к объектам той базы, которая используется в качестве хранителя общего кода.
6. Зачастую в запросах указывают в качестве параметра значение какого-либо поля открытой формы. Например, таким образом:
Но иногда необходимо указать параметр непосредственно в самом запросе. Сделать это можно так:
И далее из кода Access задать эти параметры и выполнить запрос:
Альтернативой может быть создание модуля VBA и добавление в него глобальной переменной, а также функции, возвращающей эту переменную.
Перед запуском запроса необходимо задать значение глобальной переменной (можно задать при открытии основной формы):
И в самом запросе указать параметром название возвращающей значение функции:
6.1 Этот способ получения параметра запроса можно использовать для частичного ограничения доступа к информации таблицы (в случае использования рабочей группы). При загрузке формы в зависимости от текущего пользователя установим значение глобальной переменной:
Далее установим запрет на просмотр и изменение таблицы demotable, а на запрос установим разрешение. Но так как запрос у нас использует таблицу, на которую нет прав, то данных он нам не вернет. Для того, чтобы он вернул данные необходимо к sql запроса добавить в конце
В результате пользователь Buh сможет иметь доступ ко всем строкам таблицы, а все остальные пользователи ко всем строкам за исключением первой 1000.
7. Для того, чтобы открыть форму из кода используется код:
В качестве «WhereCondition» можно указать условие, на какой записи формы необходимо её открыть (в случае, если форма привязана к данным). Указав, например, «ZakazID=56325», можно открыть форму именно со значением данных ZakazID равным 56325.
В качестве значения «OpenArgs» можно указать какие-либо параметры, которые на открываемой форме можно будет считать
в Private Sub Form_Load() с помощью Me.OpenArgs. Если необходимо передать несколько параметров, то можно передать их в виде текстовой строки, разделив символом. И далее в Private Sub Form_Load() разбить на части:
8. Многие забывают, что Access работает не только таблицами из файлов mdb/accdb, но и с таблицами других баз данных. Для экспорта уже существующих таблиц есть бесплатная утилита SQL Server Migration Assistant, хотя можно воспользоваться и встроенным функционалом или найти стороннее решение.
И напоследок небольшой хинт из разряда «Это знает каждый ребенок, но я вот этого не знал…»:
Знаете ли вы, что для того, чтобы при открытии файла Access не срабатывали макросы и не открывалась форма по умолчанию, необходимо держать нажатой клавишу Shift?
Здравствуйте!
Мне нужно добавить несколько записей в таблицу Access. Использую следующий запрос:
> Мне нужно добавить несколько записей в таблицу Access. Использую
Напиши два запроса и выполни их подряд поочереди.
Разницы никакой нет.
> 'продажа'),
Если я правильно помню, то запятая не нужна.
2. Используй UNION в подзапросе для вставки данных запросом типа "INSERT ZZZ(. ) SELECT . FROM XXX".
(c) Козьма Прутков
Значит Акцес не поддерживает такой синтаксис. Можно попробовать (а Акцесе не спец) воспользоваться таким пакетом:
Операторы insert выполняются в контексте одной транзакции — это важно. Иначе, каждый оператор insert выполняется в своей отдельной транзакции, что сильно замедляет выполнение пакета.
Re[2]: Запрос на добавление нескольких записей в AccessЗдравствуйте, ZAMUNDA, Вы писали:
ZAM>2. Используй UNION в подзапросе для вставки данных запросом типа "INSERT ZZZ(. ) SELECT . FROM XXX".
ZAM>
Я не знаю как в Акцесе, но в MS SQL предложение FROM необязательно, соответсвенно нет необходимости в таблице [blanc]:
Здравствуйте, _d_m_, Вы писали:
___>Я не знаю как в Акцесе, но в MS SQL предложение FROM необязательно, соответсвенно нет необходимости в таблице [blanc]:
МАМАЙ КЛИНУС, ДАРАГОЙ, в MSSQL ЙА БЭЗ Blanс ВИСЁ ДЭЛАЙУ! :-)
Ну мож ещё MSFOX вспомним? Так там ащще мона в массив записать всё и APPEND сделать.
А в Access обязательно указание таблицы, и если в таблице нет записей, то в "SELECT AS Somth FROM blank" набор будет пустым — вот такая ботва.
PS: Транзакций Access'овском SQL тож нет (да вроде и ADO.Connection.BeginTransaction и т.д тож не сработают если к Access подключено).
PPS: Кстати правильно "Blank", опечатался я.
(c) Козьма Прутков Re[4]: Запрос на добавление нескольких записей в Access
Здравствуйте, ZAMUNDA, Вы писали:
ZAM>Здравствуйте, _d_m_, Вы писали:
___>>Я не знаю как в Акцесе, но в MS SQL предложение FROM необязательно, соответсвенно нет необходимости в таблице [blanc]:
ZAM>МАМАЙ КЛИНУС, ДАРАГОЙ, в MSSQL ЙА БЭЗ Blanс ВИСЁ ДЭЛАЙУ!
А что у Мамая был КЛИНУС. На ум приходит только. гхм-гхм . клитор и анус
Re[2]: Запрос на добавление нескольких записей в AccessЗдравствуйте, ZAMUNDA, Вы писали:
ZAM>1. Надо сделать таблицу с одним полем, я её называю обычно "blanc".
ZAM>и добавить в неё одну запись (с любым значением)
ZAM>2. Используй UNION в подзапросе для вставки данных запросом типа "INSERT ZZZ(. ) SELECT . FROM XXX".
ZAM>
Спасибо большое. Все заработало.
Только неудобно немного получается: надо создавать лишнюю таблицу, делать к ней пустое обращение. Но, наверное, сама база так сделана.
А транзакций в Аксесе действительно нет.
ZAM>>МАМАЙ КЛИНУС, ДАРАГОЙ, в MSSQL ЙА БЭЗ Blanс ВИСЁ ДЭЛАЙУ! :-)
___>А что у Мамая был КЛИНУС. На ум приходит только. гхм-гхм . клитор и анус
Клинус -- это ж знаменитый советник Мамая по хозяйственным делам.
Клинус
Знаменитый звездочёт и бухгалтер Клинус, был другом детства Мамая, но судьба разделила их в юношестве -- Мамай поехал учиться военному делу в южные районы Крыма, а Клинус пешком пошёл по берегу моря на запад в Магрибские земли, изучать науки и чародейство. Однако, дружба с воинственным Мамаем оставила свой след, наряду с талантом к наукам, юный Клинус проявлял недюжую ловкость и силу. Некоторые источники сообщают, что именно он стал прототипом Гендальфа из Толкиенистского "Властелина колец".
Окончив обучение в 1360 году, Клинус придумал трусцу и ею отправился обратно в крымское ханство, чтоб найти себе женщину и старого друга Мамика (так он звал Мамая). Через пять лет судьба послала Клинусу окончание пути, а Мамаю власть, чтобы напрячь людей на поиски старого друга Клиныша (он так называл Клинуса). Ещё через год судьба и арабский скакун, чьё имя история умалчивает, обеспечили встречу старых друзей.
Просохнув через месяц и узнав что Клинус неплохо знает математику, Мамай определил старого друга на работу. Клинус быстро втянулся в загадочный мир подсчёта съеденного, лошадьми из канюшен Мамая , овса и наложенного ими же навоза. Однако настоящую революцию он совершил в деле подсчёта необходимого количества людей и лошадей перед первым походом Мамая на русские земли. Это он заложил основы реляционных баз данных, придумав связывать одного солдата и одной или нескольими лошадьми, клинок с одним живым или мёртвым воином и Мамая со множеством сундуков золота.
Умер Клинус в безвестии от удара шальной подковой по темечку, во время куликовской битвы в 1380 г. К сожалению, стан Клинуса был разорён русскими богатырями, которые и использовали по нужде весь папирус с трудами Клинуса.
Вот так-то. Историю учить надо, а не всякую фигню писать. Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков Re[3]: Запрос на добавление нескольких записей в Access Здравствуйте, _Anastasia, Вы писали:
__A>Спасибо большое. Все заработало. )
Пожалуйста. Канешно заработало, я такой финт ушами давно использую.
_A>Только неудобно немного получается: надо создавать лишнюю таблицу, делать к ней пустое обращение.
Неудобно ёжиков рожать! ;-) Удобным должно быть сопровождение, тестирование и (в идеале) рефакторинг — а не написание программы.
Хотите "удобно" -- переходите на MS SQL Server Express.
_A>А транзакций в Аксесе действительно нет.
Ну значит и правда нет. Значит память у меня ещё есть. :) Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков Re[4]: Запрос на добавление нескольких записей в Access _A>>А транзакций в Аксесе действительно нет.
ZAM>Ну значит и правда нет. Значит память у меня ещё есть.
Транзакции в MS Access действительно есть, только в языке Jet SQL они никак не представлены.
А используются они, примерно, так:
Re[5]: Запрос на добавление нескольких записей в Access
_A>>>А транзакций в Аксесе действительно нет.
ZAM>>Ну значит и правда нет. Значит память у меня ещё есть. :)
IK>Транзакции в MS Access действительно есть, только в языке Jet SQL они никак не представлены.
Справка по языку Microsoft Jet SQL
Инструкция TRANSACTION
Используется для запуска и завершения явных транзакций.
Синтаксис
Запускает новую транзакцию.
Заканчивает транзакцию путем завершения всей работы, выполненной в ходе транзакции.
COMMIT [TRANSACTION | WORK]
Заканчивает транзакцию путем свертывания всей работы, выполненной в ходе транзакции.
ROLLBACK [TRANSACTION | WORK]
Дополнительные сведения
Автоматический запуск транзакции невозможен. Чтобы начать транзакцию, ее необходимо явно запустить с помощью инструкции BEGIN TRANSACTION.
Допускается пять уровней вложения транзакций. Чтобы запустить вложенную транзакцию, воспользуйтесь инструкцией BEGIN TRANSACTION в контексте существующей транзакции.
Для присоединенных или связанных таблиц транзакции не поддерживаются.
Используйте кнопку Advanced. на этапе спецификации поля импорта и попробуйте выполнить следующие настройки:
У меня нет точного формата даты на картинке выше, но это просто, чтобы показать, как импортировать эту конкретную дату.
Порядок даты должен быть YMD потому что в ваши даты у вас есть годы, следующие за первым, а затем месяц и дата.
Во время выполнения запроса на изменение Access различает четыре категории ошибок:
1. Дубликаты первичного ключа. Эта категория ошибок возникает при попытке добавления или изменения некоторой записи в таблице, приводя к появлению дублирующего значения первичного ключа или уникального индекса. Access не будет обновлять или добавлять записи, создающие такие значения. Во избежание конфликта перед попыткой добавить такие записи следует изменить значения первичного ключа в исходной таблице.
2. Ошибки преобразования данных. Ошибки этой категории возникают в тех случаях, когда вы вставляете данные в существующую таблицу и при этом оказывается, что тип данных полей-получателей не совпадает с типом данных полей-источников (и данные полей-источников не могут быть преобразованы к типу данных полей-получателей). Например, ошибка возникает, если вы добавляете текстовые значения к полю, содержащему целочисленные данные, а текстовое поле содержит буквенные символы или слишком длинную строку цифровых символов. В запросе на обновление ошибка преобразования может возникнуть, если вы используете формулу, которая пытается произвести вычисления над полем, содержащим буквы.
3. Заблокированные записи.Ошибки этой категории возникают, когда при выполнении запроса на удаление или на обновление вы используете таблицу, к которой имеют доступ другие пользователи сети. Access не может произвести обновление записей, которые в это время обновляются другими пользователями. Вам следует подождать некоторое время и попытаться снова выполнить обновление или удаление в тот момент, когда данные записи больше никто не использует.
4. Нарушение условий на значение.Если вставляемые илиобновляемыезаписи не удовлетворяют условию на значение для некоторогополядля таблицы, Access сообщает вам об ошибке и не производитвставки илиобновления подобных записей.
Контрольные вопросы
1. Что называется запросом?
2. Какими способами можно включить поля таблиц в запрос?
- Как задается условие отбора информации с помощью оператора Like?
- Каким образом можно добавить в бланк запроса строку Групповые операции.
- Какие типы запросов на изменение Вы знаете? Для чего они используются?
- Опишите основные проблемы и ошибки при модификации данных с помощью запросов на изменение.
Не нашли то, что искали? Воспользуйтесь поиском:
Отключите adBlock!
и обновите страницу (F5)
очень нужно
Нарушения ключа. Вы попытались добавить данные в одно или несколько полей, являющихся частью первичного ключа таблицы, такого как поле идентификатора. Проверьте в конструкторе конечной таблицы, выбрано ли для свойства первичного ключа (или другого индекса) Совпадения не допускаются значение Да. Затем убедитесь, что добавляемые данные не нарушают правила конечной таблицы.
Нарушения блокировки. Если конечная таблица открыта в режиме конструктора или открыта другим пользователем в сети, это может привести к блокировке записей и предотвратить выполнение запроса на добавление записей. Убедитесь, что никто не имеет доступа к базе данных.
В таком случае нельзя добавлять записи со значением менее 10.
Дополнительные сведения о создании запросов на добавление см. в статье Добавление записей в таблицу с помощью запроса на добавление.
Читайте также: