![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу изменить запись в главной таблице
delphino © (2007-05-15 03:39:00)Не работает каскадное обновление, дело в том, что у меня имеются две связанные таблицы(один ко многим), по идее если я изменяю запись в главной таблице, то в подчиненной она тоже должна изменяться но при попытке сохранить изменение программа выдает исключение:"Access violation at adress F9A86BED", почему?
Anatoly Podgoretsky (2007-05-16 13:06:00) [1]> ЮЮ (16.05.2007 12:31:30) [30]
Дело в том, что первое работает
ЮЮ (2007-05-16 12:31:00) [2]
> Anatoly Podgoretsky © (16.05.07 12:14) [28]
Практика показывает обратное, если есть ссылочная целостность. Если нет - то проблем с редактированием ключевого поля естественно нет. Тогда за целостностью надо следить на клиенте.
> Каскадные обновления.
> А смена менеджера это другое.
Когда не работает первоеЮ второе - как вариант обхода.
Anatoly Podgoretsky (2007-05-16 12:16:00) [3]> ЮЮ (16.05.2007 12:12:27) [27]
Каскадные обновления.
А смена менеджера это другое.
Anatoly Podgoretsky (2007-05-16 12:14:00) [4]> delphino (16.05.2007 05:08:11) [11]
Можно и это никаких ошибок выдавать не должно.
ЮЮ (2007-05-16 12:12:00) [5]И вообще, как мне кажется, каскадное обновление - это возможности непосредственно DBD, а не BDE в целом.
Ибо в хэлпе так и пишут:
Database Desktopprovides two update rules for tables that use referential integrity.
P.S. Сам не пользуюсь каскадными возможностями даже в MS SQL, чего уж там про парадокс говорить :)
я думала насчет такой ситуации: может добавлять нового менеджера, потом изменять поле С_Manager в таблице clients, а потом уже удалять старого менеджера, на которого не ссылается ни один клиент, не знаю правильно ли так будет?
Остается только это. Тем более передать всех клиентов от одного менеджера другому - вполне логичная операция, например при увольнении первого.
ЮЮ (2007-05-16 11:50:00) [6]Да, проблемы лежат где-то внутри БДЕ, ибо ошибка возникает на Post в самом ядре:
procedure TBDEDataSet.InternalPost;
begin
inherited;
if State = dsEdit then
Check( DbiModifyRecord(FHandle, ActiveBuffer, True)) else
Check(DbiInsertRecord(FHandle, dbiNoLock, ActiveBuffer));
end;
DBD Чего-то не грузится и Delphi еле шевелится. Перезагружаюсь :(
Sergey13 (2007-05-16 09:44:00) [7]> [24] delphino (16.05.07 09:39)
> уверена есть и другой выход...
Конечно. Можно сменить (или наоборот не менять) фамилию менеджеру согласно вашей таблицы. Можно это требование внести в контракт и должностную инструкцию.
delphino (2007-05-16 09:39:00) [8]уверена есть и другой выход...
Sergey13 (2007-05-16 09:31:00) [9]> [20] delphino (16.05.07 09:24)
> Лучше бы подсказал как можно добавить код в таблицу менеджера,
А в чем трудность то?
> неужели придется все переделывать?
скорее всего да.
> [21] delphino (16.05.07 09:25)
Иногда, при написании программы и проектировании БД, стОит руководствоваться теорией а не практикой.
delphino (2007-05-16 09:30:00) [10]в общем я уже поняла, что лоханулась...
delphino (2007-05-16 09:25:00) [11]я имела ввиду что вероятность двух менеджеров с одинаковой фамилией настолько мала, что можно ее проигнорировать.
delphino (2007-05-16 09:24:00) [12]Правда??? Ну ты просто осчастливил меня своей правдой. Лучше бы подсказал как можно добавить код в таблицу менеджера, неужели придется все переделывать?
Sergey13 (2007-05-16 09:21:00) [13]> [18] delphino (16.05.07 09:13)
> Это невозможно
Ага, щас! Смотри на мир шире. Он горазо больше твоей конторки.
delphino (2007-05-16 09:13:00) [14]Это невозможно- их всего три и они почти не меняются...
Sergey13 (2007-05-16 08:54:00) [15]> [16] delphino (16.05.07 08:32)
Сама подумай - что бы ты делала, если бы было 2 менеджера Иванова?
delphino (2007-05-16 08:32:00) [16]Отослала...У меня также есть таблица инженеров, состоящая из кода инженера(ключ), фамилии, пароля и т.д. И в таблице clients есть поле С_Inzhrner-Integer (код инженера). Две таблицы связаны по этому полю и когда я изменяю в таблице инженеров фамилию, все нормально работает. То есть ошибка из-за того что фамилия менеджера-ключевое поле...
ЮЮ (2007-05-16 06:28:00) [17]>только не знаю что такое место AV и как его искать.:-)
Access Violation возникает в программе, в коде, написанном как тобой, так и до тебя. Это место устанавливают с помощью отладчика.
Какая Delphi? Если 6-7, то вышли проект и БД на Kolesov@vido.dvgu.ru - гляну
delphino (2007-05-16 05:46:00) [18]я думала насчет такой ситуации: может добавлять нового менеджера, потом изменять поле С_Manager в таблице clients, а потом уже удалять старого менеджера, на которого не ссылается ни один клиент, не знаю правильно ли так будет?
delphino (2007-05-16 05:41:00) [19]Почему не намерен? Намерена, только не знаю что такое место AV и как его искать.:-) Просто у меня всего три менеджера и код для них я не стала заводить исходя из того, что все фамилии уникальны. Добавить сейчас код в таблицу будет очень проблематично, так как придется почти все переделывать.
ЮЮ (2007-05-16 05:22:00) [20]
> то есть если фамилия является ключевым полем, то изменять
> я его не могу, так?
Исходя из того, что код ты никакой не писал, а место AV искать не намерен, будем считать, что AV происходит в компонентах доступа и именно из-за того, что меняешь значение ключевого поля. Более точно сказать ничего не возможно.