C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Помогите, не знаю что тут можно сделать., Какая то ошибка уже достала.
maikl
Отправлено: 25.12.2003, 12:01


Станционный диспетчер

Группа: Участник
Сообщений: 135



У меня есть 3 таблицы.
Например: в первой находятся Фамилии, во 2-й названия Групп, а в 3-й у меня поля которые создал в редакторе полей: 2 Lookup поля, значения которых берутся из 1-й и 2-й таблицы соответственно. Вроде сначало все в порядке, но после того как я заношу в 3-ю таблицу значения в эти Lookup поля, то после 2-х строк вылазеет ошибка "Project Project1.exe raised exception class EDBEngineError with message 'Key violation.'. Process stopped. Use step or Run to continue.". Короче больше 2-х строк не заносит в базу. Такая вот проблема подскажите что это, может у кого было уже, даже не знаю что за ошибка, с чем связана, все уже перепробывал. Я работаю с СУБД Paradox, БД связывал с помощью компонента Table, в 1-й и 2-й таблицах я проиндексировал поля по которым делал связывание.
maikl
Отправлено: 25.12.2003, 12:20


Станционный диспетчер

Группа: Участник
Сообщений: 135



Фу Блин, вроде сделал, а что такое было даже не понял. CachedUpdates в true поставил, и заработало, не пойму правдо почему, правдо теперь данные в БД не заносит с фамилиями и с группами, точнее в БД не сохраняетпосле выхода из программы, я раньше както не кешировал данные, поэтому может кто че посоветует что лучше сделать .

P.S : Ни одно так другое.
CoderDecoder
Отправлено: 25.12.2003, 12:38


Ученик-кочегар

Группа: Участник
Сообщений: 26



Ну во первых "Key vialotion" говорит о томб что в таблице уже имется занчение, которое ты вновь пытаешся внести, то есть нарушается уникальность данных.
А по поводу CashedUpdates:

дейятвительно сами по себе данные в таблицу не запишутся. Необходимо до закрытия программы выполнить ApplyUpdates(); и CommitUpdates(); и всё тут. А если в момент записи в таблицу произойдет ошибка, то что бы сохранить целостность базы необходимо прибегнуть к try ... catch где в try ставишь ApplUpdates(); CommitUpdates(); Table->Close();, a в catch RollBack();, что возратит твою базу в состояние до последнего ApplyUpdates(); у блин ... начинаю забывать русский :)
maikl
Отправлено: 25.12.2003, 13:34


Станционный диспетчер

Группа: Участник
Сообщений: 135



Спасибо за ответ, я разобрался что у меня там было, просто по невнимательности, связывание не правельно сделал, у меня много компонентов, и немного между собой 2 из них перепутал, но все в порядке, с кешированием тоже разобрался. Всем спасибо за ответы в этом году, мне они очень помогли, так что всех с наступающим.

Вернуться в Работа с базами данных в C++Builder