Страница 1 из 1

Монопольное открытие файла

Добавлено: 03 Апрель 2006, 14:27
ru_alex
Всем привет!

Подскажите, плиз, как в MSSQL на Сlarion6 организовать монопольное открытие файла. В справке вроде поддерживается.

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

Если так и должно быть, тогда какие приемы можно еще применить?

Re: Монопольное открытие файла

Добавлено: 03 Апрель 2006, 16:54
Andrew™
ru_alex писал(а): Подскажите, плиз, как в MSSQL на Сlarion6 организовать монопольное открытие файла. В справке вроде поддерживается.
С TPS у меня проблем не было, открываешь с соответствующим флажком нужный файл, и можно отслеживать сколько копий приложения запущено, ограничивать и т.д.
В SQL у меня тот же прием не проходит, ошибку на открытие одной и той же таблицы не выдает при запуске двух копий приложения.

Если так и должно быть, тогда какие приемы можно еще применить?
сам то понял что сказал ;) в SQL нету файлов ;)
OPEN поряждает следующий SQL запрос:

Код: Выделить всё

SELECT * FROM myTable WHERE 0=1
залочить таблицу - это значит захватить ВСЕ записи таковой, делаешь

Код: Выделить всё

SELECT ... FROM myTable WITH UPD_LOCK
это ты залочишь существующие записи, с другой станции смогут добавить

а по хорошему - такая возможность для SQL бесполезна, енто моё мнение

Добавлено: 03 Апрель 2006, 17:06
ru_alex
Понятно.
Тогда вопрос такой:
Можно ли так залочить определенную запись определенной таблицы, что бы ее нельзя было удалить во время работы приложения штатными средствами, и была возможность проверить залочена она или нет с другой станции?

Добавлено: 04 Апрель 2006, 9:46
Andrew™
ru_alex писал(а):Понятно.
Тогда вопрос такой:
Можно ли так залочить определенную запись определенной таблицы, что бы ее нельзя было удалить во время работы приложения штатными средствами, и была возможность проверить залочена она или нет с другой станции?
захватить - это сделать SELECT с соответсвующим хинтом как описано в пред письме, НО это надо делать в транзакции, держать транзакцию открытой на время работы твоей программы несерьёзно, тут надо проще - навесить триггер на таблицу и давать отлуп при удалении в определённых ситуациях.