Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Беда! ADO + MSSQL2000 - что за странное дело? / 10 сообщений из 10, страница 1 из 1
26.09.2001, 06:07
    #32014658
Dasverk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Беда! ADO + MSSQL2000 - что за странное дело?
Уважаемые все!
Помогите с такой бедой: ADO 2.6 + MSSQL2000, хотя подозреваю, что проблема-таки в ADO.

Есть таблица, пусть [test] (primary key ID, все дела...)
есть вьювка [test_view] : "select * from [test] where (<что-то там&gt with check option"
У юзера есть все права на [test_view] и никаких прав на [test]

Теперь на клиенте: если я обновляю [test_view] через запросы (INSERT,UPDATE,DELETE), то все отрабатывается замечательно, и данные, не подходящие под <что-то там> не вставляются.

ADO Recordset представляется как обновляемый, но при попытке изменить [test_view] (да хотя бы и в Enterprise Manager) выдается сообщение, что не хватает прав на [test] !!?

Даю права на [test], хотя это и не правильно. После этого в [test_view] можно вставлять ЛЮБЫЕ записи, не удовлетворяющие условию <что-то там> ?


Может кто знает, что за проблема? И лечится ли она?
...
Рейтинг: 0 / 0
26.09.2001, 07:18
    #32014672
Беда! ADO + MSSQL2000 - что за странное дело?
А в профайлер поглядеть и все понять?
...
Рейтинг: 0 / 0
26.09.2001, 08:33
    #32014676
serg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Беда! ADO + MSSQL2000 - что за странное дело?
Обновление данных через ADO - большой затык.Она вытаскивает метаданные из любого вложенного запроса и как с этим бороться не понятно. Есть правда один способ,который я нарыл.Но всеравно глючный.Надо использовать OnWillChangeRecord.
Есть пример в MSDN. Через него Update обрабатывается отлично.А вот Insert и Delete без последующего переоткрытия не
обойдутся.
...
Рейтинг: 0 / 0
26.09.2001, 09:15
    #32014682
Беда! ADO + MSSQL2000 - что за странное дело?
Бороться-то можно. Есть (как минимум) два пути:
1. Создавать VIEW c опцией "WITH VIEW_METADATA" и на VIEW навесить уникальный кластерный индекс. Тогда ADO (или кто-нибудь еще) эту вьюху от таблицы не отличит.
2. В ADO задать тип блокировки BatchOptimistic и самому нарисовать запросы на обновление-удаление-вставку. Или же сделать ADO-recordset отвязным (подробности в MSDN) и опять же самому нарисовать запросы на обновления.

А рекомендуется все же по-другому. Рекордсет - необновляемый, а изменения отдельным интерфейсом через модальные формочки через ADO-command.
...
Рейтинг: 0 / 0
26.09.2001, 09:40
    #32014687
serg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Беда! ADO + MSSQL2000 - что за странное дело?
А как эти запросы рисовать и использовать при пакетном обновлении.Я никак не могу найти ответ на этот вопрос.
Может объясните или примерчик?
...
Рейтинг: 0 / 0
26.09.2001, 10:10
    #32014690
Беда! ADO + MSSQL2000 - что за странное дело?
У рекордсета есть события: WillChangeRecord и RecordChangeComplete. Вот в обработке этих событий и надо нарисовать и выполнить запросы (через объект command), основанные на новых и старых значениях полей. В дельфи - проще. Там лучше задействовать события OnAfterDelete и OnAfterPost. Рисовать запрос - это просто составить стринговую переменную типа
sql_var='update '+tablename_var+' set '+fieldname_var+'='+fieldnewvalue_var+' where keyfield='+keyfieldvalue_var
...
Рейтинг: 0 / 0
26.09.2001, 10:21
    #32014691
serg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Беда! ADO + MSSQL2000 - что за странное дело?
Вообщето я об этом писал выше.Я думал есть что-то более нормальное.
Ведь в этом случае надо переоткрывать запрос.Т.к. в этих событиях надо отменять изменения,чтобы
движок не делал свое черное дело.
...
Рейтинг: 0 / 0
26.09.2001, 10:28
    #32014693
Беда! ADO + MSSQL2000 - что за странное дело?
Ошибаешься. Если сделать BatchOptimistic, то движок никаких запросов на сервер сам слать не будеть, пока ему ты не скажашь UpdateBatch. Переоткрывать не требуется. А для чистоты эксперимента, после работы с рекордсетом перед закрытием надо ему сказать CancelBatch, чтобы у рекордсета не возникло недоумения.
...
Рейтинг: 0 / 0
26.09.2001, 10:33
    #32014694
serg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Беда! ADO + MSSQL2000 - что за странное дело?
При таком подходе теряется концепция пакетной обработки.А хочется,чтобы все было как есть,но подменять запросы,
которые генерит движок, на свои.
...
Рейтинг: 0 / 0
03.10.2001, 07:23
    #32014872
Dasverk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Беда! ADO + MSSQL2000 - что за странное дело?
А-а-а-громное спасибо!
VIEW_METADATA - то, что надо. Как говорится, читайте хелп. Хотя вещь не такая уж и очевидная.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Беда! ADO + MSSQL2000 - что за странное дело? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]