Удаление записи из таблиц Paradox 7
В главной таблице значение поля Login уникально, в зависимой - не уникально, т.е. может встретитья несколько записей с одинаковым значением поля Login.
Требуется: правильно удалить записи из обоих таблиц. При вызове метода MasterTable->Delete() выскакивает ошибка "Master has detail record. Cannot delete or modify".
Какие есть варианты? Не хочется выдирать из дочерней таблицы все записи руками, думаю, что есть более быстрые и правильные методы.
Суть: есть 2 таблицы Paradox 7 - главная и зависимая. Связаны по полю Login. Связаны как средставми билдера (через MasterSource/MasterField), так и средствами самого Paradox'а, при помощи DataBase Desktop'а - на уровне ссылочной целостности.
В главной таблице значение поля Login уникально, в зависимой - не уникально, т.е. может встретитья несколько записей с одинаковым значением поля Login.
Требуется: правильно удалить записи из обоих таблиц. При вызове метода MasterTable->Delete() выскакивает ошибка "Master has detail record. Cannot delete or modify".
Какие есть варианты? Не хочется выдирать из дочерней таблицы все записи руками, думаю, что есть более быстрые и правильные методы.
Когда ссылочную целостность объявлял, выбрал Cascade или Prohibit?
Когда ссылочную целостность объявлял, выбрал Cascade или Prohibit?
Cascade конечно. Потому и не понимаю в чем замес.
Cascade конечно. Потому и не понимаю в чем замес.
а ты в какой последовательности пытаешься удалить данные?
сначала все из дочерней таблицы, потом из главной?
а ты в какой последовательности пытаешься удалить данные?
сначала все из дочерней таблицы, потом из главной?
Суть каскадного удаления заключается в том, чтобы удалить запись из мастер-таблицы, а при этом каскадно удалятся все связанные записи в детайл-таблице.
Суть каскадного удаления заключается в том, чтобы удалить запись из мастер-таблицы, а при этом каскадно удалятся все связанные записи в детайл-таблице.
Угумс, именно так и делаю. О чем говорит MasterTable->Delete();
Угумс, именно так и делаю. О чем говорит MasterTable->Delete();
Я так понимаю - юзаем TTable? Скорей всего записи просто залочены - т.е. в момент удаления детайл-таблица тоже открыта и именно на записях которые удаляются. Потому и не удаляется. Что бы проверить - пробуй тоже самое выполнить через TQuery - естественно убрав TTable - скорее всего проблема исчезнет.
Ну или закрыть связанную таблицу. Как вариант. :)
Не катит. То же самое выскакивает. Вот блин, не хочется новое что-то изучать про работу с БД - некогда. Занят этим постольку, поскольу. Но видимо придется. Если есть еще варианты, то буду очень благодарен.
Не катит. То же самое выскакивает. Вот блин, не хочется новое что-то изучать про работу с БД - некогда.
Это не работа с БД, а геморрой с БД. Яка держава, таки і теракти (c).
Не катит. То же самое выскакивает. Вот блин, не хочется новое что-то изучать про работу с БД - некогда. Занят этим постольку, поскольу. Но видимо придется. Если есть еще варианты, то буду очень благодарен.
Вариант - неиспользование TTable. Работа с нормальным сервером.
Вариант - неиспользование TTable. Работа с нормальным сервером.
Да ну его в пень. Сделаю наверное через жопу - через GoToKey()/Delete(). Хоть и криво, но быстрее. :)
Да ну его в пень. Сделаю наверное через жопу - через GoToKey()/Delete(). Хоть и криво, но быстрее. :)
Посмотрел в Инете - многие натыкаются на эти грабли.
Одно из решений - вешать на TTable.OnBeforeDeletе выполнение запроса на удаление из детайл-таблицы.
Посмотрел в Инете - многие натыкаются на эти грабли.
Я тоже смотрел :). И так же - не нашел ничего лучше того, что я и сам могу сделать, если не применять какие-то другие компоненты.