Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Delete from master-detail via stored procedure [D5, MSSQL, ]


Страницы:   1 2

Гоша ©   (2001-12-13 19:00:00) 

Просто беда...
BDE, TDataBase, TQueries, TStoredProcedure, CachedUpdates...
2 (или более) TQuery связаны как master-detail (связаны "вручную" - не через DataSource, ибо, как выяснилось, так не прокатит! - господи, как я люблю BORLAND и его детище!)
Ладно, навтыкал обработчиков, чтобы переопредлять параметры для detail и переоткрывать его (их), когда надо мне, а не ему.
Теперь встал вопрос об удалении всей грозди. Слепил sp на сервере, к-рая по PK master-записи удаляет все веточки и ее саму(опять-же, а ну попробуй сделать это на клиенте: пиши циклы WHILE NOT EOF ! Я уже выражал свое мнение относительно "удобства" DELPHI для приложений БД - ну нету у нее "встроенного SQL", чтобы работать с наборами данных по-нормальному!!).
А теперь вопрос: процедура отрабатывает, на сервере записи удаляются, мне приходит result, что, типа, все OK, а на любое телодвижение с набором данных после этого получаю сообщение:"Connection is in use by another statement" !
Офигев от этого, делаю совершенно простенький пример (ничего лишнего на форме, только 2 Query, master-detail - правда, по-простому - через DataSource) и аналогичную sp.
Запускаю - работает ! И ничем мой connection не занимает.
Ну, думаю, блин... И добавляю пару строчек после StoredProc1.ExecProc:
Query1.Delete; //чтобы визуально удалить запись в моем наборе
Query1.CommitUpdates; //очистить кэш
И получаю на команду Delete ответ: сбой при обращении к странице памяти в модуле SQLMSS32.DLL !
И тут я шизею...
М.б. кто-нибудь подскажет, какой учебник тут читать надо ?


Tonie   (2001-12-14 13:45:00) [21]

> drpass ©
MSSQL до 2000 версии имеет триггеры без деления на Befor After, не поддерживает каскадного удаления, а проверка referential integrity происходит раньше удаления записи, так что приходится действительно пользоваться легкими извратами.
> Гоша © собственно проблем со стандартным Master - Detail особенно не припоминаю, при подробном описании проблемы и знаниии версии MSSQL было бы проще помочь


Гоша   (2001-12-14 10:13:00) [22]

>drpass: Я, конечно, понимаю, что с триггерами сподручнее, чем самому.
Но представьте ситуацию, когда изменять структуру БД невозможно (добавлять новые объекты типа sp или view можно, а менять существующие нельзя), так ведь бывает, правда ?
Но дело не в этом! Меня бесит непонимание того, что происходит!
Сначала я никак не мог понять, почему не работает master-detail через DataSource (во всех пособиях мило объясняется именно этот вариант и нигде ни слова о том, что так не пройдет с CachedUpdates). Спасибо, добрые люди подтвердили, что, действительно придется связывать самому, ручками через код.
Теперь вдруг этот несчастный connection, к-рый вдруг оказывается занят каким-то another statement после выполнения sp. У меня крепнет чувство, что чего-то глубоко здесь недопонимаю... А м.б. все проще гораздо?
Подскажите хоть, в каком направлении искать, откуда ноги растут у этой дряни.


drpass   (2001-12-13 23:07:00) [23]

Я, правда, не с MS SQL работаю, но... нафиг делать поддержку целостности данных в клиентском приложении? Почему бы не настроить ее на самой базе данных? Ведь есть в SQL Server триггеры или какой-то их аналог, там, скажеи, автоматический запуск хранимой процедуры при удалении записей


Гоша   (2001-12-13 19:05:00) [24]

>Mick: Ну ты сказал !


Mick   (2001-12-13 19:03:00) [25]

Учебник по принципам построения клиент-серверных приложений


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо