Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.05 c
2-1179107919
Ale][andr
2007-05-14 05:58
2007.06.03
INIFILES


1-1176196280
Jakudza
2007-04-10 13:11
2007.06.03
Проблема при закрытии формы MDI из DLL


3-1173879416
Vladisllav
2007-03-14 16:36
2007.06.03
Связь двух таблиц Ib в Delphi


2-1179310746
Шакал
2007-05-16 14:19
2007.06.03
Удаление из нескольких таблиц


15-1178619022
Jeer
2007-05-08 14:10
2007.06.03
В память о войне





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский