Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.03;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.049 c
3-1173963658
Rhasta
2007-03-15 16:00
2007.06.03
Распределенные базы данных


15-1178185081
db2admin
2007-05-03 13:38
2007.06.03
Вопрос совместимости


11-1160942958
Psychedelic
2006-10-16 00:09
2007.06.03
как обратиться к KOLProject не через инспектор?


2-1178938776
ArchValentin
2007-05-12 06:59
2007.06.03
Работа с базой в DBF


3-1174234575
kaif
2007-03-18 19:16
2007.06.03
DBLookupComboBox с дополнительными кнопками