Форум: "Начинающим";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
ВнизНе могу изменить запись в главной таблице Найти похожие ветки
← →
delphino (2007-05-15 03:39) [0]Не работает каскадное обновление, дело в том, что у меня имеются две связанные таблицы(один ко многим), по идее если я изменяю запись в главной таблице, то в подчиненной она тоже должна изменяться но при попытке сохранить изменение программа выдает исключение:"Access violation at adress F9A86BED", почему?
← →
ЮЮ © (2007-05-15 05:17) [1]> по идее если я изменяю запись в главной таблице, то в подчиненной
> она тоже должна изменяться
Идея совсем не понятна. Кто Она? Как запись из главной таблицы может оказаться в подчиненной таблице? Не лучше привести структуру, связи, и показать, что пытаешься изменить.
> :"Access violation at adress F9A86BED
Из-за ошибок в коде. Твоём или используемых компонентов. К БД отношения не имеет. Ловится отладчиком владельцем исходников.
← →
delphino (2007-05-15 05:40) [2]Есть таблица клиентов, в которой есть поле C_Manager, также есть таблица в которой содержатся фамилии менеджеров. Каждому менеджеру принадлежит несколько клиентов. Допустим у меня поменялся менеджер и я хочу изменить его фамилию, когда я пытаюсь сохранить измененную фамилию программа выдает ошибку.
← →
Loginov Dmitry © (2007-05-15 07:49) [3]> когда я пытаюсь сохранить измененную фамилию программа выдает
> ошибку.
В коде обработки изменения фамилии менеджера у тебя, видимо, присутствует ошибка.
← →
ЮЮ © (2007-05-15 08:46) [4]> Допустим у меня поменялся менеджер и я хочу изменить его
> фамилию
Если изменилась фамилия менеждера, то менять её надо в таблице менеджеров. Причем здесь таблица, в которой C_Manager - ссылка на таблицу менеджеров? Или в той таблице ФИО - ключевое поле?
← →
Anatoly Podgoretsky © (2007-05-15 23:16) [5]> delphino (15.05.2007 05:40:02) [2]
Вот теперь понятно - у тебя ошибка в программе.
← →
delphino (2007-05-16 02:29) [6]так я и меняю фамилию менеджера в таблице менеджеров! а в коде ошибки быть не должно, потому что никакого кода я не писала.
← →
delphino (2007-05-16 02:36) [7]может я что-то неправильно сделала когда связи между таблицами устанавливала?
← →
ЮЮ © (2007-05-16 03:25) [8]>так я и меняю фамилию менеджера в таблице менеджеров!
А причем здесь каскадное обновление?
может все же структуру таблиц приведешь? А то "есть поле C_Manager" - не информация, даже тип неизвестен.
>потому что никакого кода я не писала.
У датасета нет никаких обработчиков? Тогда отчего возникает желание "по идее если я изменяю запись в главной таблице, то в подчиненной она тоже должна изменяться"? Измененияю если и произойдут, то на сервере, а в других клиентских наборах всё останентся по прежнему.
← →
delphino (2007-05-16 03:35) [9]У меня локальная база данных, а не клиент-серверная.
Структура таблицы managers:
M_Familiya - string (ключевое поле)
M_Password - string
Cтруктура таблицы clients:
C_Code - Autoincrement (ключ)
С_Name - string
...
C_Manager - string (по этому полю связаны таблицы)
← →
ЮЮ © (2007-05-16 04:29) [10]А почему бы не дополнить первую таблицу полем
M_Code - Autoincrement (ключ)
>У меня локальная база данных
Какая?
← →
delphino (2007-05-16 05:08) [11]то есть если фамилия является ключевым полем, то изменять я его не могу, так?
← →
ЮЮ © (2007-05-16 05:22) [12]
> то есть если фамилия является ключевым полем, то изменять
> я его не могу, так?
Исходя из того, что код ты никакой не писал, а место AV искать не намерен, будем считать, что AV происходит в компонентах доступа и именно из-за того, что меняешь значение ключевого поля. Более точно сказать ничего не возможно.
← →
delphino (2007-05-16 05:41) [13]Почему не намерен? Намерена, только не знаю что такое место AV и как его искать.:-) Просто у меня всего три менеджера и код для них я не стала заводить исходя из того, что все фамилии уникальны. Добавить сейчас код в таблицу будет очень проблематично, так как придется почти все переделывать.
← →
delphino (2007-05-16 05:46) [14]я думала насчет такой ситуации: может добавлять нового менеджера, потом изменять поле С_Manager в таблице clients, а потом уже удалять старого менеджера, на которого не ссылается ни один клиент, не знаю правильно ли так будет?
← →
ЮЮ © (2007-05-16 06:28) [15]>только не знаю что такое место AV и как его искать.:-)
Access Violation возникает в программе, в коде, написанном как тобой, так и до тебя. Это место устанавливают с помощью отладчика.
Какая Delphi? Если 6-7, то вышли проект и БД на Kolesov@vido.dvgu.ru - гляну
← →
delphino (2007-05-16 08:32) [16]Отослала...У меня также есть таблица инженеров, состоящая из кода инженера(ключ), фамилии, пароля и т.д. И в таблице clients есть поле С_Inzhrner-Integer (код инженера). Две таблицы связаны по этому полю и когда я изменяю в таблице инженеров фамилию, все нормально работает. То есть ошибка из-за того что фамилия менеджера-ключевое поле...
← →
Sergey13 © (2007-05-16 08:54) [17]> [16] delphino (16.05.07 08:32)
Сама подумай - что бы ты делала, если бы было 2 менеджера Иванова?
← →
delphino (2007-05-16 09:13) [18]Это невозможно- их всего три и они почти не меняются...
← →
Sergey13 © (2007-05-16 09:21) [19]> [18] delphino (16.05.07 09:13)
> Это невозможно
Ага, щас! Смотри на мир шире. Он горазо больше твоей конторки.
← →
delphino (2007-05-16 09:24) [20]Правда??? Ну ты просто осчастливил меня своей правдой. Лучше бы подсказал как можно добавить код в таблицу менеджера, неужели придется все переделывать?
← →
delphino (2007-05-16 09:25) [21]я имела ввиду что вероятность двух менеджеров с одинаковой фамилией настолько мала, что можно ее проигнорировать.
← →
delphino (2007-05-16 09:30) [22]в общем я уже поняла, что лоханулась...
← →
Sergey13 © (2007-05-16 09:31) [23]> [20] delphino (16.05.07 09:24)
> Лучше бы подсказал как можно добавить код в таблицу менеджера,
А в чем трудность то?
> неужели придется все переделывать?
скорее всего да.
> [21] delphino (16.05.07 09:25)
Иногда, при написании программы и проектировании БД, стОит руководствоваться теорией а не практикой.
← →
delphino (2007-05-16 09:39) [24]уверена есть и другой выход...
← →
Sergey13 © (2007-05-16 09:44) [25]> [24] delphino (16.05.07 09:39)
> уверена есть и другой выход...
Конечно. Можно сменить (или наоборот не менять) фамилию менеджеру согласно вашей таблицы. Можно это требование внести в контракт и должностную инструкцию.
← →
ЮЮ © (2007-05-16 11:50) [26]Да, проблемы лежат где-то внутри БДЕ, ибо ошибка возникает на Post в самом ядре:
procedure TBDEDataSet.InternalPost;
begin
inherited;
if State = dsEdit then
Check(DbiModifyRecord(FHandle, ActiveBuffer, True)) else
Check(DbiInsertRecord(FHandle, dbiNoLock, ActiveBuffer));
end;
DBD Чего-то не грузится и Delphi еле шевелится. Перезагружаюсь :(
← →
ЮЮ © (2007-05-16 12:12) [27]И вообще, как мне кажется, каскадное обновление - это возможности непосредственно DBD, а не BDE в целом.
Ибо в хэлпе так и пишут:
Database Desktop provides two update rules for tables that use referential integrity.
P.S. Сам не пользуюсь каскадными возможностями даже в MS SQL, чего уж там про парадокс говорить :)
я думала насчет такой ситуации: может добавлять нового менеджера, потом изменять поле С_Manager в таблице clients, а потом уже удалять старого менеджера, на которого не ссылается ни один клиент, не знаю правильно ли так будет?
Остается только это. Тем более передать всех клиентов от одного менеджера другому - вполне логичная операция, например при увольнении первого.
← →
Anatoly Podgoretsky © (2007-05-16 12:14) [28]> delphino (16.05.2007 05:08:11) [11]
Можно и это никаких ошибок выдавать не должно.
← →
Anatoly Podgoretsky © (2007-05-16 12:16) [29]> ЮЮ (16.05.2007 12:12:27) [27]
Каскадные обновления.
А смена менеджера это другое.
← →
ЮЮ © (2007-05-16 12:31) [30]
> Anatoly Podgoretsky © (16.05.07 12:14) [28]
Практика показывает обратное, если есть ссылочная целостность. Если нет - то проблем с редактированием ключевого поля естественно нет. Тогда за целостностью надо следить на клиенте.
> Каскадные обновления.
> А смена менеджера это другое.
Когда не работает первоеЮ второе - как вариант обхода.
← →
Anatoly Podgoretsky © (2007-05-16 13:06) [31]> ЮЮ (16.05.2007 12:31:30) [30]
Дело в том, что первое работает
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.047 c