Для обеспечения целостности данных необходимо наличие связанной записи в таблице как исправить

Для обеспечения целостности данных необходимо наличие связанной записи в таблице . Что делать?

Andrey Grozov



Ученик

(112),
на голосовании



6 лет назад

Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице

Голосование за лучший ответ

Доктор Акаса

Просветленный

(44347)


6 лет назад

значит есть поля, ссылающиеся на другие таблицы
в этих полях нужно указать корректные данные – соответствующие реальным (существующим) записям или предварительно добавить их в соответствующие таблицы

0 / 0 / 0

Регистрация: 13.03.2012

Сообщений: 6

1

Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице

13.03.2012, 02:31. Показов 55177. Ответов 27


Студворк — интернет-сервис помощи студентам

Есть таблица( в базе “БонусВзыск”) в эту таблицу мне нужно записывать данные из двух других (Взыск_планки, Прем_планки). Связь типа [БонусВзыск (N–1) Взыск(Прем)_планки]. Возникает проблема,при попытке внести записи в таблицу БонусВзыск вылазиет ошибка [“Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице”]. Данные в таблицы Взыск_планки и Прем_планки уже внесены, но пополнение таблицы Бонус Взыск все равно невозможно. Остальная схема данных функционирует правильно. Помогите пожалуйста доделать этот кусочек, часа 4 уже маюсь) Базу прилагаю.



0



Эксперт MS Access

7330 / 4471 / 288

Регистрация: 12.08.2011

Сообщений: 13,528

13.03.2012, 03:02

2

Посмотрите как необходимо делать поля со списками на формах, количество столбцов, ширина, источник данных, присоединённый столбец (обычно ключевое поле). Два ваших поля со списком я исправил, теперь всё работает:

Вложения

Тип файла: rar new.rar (137.8 Кб, 1084 просмотров)



1



0 / 0 / 0

Регистрация: 13.03.2012

Сообщений: 6

13.03.2012, 03:19

 [ТС]

3

Цитата
Сообщение от alvk
Посмотреть сообщение

Посмотрите как необходимо делать поля со списками на формах, количество столбцов, ширина, источник данных, присоединённый столбец (обычно ключевое поле). Два ваших поля со списком я исправил, теперь всё работает:

спасибо большое! а скажите пожалуйста что конкретно было не правильно?почему не добавлял?



0



Эксперт MS Access

7330 / 4471 / 288

Регистрация: 12.08.2011

Сообщений: 13,528

13.03.2012, 04:07

4

Цитата
Сообщение от slava.val
Посмотреть сообщение

а скажите пожалуйста что конкретно было не правильно?

Да практически всё, не тот столбец в источнике данных поля, непонятное where там же…



0



0 / 0 / 0

Регистрация: 13.03.2012

Сообщений: 6

13.03.2012, 04:26

 [ТС]

5

Цитата
Сообщение от alvk
Посмотреть сообщение

Да практически всё, не тот столбец в источнике данных поля, непонятное where там же…

Все!понял,уяснил=) непонятным where я вытягивал исходя из месяца зарплаты величину премиальных и взыскательных ставок( а надо было их ключ. поля, т.е. id) спасибо за помощь, иначе всю ночь бы просидел=)



0



0 / 0 / 0

Регистрация: 19.06.2012

Сообщений: 4

19.06.2012, 17:22

6

Всем привет! Не хочу создавать лишнюю тему – проблема похожа:

Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице

Сама база Учебный процесс.rar
Проблема в том, что при изменении номера группы в таблице “ГРУППА” на (например) 111 выскакивает сообщение об ошибке. Это сквозной пример из учебника, все делал как писали и… такая лажа…



0



0 / 0 / 0

Регистрация: 19.06.2012

Сообщений: 4

19.06.2012, 17:39

7

Цитата
Сообщение от tigor
Посмотреть сообщение

Всем привет! Не хочу создавать лишнюю тему – проблема похожа:
Вложение 163612
Сама база Вложение 163614
Проблема в том, что при изменении номера группы в таблице “ГРУППА” на (например) 111 выскакивает сообщение об ошибке. Это сквозной пример из учебника, все делал как писали и… такая лажа…

Вот схема данных:

Миниатюры

Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице
 



0



Эксперт MS Access

7330 / 4471 / 288

Регистрация: 12.08.2011

Сообщений: 13,528

20.06.2012, 02:27

8

1. Выкладывайте в следующий раз mdb, больше форумчан сможет помочь. Да и мне конвертить не надо будет.
2. Уберите текстовые ключи, либо добавьте во все таблицы поле Код с типом счётчик, что майкрософт вам изначально предлагал, но вы почему-то проигнорировали.
3. Если такое безобразие написано в учебнике, т.е. все ключевые поля текстовые и кругом беспорядочные (половые) связи – сожгите этот учебник и купите другой.
4. Когда добавите нормальные ключи – можно будет перестроить схему, треугольник с успеваемостью изменится кардинально.

Миниатюры

Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице
 

Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице
 



1



0 / 0 / 0

Регистрация: 19.06.2012

Сообщений: 4

20.06.2012, 10:19

9

Спасибо большое за советы! Я пока только изучаю Акс, поэтому пока слепо следую сквозному примеру. Может эти лишние “чудеса” сделаны специально, чтобы, например, показать составные ключи….

Вчера вечером поковырял под футбол (наши продули, но достойно). Так вот, в таблице ГРУППА дает изменить номер группы (что и задано), начиная со второй строки. А первую – зась.О_о



0



Эксперт MS Access

7330 / 4471 / 288

Регистрация: 12.08.2011

Сообщений: 13,528

20.06.2012, 10:40

10

Определитесь с форумом – я не хочу отвечать и там и там, это запутывает. Либо дублируйте свои ответы.
А спасибо выставляется кнопкой ниже сообщения.

Не по теме:

p.s. если бы без махинаций гол засчитали, то неизвестно ещё чем бы кончилось.



1



pryvad

24.06.2012, 13:50

11

у меня похожая проблема… не понял из переписки как она решена, можно еще для чайника на моем примере разобрать? Построил форму на основе таблиц СписокЗаказов и Справочник. Ругается что “Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице Поставщики”. Не могу понять что надо…

Миниатюры

Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице
 

0 / 0 / 0

Регистрация: 19.06.2012

Сообщений: 4

24.06.2012, 21:52

12

мой вопрос никак не решили, сказали все выкинуть

короче, я просто пошел по примеру дальше



0



Эксперт MS Access

7330 / 4471 / 288

Регистрация: 12.08.2011

Сообщений: 13,528

25.06.2012, 06:30

13

Цитата
Сообщение от pryvad
Посмотреть сообщение

Построил форму на основе таблиц СписокЗаказов и Справочник.

Я рад за вас. А мне её покажете?



0



0 / 0 / 0

Регистрация: 13.03.2016

Сообщений: 14

13.03.2016, 18:03

14

Похожая проблема что с этим делать7



0



0 / 0 / 0

Регистрация: 13.03.2016

Сообщений: 14

13.03.2016, 18:05

15

вот скрин

Миниатюры

Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице
 



0



шапоклякистка 8-го дня

3675 / 2235 / 391

Регистрация: 26.06.2015

Сообщений: 4,647

Записей в блоге: 1

13.03.2016, 18:09

16

Цитата
Сообщение от JACK-001
Посмотреть сообщение

что с этим делать7

Не добавлять в зависимую таблицу такое значение внешнего ключа, которого нет в главной таблице.

Добавлено через 1 минуту
В случае на скриншоте в таблице “Вид контроля” нет строки с кодом 2.



0



0 / 0 / 0

Регистрация: 13.03.2016

Сообщений: 14

13.03.2016, 18:15

17

Цитата
Сообщение от texnik-san
Посмотреть сообщение

Не добавлять в зависимую таблицу такое значение внешнего ключа, которого нет в главной таблице.

Добавлено через 1 минуту
В случае на скриншоте в таблице “Вид контроля” нет строки с кодом 2.

как исправить данную ошибку?
я только начинаю изучать access и не многое знаю



0



шапоклякистка 8-го дня

3675 / 2235 / 391

Регистрация: 26.06.2015

Сообщений: 4,647

Записей в блоге: 1

13.03.2016, 18:26

18

Цитата
Сообщение от JACK-001
Посмотреть сообщение

как исправить данную ошибку?

Локальный ответ: Выбрать другую цифру в поле “код контроля”. Такую, какая в таблице “Вид контроля” есть.

Глобальный ответ: Не пытаться вводить данные прямо в таблицу. Создать форму, в которой для выбора значений из связанных таблиц использовать элемент управления “поле со списком”. Правильно настроив свойства этого элемента управления вы сможете выбирать только те значения, которые есть в связанной таблице.

Добавлено через 1 минуту

Цитата
Сообщение от texnik-san
Посмотреть сообщение

Такую, какая в таблице “Вид контроля” есть.

Посмотрела ваш файл. В таблице “Вид контроля” записей вообще нет. Пока они там не появятся, вы не сможете ввести в поле “Код контроля” вообще никакую цифру.



1



0 / 0 / 0

Регистрация: 13.03.2016

Сообщений: 14

13.03.2016, 18:31

19

Спасибо все понял



0



0 / 0 / 0

Регистрация: 11.10.2015

Сообщений: 1

13.03.2016, 18:33

20

Здравствуйте, пополняю записи в таблицу Депозит или Кредит тоже такая ошибка “для обеспечения целостности данных необходимо наличие связанной записи в таблице” не получается можете помочь плиз



0



61K

09 мая 2010 года

NaMhsIRI

1 / / 09.05.2010

Добрый день. Мне хотелось бы добавить вопрос по этой теме.
live22h не зря заметил, что у разработчиков были веские аргументы, что бы по умолчанию использовать инкремент с шагом -1. Дело в том что это, так называемые, фиктивные индексы. По умолчанию они не передаются в базу данных, так как база сама генерирует индексы ключа. И что бы не вводить в заблуждение пользователей обычно их делают отрицательными.

Обычно инкремент индекса в базе данных происходит с шагом +1, поэтому решение проблемы, предложенное live22h, в какой то степени, верное. Фактически мы делаем шаг инкремента в нашем датасет таким же как и в базе. Но все таки это не лучшее решение.

Приведу пример. Допустим у нас есть 2 связанные таблицы (родительская с первичным ключом, и дочерняя). Добавим строку в родительскую таблицу, пусть там уже было 10 записей, поэтому значение ключа у новой строки будет 11. Затем добавим строку в дочернюю таблицу, у нее есть поле которое ссылается на индекс строки из родительской таблицы: 11.
Затем сделаем это еще раз. Еще одну строку в родительскую – значение ключа станет 12, и еще одну строку в дочернюю таблицу с ссылкой на строку родительской таблицы с индексом 12. А теперь удалим первые добавленные строки из таблиц, а уже потом попробуем передать новые данные в базу.

Возникнет ошибка, база добавит новую строку в родительскую таблицу и установит значение ключа равным 11. Однако в дочерней таблице мы все еще ссылаемся на строку с индексом 12.

А теперь вопрос. Как передать правильные значения ключа в дочернюю таблицу, желательно что бы обновление данных происходило за один раз.

Обеспечение целостности данных

В Microsoft Access обеспечивается возможность автоматической проверки целостности данных в связанных полях. Целостность даных означает систему правил, используемых для поддержания связей между записями в связанных таблицах, а также для обеспечения защиты от случайного удаления или изменения связанных данных. Установить проверку целостности данных можно, если выполнены следующие условия:

  • связанное поле главной таблицы является ключевым полем или имеет уникальный индекс;
  • связанные поля имеют один тип данных. Здесь существует два исключения. Поле счетчика может быть связано с числовым полем, если в последнем поле в свойстве Размер поля (FieldSize) указано значение Длинное целое (Long Integer), или в обоих полях свойство Размер поля (FieldSize) имеет значение Код репликации (Replication ID);
  • обе таблицы принадлежат одной базе данных Microsoft Access.

Таблицы одного приложения могут содержаться и в нескольких файлах базы данных (см. также гл. 3).

Чтобы обеспечить целостность, работа с данными должна производиться с учетом нижеперечисленных правил.

  • Невозможно ввести в связанное поле подчиненной таблицы значение, отсутствующее в связанном поле главной таблицы. Однако можно ввести пустое значение, показывающее, что для данной записи связь отсутствует.
  • Не допускается удаление записи из главной таблицы, если существуют связанные с ней записи в подчиненной таблице.
  • Невозможно изменить значение ключевого поля в главной таблице, если существуют записи, связанные с данной таблицей.

Чтобы эти правила контролировались для конкретной связи, при ее создании следует установить флажок Обеспечение целостности данных (Enforce Referential Integrity). Тогда любая попытка выполнить действие, нарушающее одно из перечисленных выше правил, приведет к выводу на экран предупреждения, а само действие выполнено не будет.

Чтобы преодолеть ограничения на удаление или изменение связанных записей, сохраняя при этом целостность данных, следует установить флажки каскадное обновление связанных полей (Cascade Update Related Fields) и каскадное удаление связанных записей (Cascade Delete Related Records). Если установлен флажок каскадное обновление связанных полей (Cascade Update Related Fields), то при изменении ключевого поля главной таблицы автоматически будут изменены и соответствующие значения поля связанных записей. Если установлен флажок каскадное удаление связанных записей (Cascade Delete Related Records), то при удалении записи в главной таблице удаляются и все связанные записи в подчиненной таблице.

Целостность данных

Целостность данных означает систему правил, используемых в СУБД Access для поддержания связей между записями в связанных таблицах, а также обеспечивает защиту от случайного удаления или изменения связанных.

Контролировать целостность данных можно, если выполнены следующие условия:

  • · связанное поле (поле, посредством которого осуществляется связь) одной таблицы является ключевым полем или имеет уникальный индекс;
  • · связанные поля имеют один тип данных.

Здесь существует исключение. Поле счетчика может быть связано с числовым полем, если оно имеет тип Длинное целое; обе таблицы принадлежат одной базе данных Access. Если таблицы являются связанными, то они должны быть таблицами Access.

Для установки целостности данных база данных, в которой находятся таблицы, должна быть открыта. Для связанных таблиц из баз данных других форматов установить целостность данных невозможно.

Виды связей. В Access можно задать три вида связей между таблицами:

  • · Один-ко-многим,
  • · Мно-гие-ко-многим
  • · Один-к-одному.

Связь Один-ко-многим — наиболее часто используемый тип связи между таблицами. В такой связи каждой записи в таблице А может соответствовать несколько записей в таблице В (поля с этими записями называют внешними ключами), а запись в таблице В не может иметь более одной соответствующей ей записи в таблице А.

При связи Многие-ко-многим одной записи в таблице А может соответствовать несколько записей в таблице В, а одной записи в таблице В — несколько записей в таблице такая схема реализуется только с помощью третьей (связующей) таблицы, ключ которой состоит по крайней мере из двух полей, одно из которых является общим с таблицей А, а другое — общим с таблицей В.

При связи Один-к-одному запись в таблице А может иметь не более одной связанной записи в таблице В и наоборот.

Этот тип связи используют не очень часто, поскольку такие такие могут быть помещены в одну таблицу.

Связь с отношением Один-к-одному пример для разделения очень широких таблиц, для отделения части таблицы в целях ее защиты, также для сохранения сведений, относящихся к подмножеству записей в главной таблице.

Тип создаваемой связи зависит от полей, для которых определяется связь:

ь связь Один-ко-многим создается в том случае, когда только одно из полей является ключевым или имеет уникальный индекс, т.е. значения в нем не повторяются; связь Один-к-одному создается в том случае, когда оба связываемых поля являются ключевыми или имеют уникальные индексы;

ь связь Многие-ко-многим фактически представляет две связи типа один-ко-многим через третью таблицу, ключ которой состоит по крайней мере из двух полей, общих для двух других таблиц.

СУБД Microsoft Access (MS Access) относится к системам, ориентированным на пользователя.

Среда MS ACCESS 2000

Рис.1. Среда MS ACCESS 2000.

Будем рассматривать СУБД Access как специализированного исполнителя, назначение которого — работа с реляционными базами данных. Среда MS Access представлена на рис.1.

Среда Access имеет интерфейс, характерный для Windows-приложений, и включает в себя следующие составляющие (сверху вниз): титульную строку с кнопками управления окном, главное меню, панель инструментов, рабочее поле и строку состояния.

На рабочем поле открывается окно, соответствующее выбранному режиму работы. На рис. 1 открыто окно, соответствующее основному режиму — режиму работы с базой данных.

Основные объекты MS Access: таблицы, запросы, формы, отчеты, макросы и модули.

Таблица — это главный тип объекта. Все остальные разновидности объектов являются производными от таблицы. Объекты, составляющие таблицу, — это записи и поля. Свойства элементов таблицы определяются типами полей, форматами полей и некоторыми другими параметрами.

Форма — это вспомогательный объект, без которого, в принципе, можно обойтись. Формы создаются для дополнительного удобства пользователя при просмотре, вводе и редактировании данных.

Запрос — результат обращения пользователя к СУБД для поиска данных, добавления, удаления и обновления записей. Результат поиска (выборки) данных представляется в табличном виде. Термином «запрос» называют также сами команды обращения к СУБД.

Отчет — это документ, предназначенный для вывода на печать, сформированный на основании информации, содержащейся в таблицах и запросах.

Макросы и модули являются объектами повышенной сложности и при начальном знакомстве с MS Access могут не использоваться.

Еще одним объектом является схема — описание структуры связей в многотабличной базе данных.

Режимы работы СУБД Access многообразны. Есть режимы общего характера: работа с файлами (меню Файл); работа с буфером обмена (меню Правка); режим настройки среды (меню Вид); справочный режим (меню Справка).

Основным режимом можно назвать режим работы с базой данных. Он устанавливается командой Файл > Создать базу данных или Файл > Открыть базу данных.

Поскольку база данных хранится в файле, в первом случае система потребует задать имя и место хранения файла, а во втором случае — указать на существующий файл с базой данных.

После раскрытия на экране окна базы данных (рис. 1.2) становятся доступными режимы работы с основными объектами Access: таблицами, запросами, формами и отчетами. В каждом из этих режимов можно выбрать одну из трех командных кнопок: Открыть, Конструктор, Создать.

Если соответствующий объект еще не создан, то активной является только команда Создать. Если в окне выделен какой-то из существующих объектов, то активными будут также команды Открыть и Конструктор. Команда Открыть позволяет просмотреть объект, а команда Конструктор — просмотреть или изменить структуру объекта.

В столбец «имя поля» мы будем заносить имена столбцов нашей будущей таблицы (при этом нельзя использовать некоторые символы, в том числе точки и запятые). В столбце «тип данных» будем выбирать (используя кнопку вызова списка) тип данных. А то, что заносится в столбец «описание» затем появляется, в виде комментариев, в строке состояния (для проверки в одной из строк этого столбца напишите фразу: моя первая база данных).

Как видно, из ниже перечисленных данных, нам необходимо создать следующие поля:

Целостность данных. Ограничения, возникающие при задании целостности данных

Включение флажка “Обеспечение целостности данных “позволяет защититься от случаев удаления записей из одной таблицы, при которых связанные с ними данные других таблиц останутся без связи.

Целостность данных – система правил, используемых в MS Access для поддержания связей между записями в связанных таблицах, а также обеспечивает защиту от случайного удаления или изменения связанных данных.

Установить целостность данных можно, если выполнены следующие условия:

1. Связанное поле главной таблицы является ключевым полем или имеет уникальный индекс.

2. Связанные поля имеют один тип данных. Здесь существует два исключения. Поле счетчика может быть связано с числовым полем, если в последнем в свойстве “Размер поля “(FieldSize) указано значение “Длинное целое”. А также поле счетчика можно связать с числовым полем, если и в обеих ячейках свойства “Размер поля” (FieldSize) задано значение “Код репликации”.

3. Обе таблицы принадлежат одной базе данных MS Access. Если таблицы являются связанными, то они должны быть таблицами MS Access. Для установки целостности данных база данных, в которой находятся таблицы, должна быть открыта. Для связанных таблиц из баз данных других форматов установить целостность данных стандартными средствами MS Access невозможно.

Установив целостность данных, необходимо следовать следующим правилам:

1. Невозможно ввести в поле внешнего ключа связанной таблицы значение, не содержащееся в ключевом поле главной таблицы. Однако в поле внешнего ключа возможен ввод пустых значений, показывающих, что записи не являются связанными. Например, нельзя сохранить запись, регистрирующую заказ, сделанный несуществующим клиентом, но можно создать запись для заказа, который пока не отнесен ни к одному из клиентов, если ввести пустое значение в поле “Код Клиента”.

2. Не допускается удаление записи из главной таблицы, если существуют связанные с ней записи в подчиненной таблице. Например, невозможно удалить запись из таблицы “Сотрудники”, если в таблице “Заказы” имеются заказы, относящиеся к данному сотруднику.

3. Невозможно изменить значение ключевого поля в главной таблице, если существуют записи, связанные с данной. Например, невозможно изменить код сотрудника в таблице “Сотрудники”, если в таблице “Заказы” имеются заказы, относящиеся к этому сотруднику.

Чтобы наложить эти правила на конкретную связь, при ее создании следует установить флажок. Если данный флажок установлен, то любая попытка выполнить действие, нарушающее одно из перечисленных выше правил, приведет к выводу на экран предупреждения, а само действие выполнено не будет.

Параметры объединения таблиц

При добавлении таблицы в запрос в MicrosoftOfficeAccess 2007 создаются объединения, которые базируются на связях между таблицами. Объединения в запросах можно создавать вручную, даже если они не отражают заранее определенные связи. При использовании других запросов (независимо от таблиц или вместе с ними) в качестве источника данных для запросов можно создавать объединения между исходными запросами, а также между запросами и таблицами, которые используются в качестве источников данных.

Существует четыре основных типа объединений:

Внутренние объединения представляют собой запросы, в которых строки одной из объединяемых таблиц соответствуют строкам другой таблицы по значениям в связанных полях. При выполнении запроса с внутренним объединением в операцию включаются только строки, имеющие одинаковые значения в обеих связанных таблицах. Внутреннее объединение используется в том случае, когда запрос должен возвращать только те строки обеих таблиц объединения, значения связанных полей которых совпадают. В большинстве случаев для использования внутреннего объединения не нужно предпринимать каких-либо действий. Если ранее в окне схемы данных были созданы связи между таблицами, то при добавлении связанных таблиц в режиме конструктора запроса линии объединения создаются автоматически. Если накладываются условия целостности данных, то над линией объединения автоматически отображается цифра «1», означающая, что таблица находится на стороне «один» в отношении «один-ко-многим», а также знак бесконечности ∞ для указания таблиц, находящихся на стороне «многие». Даже если связи не были созданы, внутренние объединения будут созданы автоматически.

Внешние объединения представляют собой запросы, в которые включаются все строки одной таблицы, а также строки другой таблицы, значения которых в первой и второй таблице совпадают, несмотря на то, что некоторые из строк с обеих сторон полностью совпадают. Внешние объединения являются направленными, они могут быть левыми или правыми. При левом объединении в запрос включаются все строки таблицы из первой таблицы в предложении FROM инструкции SQL, и только те строки из другой таблицы, в которых значения связанных полей совпадают. При правом объединении в запрос включаются все строки из второй таблицы в предложении FROM инструкции SQL, и только те строки из другой таблицы, в которых значения связанных полей совпадают. Внешнее объединение используется, когда возникнет необходимость, чтобы в результаты объединения были включены все строки одной из таблиц и только те строки другой таблицы, значения связанных полей в которых соответствуют значениям связанных полей в первой таблице. Внешние объединения создаются путем изменения внутренних объединений.

Перекрестное объединение: каждая строка из одной таблицы объединяется с каждой строкой из другой таблицы, в результате это приводит к тому, что называется полным объединением или декартовым произведением. Используйте перекрестные объединения, чтобы проверить все возможные комбинации строк двух таблиц или запросов. Перекрестное объединение создается каждый раз, когда в запрос включаются таблицы или запросы и при этом не создается явного объединения для каждой таблицы или запроса.

Объединение по несовпадению. Объединения не всегда базируются на соотношении равенства связываемых полей. Объединение может базироваться на любом операторе сравнения, например, «больше» (>), «меньше» (<) или «не равно» (<>). Объединения, базирующиеся на неравенстве, называются объединениями по несовпадению.

Если требуется скомбинировать строки из двух источников данных на основе значений полей, которые не равны, используется объединение по несовпадению. Обычно объединения по несовпадению базируются на операторах сравнения «больше» (>), «меньше» (<), «больше или равно» (>=) или «меньше или равно» (<=). Объединения по несовпадению, базирующиеся на операторе «не равно» (<>), могут вернуть почти столько же строк, как перекрестное объединение, и их результаты будет трудно интерпретировать.

Дата добавления: 2018-02-28 ; просмотров: 564 ; Мы поможем в написании вашей работы!


Форум программистов Vingrad

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Добавление данных в таблицы по технологии ADO, Не получается с добавлением данных. 

V

   

Опции темы

ivanfr
  Дата 10.3.2011, 12:32 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

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

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

Проблема такая: есть две связные таблицы схему можно посмотреть на рисунке
Ссылка на схему данных http://s2.ipicture.ru/uploads/20110310/RZDK9VHM.jpg

используя ниже приведенный код я запишу данные в соответствующие столбцы, но так как у меня таблицы связные один ко многим, 
то данные запишутся отдельно каждые в свою таблицу и связи между ними не будет. 
А хотелось, чтобы в ячейку ФИО подставлялось значение из таблицы автоматом(чтобы связь была).
Как исправить?

Код

Form2.ADOTable_persona_stor.Append;
  Form2.ADOTable_persona_stor.FieldByName('Дата увольнения').AsDateTime:=StrToDate(temp_data_from_xls[1]);
  Form2.ADOTable_persona_stor.FieldByName('ФИО работника').AsString:=temp_data_from_xls[2];  // при такой записи будет ошибка, потому что числовое значение, так как идет подстановка из другой таблицы.
  Form2.ADOTable_persona_stor.FieldByName('Табельный номер').AsInteger:=StrToInt(temp_data_from_xls[3]);
  Form2.ADOTable_fio_work.Append;
  Form2.ADOTable_fio_work.FieldByName('ФИО').AsString:=temp_data_from_xls[2];
 Form2.ADOTable_fio_work.Post
  Form2.ADOTable_persona_stor.Post;

 

PM MAIL   Вверх
Antimol
Дата 10.3.2011, 13:22 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 118
Регистрация: 28.7.2007
Где: Украина, Киев

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

Извини но не вчитывался в код. Я бы решил это 2-мя запросами, но сперва:
1. переименовал бы названия полей.(хотя бы транслитом)
2. Если мне не изменяет память Access ставит связи нормально (на против того что связано), тогда во второй таблице поле не ФИО работника, а его id (название немного вводит в заблуждение)

Самое первое что приходит на ум:
1. если у нас поле в первой табл. id_fio_work – счетчик, тогда следует, иначе к П.2: 
  1.1. добавить новую запись 
  1.2. прочитать id последней записи
  1.3. переходим на П.3.
2. если у нас поле в первой табл. id_fio_work  не счетчик – тогда:
  2.1. выбираем максимальный элемент id_fio_work 
  2.2. вставляем данные в первую таблицу
  2.3. переходим на П.3.
3. С пункта 1 или 2 мы узнали id_fio_work
  3.1. Вставляем с помощью запроса данные во вторую таблицу

Данный пример работает стабильно при монопольном доступе, если пользователей много и они используют эту программу, может возникнуть ситуация когда нескольким пользователям вернется значение одного и того же id.

По поводу ошибок:

Цитата

Код

Form2.ADOTable_persona_stor.FieldByName('ФИО работника').AsString:=temp_data_from_xls[2];  // при такой записи будет ошибка, потому что числовое значение, так как идет подстановка из другой таблицы.

 может не AsString а Value, а если нужно чтобы было String, так IntToStr(temp_data_from_xls[2]) если нужно Integer перевести в String…

Программа наверно для экспорта данных из Excel в Access

——————–

Лучшее спасибо это “+” к репутации.   Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи….

PM MAIL WWW ICQ   Вверх
ivanfr
Дата 11.3.2011, 12:24 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

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

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

 

Схема данных в бд http://s1.ipicture.ru/uploads/20110311/cVw4tCvD.jpg

Код

DataModule1.ADOTable_fio_work.Insert;
  DataModule1.ADOTable_fio_work.FieldByName('fio_work').AsString:=temp_data_from_xls[3];
  DataModule1.ADOTable_fio_work.Post;
  DataModule1.ADOTable_persona_stor.Insert;
  DataModule1.ADOTable_persona_stor.FieldByName('date_uvolnenie').AsDateTime:=StrToDate(temp_data_from_xls[2]);
  DataModule1.ADOTable_persona_stor.FieldByName('id_fio_work').AsInteger:=DataModule1.ADOTable_fio_work.RecordCount;
  DataModule1.ADOTable_persona_stor.FieldByName('tabel_nomer').AsInteger:=strtoint(temp_data_from_xls[4]);
  DataModule1.ADOTable_persona_stor.Post;/// выдет ошибку First chance exception at $7C812AFB. Exception class EOleException with message 'Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице 'fio_work''. Process uvol_work.exe (3312)

Как быть?

Это сообщение отредактировал(а) ivanfr – 11.3.2011, 14:02

PM MAIL   Вверх
Antimol
Дата 11.3.2011, 17:15 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 118
Регистрация: 28.7.2007
Где: Украина, Киев

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

Цитата
DataModule1.ADOTable_persona_stor.FieldByName(‘id_fio_work’).AsInteger:=DataModule1.ADOTable_fio_work.RecordCount;

Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице ‘fio_work”. Process uvol_work.exe (3312)

RecordCount – не всегда совпадает с id таблицы, про что свидетельствует  сообщение об ошибке.

можно попробовать так

Код

DataModule1.ADOTable_fio_work.FieldByName('id_fio_work').AsInteger

——————–

Лучшее спасибо это “+” к репутации.   Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи….

PM MAIL WWW ICQ   Вверх
ivanfr
Дата 14.3.2011, 08:45 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

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

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

Благодарю. Пока все работает как надо.  Вопрос закрыт

PM MAIL   Вверх
Antimol
Дата 14.3.2011, 10:37 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 118
Регистрация: 28.7.2007
Где: Украина, Киев

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

Пожалуйста  smile , лучше бы рейтингом поблагодарил  smile , ну да ладно.

Проблему я вижу одну, при вставке в первую таблицу, не ясно на последнюю запись мы переходим, или остаемся на той же. Если переходим – все отлично. Если нет – привязка будет только к одному пользователю в первой таблица, на котором мы “стоим” в данный момент

——————–

Лучшее спасибо это “+” к репутации.   Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи….

PM MAIL WWW ICQ   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума “Delphi: Базы данных и репортинг”
Vit
Петрович

Запрещено:

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

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

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

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

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

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

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


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

 

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

Добавить комментарий