Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.17;
Скачать: CL | DM;

Вниз

Не пойму, где ошибка......   Найти похожие ветки 

 
QWest   (2002-05-23 17:28) [0]

Добрый вечер мастерам. Я че та не могу разобраться с куском кода:
procedure TfrmAddress.cmdDelCityClick(Sender: TObject);
begin
try
frmMain.adoc.Execute("delete from list_city where city_id = " + adoqCity.FieldByName("city_id").AsString + "");
except
ShowMessage("


 
Johnmen ©   (2002-05-23 17:38) [1]

- как и куда они (улицы) вложены ?
- не указан тип БД
- какая ошибка ? (>...выводится какая-то ошибка...)


 
QWest   (2002-05-23 17:54) [2]

В SQLserver сделана БД. Улицы связаны с городами т.о.:в таблице List_street есть три поля: Str_id, str_city, str_name В таблице
list_city два поля city_id, city_name. Эти таблицы связаны между собой так- city_id=str_city.
Ошибка: Project .. .exe raised exception class EOleException with message "DELETE statement conflicted with COLUMN REFERENCE constraint "FK_LIST_STREET_LIST_CITY". The conflict occurred in database "...", Table "LIST_STREET", column "STR_CITY"". Process stopped.Use step or Run to continue.
Извиняюсь, что долго - ошибку переписывал...


 
Johnmen ©   (2002-05-23 18:05) [3]

Не смотря на то, что ты упорно не называешь БД, скажу, что у тебя нарушение ссылочной целостности !!!


 
QWest   (2002-05-23 18:11) [4]

Тип БД, если я правильно тебя понял, у меня SQLServer..
И еще хотелось бы узнать что такое "ссылочная целосность" ??


 
QWest   (2002-05-23 18:21) [5]

??????????????


 
oomneeq ©   (2002-05-23 18:42) [6]

raise убери
ты ведь уже среагировал на ошибку
А ошибка как раз та что надо - есть подчиненные записи

У тебя сервер контролирует это правило (оно тут кстати и есть ссылочная целосность) и не дает
удалить город со вложенными улицами.
(таблицы ты не сам создавал что ли? - это определяется как раз при ихсоздании)
raise генерит ошибку повторно вот ты и наблюдаешь это сообщение
Если это не единственно возможная ошибка, то в ехсерt
нужно реагировать не на все а именно на нее
почитай учебник как селектировать эксепшены.
хотя с EOleException много не населектируешь IMHO


 
QWest   (2002-05-23 19:02) [7]

"У тебя сервер контролирует это правило (оно тут кстати и есть ссылочная целосность) и не дает
удалить город со вложенными улицами.
(таблицы ты не сам создавал что ли? - это определяется как раз при ихсоздании)"-= хотелось бы поподробнее, а именно где при создании можно ЭТО определить ??


 
ins   (2002-05-23 19:16) [8]

в IB это делается так

CREATE TABLE T_CITIES
(
city_id integer not null primary key,
city_name varchar(50)
)

CREATE TABLE T_STREETS
(
street_id integer not null primary key,
stret_name city_name varchar(50),
city_ref integer references T_CITIES (city_id) ON UPDATE CASCADE ON DELETE CASCADE
)

поле city_ref является внешним ключом, по которому и определяется ссылочная целостность





 
ins   (2002-05-23 19:21) [9]

скопировал неудачно =-)

CREATE TABLE T_STREETS
(
street_id integer not null primary key,
streеt_name varchar(50),
city_ref integer references T_CITIES (city_id) ON UPDATE CASCADE ON DELETE CASCADE
)


 
Johnmen ©   (2002-05-24 00:23) [10]

>QWest : Нехорошо ковыряться в чужих базах ! :))))

1. SQLserver м.б. от разных контор, напр. Borland, MS, IBM, Oracle и т.д. (к вопросу о типе СУБД)
2. Про ссылочную целостность, конечно же, лучше что-нибудь почитать (а рассказывать - сплошной спам будет :))
3. В примере от ins есть неточности, в частности, не указан FOREIGN KEY.


 
Fay ©   (2002-05-24 07:06) [11]

2Johnmen

А ещё Windows бывает от разных контор.
И фломастеры с ксероксами.


 
QWest   (2002-05-24 09:24) [12]

Всем привет, это снова я...
Значит ЭСКУЭЛ Сервер у меня Майкрософтовский, версия 7.0
А еще хотеллось бы спросить: можно ли после создания таблиц определить у них такое свойство??
Кстати таблицы я создавал сам (щелкаю правой клавишей мыши, выбираю Нью Тэйбл, в появившемся окне пишу название, в седующем окне пишу нужные поля, выбираю тип данных и галочками проставляю нужные св-ва...).
Дык вот и хотелось бы узнать, на каком этапе проставляется ЭТО свойство


 
QWest   (2002-05-24 09:46) [13]

??????


 
QWest   (2002-05-24 11:07) [14]

Уважаемые мастера, неужели никто не знает ??


 
dimis   (2002-05-24 11:39) [15]

"ТАКОе" ЭТО КоТОРОЕ?


 
MOA   (2002-05-24 14:23) [16]

2QWEST:таблицы я создавал сам
Следовательно, на диаграмме в EM или VS Вы соединили List_street.str_city и list_city.city_id (Да Вы и сами говорите "Эти таблицы связаны между собой так- city_id=str_city"). Это вот и называется ссылочная целостность (FOREIGN KEY в терминах MSSQL). Аналог на T-SQL
ALTER TABLE List_street ADD CONSTRAINT ["FK_LIST_STREET_LIST_CITY"] FOREIGN KEY ([str_city]) REFERENCES [list_city]([city_id])
А определять нужно не наличие ссылочного правила, а наличие подчинённой(ых) записи(ей) в List_street, например, так
SELECT TOP 1 str_city FROM List_street WHERE str_city = код-удаляемого-города.
Тогда можно выдать юзеру "Не могу удалить город Голопупинск так так в нем есть улица им. Пупкина".
Вариант - оформите удаление в виде процедуры - тогда сообщение пользователю Вы сможете выдать на русском без особых заморочек.
Или, действительно, ловить исключения (порядком мороки). Да и сообщения юзеру будут такие "Не могу удалить город Голопупинск т.к. в нем есть какие-то улицы".
Или переделать базу сообщений MSSQL на русский - мечта русских программеров на MSSQL :-) - дело в том, что DELPHI отрабатывет это исключение нормально, единственное неудобство - сообщение юзеру на английском. Впрочем, сообщение это тоже не больно-то информативное, и названия полей и констрейнов тоже будут на буржуйском (если, конечно, не хочется приключений).
Удачи!



Страницы: 1 вся ветка

Текущий архив: 2002.06.17;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
14-55283
Suntechnic
2002-04-30 20:48
2002.06.17
Вот загадку прислали :)...


1-55055
DenNNis
2002-06-05 13:57
2002.06.17
Как создать загрузочный диск ??


14-55274
Olgerd
2002-05-11 19:49
2002.06.17
А ты добавил свою функцию в UBPFD?


6-55240
Prorva
2002-04-09 01:32
2002.06.17
Даже и не знаю....


6-55249
SMike
2002-04-07 20:04
2002.06.17
IMAP client