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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2010, 18:23   #11
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

У тебя обе таблицы пусты или уже наполнены данными? Если уже наполнены какими-либо данными, то рассмотрим такой вариант. Есть ли у тебя в таблице passport записи со значениями fioid, которых нет в таблице fio?
В общем, выполни такой запрос:
Код:
  SELECT * 
      FROM passport 
    WHERE fioid NOT IN
        ( SELECT UID 
              FROM fio )
Данный запрос вернет все записи из таблицы passport, которые не связаны по ключевому полю с таблицей fio. Если таковые имеются, то, скорее всего в этом и заключается твоя проблема. Таких записей быть не должно. Значит либо удаляешь лишние записи из таблицы passport, либо восстанавливаешь недостающие записи в таблице fio. Делаешь это до тех пор, пока вышеприведенный запрос не вернет ни одной записи. Затем пытаешься еще раз выполнить свой запрос:
Код:
  ALTER TABLE passport
     ADD CONSTRAINT FK_fioid
  FOREIGN KEY ( fioid ) REFERENCES fio ( UID )
edgy вне форума Ответить с цитированием
Старый 18.05.2010, 23:55   #12
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

у меня в таблице passport 5 записей(1.2.3.4.5)а в таблице fio 7-8,но тут счет идет уже с 15-и.и при запросе
Код:
SELECT * 
      FROM passport 
    WHERE fioid NOT IN
        ( SELECT UID 
              FROM fio )
он конечно же возвращает мне все записи из passport...я че то не понял?у меня же там значения пока не должны совпадать?я же не связал их?я хочу связять их и потом удалить все записи из всех таблиц и начать по новой и тогда у меня будут совпадать все FK из всех таблиц с PK из таблицы fio.
я тут щас пробовал и вот че,когда я поменял столбей(fioid) в таблице пасспорт,просто сделал его не идентефицирующим и оставил просто как bigint,и после это сделал
Код:
 ALTER TABLE passport
     ADD CONSTRAINT FK_fioid
  FOREIGN KEY ( fioid ) REFERENCES fio ( UID )
тогда он выдал что объект passport не существует типа,из за чего это?
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны

Последний раз редактировалось betirsolt; 19.05.2010 в 00:04.
betirsolt вне форума Ответить с цитированием
Старый 19.05.2010, 07:10   #13
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Цитата:
Сообщение от betirsolt Посмотреть сообщение
он конечно же возвращает мне все записи из passport...
Вот в этом и заключается твоя проблема. Факт нарушения ссылочной целостности. В дочерней таблице есть записи, для которых нет соответствующих записей в родительской таблице.

Цитата:
Сообщение от betirsolt Посмотреть сообщение
у меня же там значения пока не должны совпадать?
Кто тебе это сказал? Если ты хочешь задать FK, то они у тебя как раз и должны совпадать.

Цитата:
Сообщение от betirsolt Посмотреть сообщение
я же не связал их?
Для того чтобы сделать выборку из двух таблиц - необязательно задавать FK, хотя они и указывают на явное наличие связей между таблицами. Внешние ключи обеспечивают целостность данных, тогда как в противном случае ( если не задать FK ) тебе за этим придется следить самому.

Цитата:
Сообщение от betirsolt Посмотреть сообщение
я хочу связять их и потом удалить все записи из всех таблиц и начать по новой и тогда у меня будут совпадать все FK из всех таблиц с PK из таблицы fio.
Неправильный порядок действий. Сперва удаляешь все записи из таблиц (я так понял у тебя там все равно тестовые данные), затем добавляешь FK, и потом начинаешь наполнять таблицы данными.


Цитата:
Сообщение от betirsolt Посмотреть сообщение
я тут щас пробовал и вот че,когда я поменял столбей(fioid) в таблице пасспорт,просто сделал его не идентефицирующим и оставил просто как bigint,и после это сделал
Сперва разберись с данными в таблицах. Устрани нарушения ссылочной целостности. А потом если будет нужно, то пробежимся и по структуре таблиц.
edgy вне форума Ответить с цитированием
Старый 20.05.2010, 19:14   #14
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

ну когда я задам FK сервер разве не следит сам за тем чтоб данные в PK таблицы FIO и FK других таблиц совпадали?короче я запутался,давайте сначала,я удалил все записи из таблиц,и теперь у меня только один PK в таблице fio а в остальных никаких ключей и отношений нет.что делать теперь?по шагам если можно
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 21.05.2010, 06:47   #15
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Цитата:
Сообщение от betirsolt Посмотреть сообщение
ну когда я задам FK
Вот именно - когда задашь...
А пока ты не смог задать FK (вернее, это тебе сервер не позволил) потому что имелись нарушения ссылочной целостности.
Теперь после того, как ты удалил все записи из родительской и дочерней таблиц попробуй снова выполнить:
Код:
ALTER TABLE passport
 ADD CONSTRAINT FK_fioid
FOREIGN KEY ( fioid ) REFERENCES fio ( UID )
edgy вне форума Ответить с цитированием
Старый 21.05.2010, 19:48   #16
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

вот теперь команда выполнена успешно))и у меня в таблице теперь FK который ссылается на PK таблицы fio,все верно?значит я должен точно также добавить FK и в другие таблицы?

блин теперь проблема с инсертом((когда я в своей проге заполняю все данные и нажимаю ОК то дельфи выдает конфликт инструкции инсерт с ограничением внешнего ключа K_FIOID....блин что же такое?
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны

Последний раз редактировалось betirsolt; 21.05.2010 в 21:23.
betirsolt вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
delphi+sql server 2005 как соединиться с базой? betirsolt БД в Delphi 5 04.05.2010 19:47
SQL связать поля Virga БД в Delphi 1 24.08.2009 12:52
Доступ к БД (SQL server) в ОС Windows server 2003 Mann SQL, базы данных 2 07.12.2008 19:15
как связать поля разных типов doncova1 Microsoft Office Access 5 11.03.2008 00:15
Как сделать MS SQL логические поля? Azamat_k БД в Delphi 0 04.04.2007 13:42