![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не пойму, где ошибка...... [D5, Win2k]
QWest © (2002-05-23 17:28:00)Добрый вечер мастерам. Я че та не могу разобраться с куском кода:
procedure TfrmAddress.cmdDelCityClick(Sender: TObject);
begin
try
frmMain.adoc.Execute("delete from list_city where city_id = " + adoqCity.FieldByName("city_id").AsString + "");
except
ShowMessage("
MOA (2002-05-24 14:23:00) [1]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 отрабатывет это исключение нормально, единственное неудобство - сообщение юзеру на английском. Впрочем, сообщение это тоже не больно-то информативное, и названия полей и констрейнов тоже будут на буржуйском (если, конечно, не хочется приключений).
Удачи!
dimis (2002-05-24 11:39:00) [2]"ТАКОе" ЭТО КоТОРОЕ?
QWest (2002-05-24 11:07:00) [3]Уважаемые мастера, неужели никто не знает ??
QWest (2002-05-24 09:46:00) [4]??????
QWest (2002-05-24 09:24:00) [5]Всем привет, это снова я...
Значит ЭСКУЭЛ Сервер у меня Майкрософтовский, версия 7.0
А еще хотеллось бы спросить: можно ли после создания таблиц определить у них такое свойство??
Кстати таблицы я создавал сам (щелкаю правой клавишей мыши, выбираю Нью Тэйбл, в появившемся окне пишу название, в седующем окне пишу нужные поля, выбираю тип данных и галочками проставляю нужные св-ва...).
Дык вот и хотелось бы узнать, на каком этапе проставляется ЭТО свойство
Fay (2002-05-24 07:06:00) [6]2Johnmen
А ещё Windows бывает от разных контор.
И фломастеры с ксероксами.
Johnmen (2002-05-24 00:23:00) [7]>QWest : Нехорошо ковыряться в чужих базах ! :))))
1. SQLserver м.б. от разных контор, напр. Borland, MS, IBM, Oracle и т.д. (к вопросу о типе СУБД)
2. Про ссылочную целостность, конечно же, лучше что-нибудь почитать (а рассказывать - сплошной спам будет :))
3. В примере от ins есть неточности, в частности, не указан FOREIGN KEY.
ins (2002-05-23 19:21:00) [8]скопировал неудачно =-)
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
)
ins (2002-05-23 19:16:00) [9]в 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 является внешним ключом, по которому и определяется ссылочная целостность
QWest (2002-05-23 19:02:00) [10]"У тебя сервер контролирует это правило (оно тут кстати и есть ссылочная целосность) и не дает
удалить город со вложенными улицами.
(таблицы ты не сам создавал что ли? - это определяется как раз при ихсоздании)"-= хотелось бы поподробнее, а именно где при создании можно ЭТО определить ??
oomneeq (2002-05-23 18:42:00) [11]raise убери
ты ведь уже среагировал на ошибку
А ошибка как раз та что надо - есть подчиненные записи
У тебя сервер контролирует это правило (оно тут кстати и есть ссылочная целосность) и не дает
удалить город со вложенными улицами.
(таблицы ты не сам создавал что ли? - это определяется как раз при ихсоздании)
raise генерит ошибку повторно вот ты и наблюдаешь это сообщение
Если это не единственно возможная ошибка, то в ехсерt
нужно реагировать не на все а именно на нее
почитай учебник как селектировать эксепшены.
хотя с EOleException много не населектируешь IMHO
QWest (2002-05-23 18:21:00) [12]??????????????
QWest (2002-05-23 18:11:00) [13]Тип БД, если я правильно тебя понял, у меня SQLServer..
И еще хотелось бы узнать что такое "ссылочная целосность" ??
Johnmen (2002-05-23 18:05:00) [14]Не смотря на то, что ты упорно не называешь БД, скажу, что у тебя нарушение ссылочной целостности !!!
QWest (2002-05-23 17:54:00) [15]В 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 17:38:00) [16]- как и куда они (улицы) вложены ?
- не указан тип БД
- какая ошибка ? (>...выводится какая-то ошибка...)