Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не могу изменить запись в главной таблице


Страницы:   1 2

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 происходит в компонентах доступа и именно из-за того, что меняешь значение ключевого поля. Более точно сказать ничего не возможно.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо