Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.06.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
1-55188
ctapik-net
2002-06-04 19:30
2002.06.17
Компиляция проектов под WinXP


3-55013
Wreck
2002-05-23 19:22
2002.06.17
КАК писать скрипты???????????


3-55046
QWest
2002-05-23 17:28
2002.06.17
Не пойму, где ошибка......


1-55162
Skynet
2002-06-04 03:41
2002.06.17
Использование TListView в режиме vsReport


6-55259
Timon
2002-04-05 13:08
2002.06.17
TCP пакет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский