Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Беда! ADO + MSSQL2000 - что за странное дело?
|
|||
|---|---|---|---|
|
#18+
Уважаемые все! Помогите с такой бедой: ADO 2.6 + MSSQL2000, хотя подозреваю, что проблема-таки в ADO. Есть таблица, пусть [test] (primary key ID, все дела...) есть вьювка [test_view] : "select * from [test] where (<что-то там> with check option" У юзера есть все права на [test_view] и никаких прав на [test] Теперь на клиенте: если я обновляю [test_view] через запросы (INSERT,UPDATE,DELETE), то все отрабатывается замечательно, и данные, не подходящие под <что-то там> не вставляются. ADO Recordset представляется как обновляемый, но при попытке изменить [test_view] (да хотя бы и в Enterprise Manager) выдается сообщение, что не хватает прав на [test] !!? Даю права на [test], хотя это и не правильно. После этого в [test_view] можно вставлять ЛЮБЫЕ записи, не удовлетворяющие условию <что-то там> ? Может кто знает, что за проблема? И лечится ли она? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2001, 06:07 |
|
||
|
Беда! ADO + MSSQL2000 - что за странное дело?
|
|||
|---|---|---|---|
|
#18+
А в профайлер поглядеть и все понять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2001, 07:18 |
|
||
|
Беда! ADO + MSSQL2000 - что за странное дело?
|
|||
|---|---|---|---|
|
#18+
Обновление данных через ADO - большой затык.Она вытаскивает метаданные из любого вложенного запроса и как с этим бороться не понятно. Есть правда один способ,который я нарыл.Но всеравно глючный.Надо использовать OnWillChangeRecord. Есть пример в MSDN. Через него Update обрабатывается отлично.А вот Insert и Delete без последующего переоткрытия не обойдутся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2001, 08:33 |
|
||
|
Беда! ADO + MSSQL2000 - что за странное дело?
|
|||
|---|---|---|---|
|
#18+
Бороться-то можно. Есть (как минимум) два пути: 1. Создавать VIEW c опцией "WITH VIEW_METADATA" и на VIEW навесить уникальный кластерный индекс. Тогда ADO (или кто-нибудь еще) эту вьюху от таблицы не отличит. 2. В ADO задать тип блокировки BatchOptimistic и самому нарисовать запросы на обновление-удаление-вставку. Или же сделать ADO-recordset отвязным (подробности в MSDN) и опять же самому нарисовать запросы на обновления. А рекомендуется все же по-другому. Рекордсет - необновляемый, а изменения отдельным интерфейсом через модальные формочки через ADO-command. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2001, 09:15 |
|
||
|
Беда! ADO + MSSQL2000 - что за странное дело?
|
|||
|---|---|---|---|
|
#18+
А как эти запросы рисовать и использовать при пакетном обновлении.Я никак не могу найти ответ на этот вопрос. Может объясните или примерчик? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2001, 09:40 |
|
||
|
Беда! ADO + MSSQL2000 - что за странное дело?
|
|||
|---|---|---|---|
|
#18+
У рекордсета есть события: WillChangeRecord и RecordChangeComplete. Вот в обработке этих событий и надо нарисовать и выполнить запросы (через объект command), основанные на новых и старых значениях полей. В дельфи - проще. Там лучше задействовать события OnAfterDelete и OnAfterPost. Рисовать запрос - это просто составить стринговую переменную типа sql_var='update '+tablename_var+' set '+fieldname_var+'='+fieldnewvalue_var+' where keyfield='+keyfieldvalue_var ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2001, 10:10 |
|
||
|
Беда! ADO + MSSQL2000 - что за странное дело?
|
|||
|---|---|---|---|
|
#18+
Вообщето я об этом писал выше.Я думал есть что-то более нормальное. Ведь в этом случае надо переоткрывать запрос.Т.к. в этих событиях надо отменять изменения,чтобы движок не делал свое черное дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2001, 10:21 |
|
||
|
Беда! ADO + MSSQL2000 - что за странное дело?
|
|||
|---|---|---|---|
|
#18+
Ошибаешься. Если сделать BatchOptimistic, то движок никаких запросов на сервер сам слать не будеть, пока ему ты не скажашь UpdateBatch. Переоткрывать не требуется. А для чистоты эксперимента, после работы с рекордсетом перед закрытием надо ему сказать CancelBatch, чтобы у рекордсета не возникло недоумения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2001, 10:28 |
|
||
|
Беда! ADO + MSSQL2000 - что за странное дело?
|
|||
|---|---|---|---|
|
#18+
При таком подходе теряется концепция пакетной обработки.А хочется,чтобы все было как есть,но подменять запросы, которые генерит движок, на свои. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2001, 10:33 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=46&tid=1825395]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
35ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 327ms |

| 0 / 0 |
