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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2018, 23:44   #1
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию Нарушение целостности данных в БД

Доброго времени суток, Уважаемые эксперты. Есть программа на Delphi и БД Access. Таблицы связны между собой. При добавлении новой строки и сохранении изменений появляется сообщения "Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице [имя таблицы]". Как это можно побороть?

Я как обычно делаю добавление и заполнение новой строки:
Код:
  Form1.DataSource1.DataSet.Edit;
  Form1.DataSource2.DataSet.Edit;
  Form1.DataSource1.DataSet.Insert;
  Form1.DataSource1.DataSet.FieldbyName('ID').AsString:=IntToStr(j);
  Form1.DataSource1.DataSet.FieldbyName('29;').AsString:=S2;
  Form1.DataSource1.DataSet.FieldbyName('252;').AsString:=S3;
  Form1.DataSource1.DataSet.FieldbyName('251;').AsString:=S4;
  Form1.DataSource1.DataSet.FieldbyName('229;').AsBoolean:=q;
  Form1.DataSource1.DataSet.FieldbyName('229;').AsString:=S5;
  Form1.DataSource1.DataSet.Post;
Весь проект так же прилагаю:
Программа

Для проверки необходимо нажать кнопку "банк недвижимости", а потом кнопку "new" - именно там ошибка появляется. Заранее спасибо всем откливнувшимся!

Последний раз редактировалось Armageddets; 12.02.2018 в 23:57.
Armageddets вне форума Ответить с цитированием
Старый 13.02.2018, 09:13   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Для обеспечения целостности данных необходимо наличие связанной записи в таблице [имя таблицы]". Как это можно побороть?
задать правильное (имеющееся в БД) значение для ссылочного поля(полей).
http://programmersforum.ru/showthread.php?t=276824
посты #6, #8
Цитата:
Код:

j:=0;
  for i:=0 to Form1.DataSource2.Dataset.RecordCount-1 do
  begin
    if Form1.DataSource2.Dataset.FieldbyName('Тип').asString=s1 then j:=i;//значение поля НЕ обязательно должно совпадать с "порядковым" номером записи
  end;
Код:
if form1.DataSource2.DataSet.Locate('Тип', s1) then j:=Form1.DataSource2.DataSet.FieldByName('ID').AsInteger else j:=-1;
Цитата:
Код:
Form1.DataSource1.DataSet.FieldbyName('ТипID').AsString:=IntToStr(j);
Код:
Form1.DataSource1.DataSet.FieldbyName('ТипID').Value:=j;// но останутся те же проблемы(целостность) если мы почему-то не найдем нужной записи по Locate (или еще как-либо)
или же в ветке if Locate.. then begin
Код:
Form1.DataSource1.DataSet.FieldbyName('ТипID').AsInteger:= {j;} Form1.DataSource2.DataSet.FieldByName('ID').AsInteger;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 13.02.2018 в 09:48.
evg_m на форуме Ответить с цитированием
Старый 13.02.2018, 09:19   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А что это за шифрованные имена у полей - 251;? Как, удобно с такими работать ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.02.2018, 10:04   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
А что это за шифрованные имена у полей - 251;? Как, удобно с такими работать ))
это проблема переноса(копирования) НЕ англоязычных .
Цитата:
Код:
Form1.DataSource1.DataSet.FieldbyName('ТипID').AsString:=IntToStr(j);
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 13.02.2018, 10:14   #5
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

Спасибо, evg_m. Сейчас буду разбираться и пробовать.

Да, это из за переноса кода из делфи на форум, там длинные названия получались и я просто их сократил, удалив лишнее. Чтобы такого не было - нужно через блокнот открыть pas файл и скинуть напрямую.
Armageddets вне форума Ответить с цитированием
Старый 13.02.2018, 10:32   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Можно напрямую из делфи переключив раскладку в кириллицу и только потом копировать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Невозможно удаление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной Анжеликааа Microsoft Office Access 3 25.11.2014 21:35
Проверка целостности файлов (c++) Jirogirg Помощь студентам 5 19.05.2013 20:11
Ограничения целостности MySQL sl1mka Помощь студентам 0 30.10.2011 16:39
Ошибка целостности Aleksey1989 БД в Delphi 2 05.06.2011 07:28
Проверка целостности файлов trech85 Общие вопросы Delphi 1 28.11.2008 19:08