Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7   вперед  Ctrl      все
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Victosha
автор
CurrentDb.Execute в отличие от DoCmd.RunSQL - участвует во внешней транзакции.

Саныч, - как бы просто не вполне корректное некорректное высказывание.
Дешевле удалить...

Зачем удалить? Вот новая версия:

CurrentDb.Execute в отличие от DoCmd.RunSQL может быть включен во внешнюю транзакцию.

Victosha
автор
Если вместо CurrentDb.Execute использовать DoCmd.RunSQL, то не выполнятся только запросы с ошибками

Саныч, они "не выполнятся" если Предупреждения НЕ отключены, И пользователь отказался от завершения выполнения запроса (при этом не важно - произошли ошибки ли нет).

Новая версия:

Если вместо CurrentDb.Execute использовать DoCmd.RunSQL, то при возникновении ошибок удастся откатить только запросы с ошибками, тогда как CurrentDb.Execute в таких случаях позволяет откатить всю транзакцию, в которую включено то, что посчитает нужным программист.
18 янв 05, 01:42    [1251644]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Alexander G
Опечатки:
1.сслыками -2 раза
2.Если вместо обращений к формам Вы используете собственные парметры, тогда Вам нужно задать параметры вручную:

Пункт 2.5 - использованы оба термина - аппликация и приложение, стилистически лучше бы один.

Мелочь, конечно, прошу извинить за занудность :)

ОК, исправляю сразу в тексте.
18 янв 05, 01:42    [1251645]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Аппликацию и приложение решил не править. Меня учили, что повторения одинаковых слов можно избегать путем замены на синонимы.

А "парметров" оказалось аж 5 штук.
18 янв 05, 01:45    [1251646]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Victosha
Member

Откуда: Москва
Сообщений: 2620
автор
Новая версия:

Если вместо CurrentDb.Execute использовать DoCmd.RunSQL, то при возникновении ошибок удастся откатить только запросы с ошибками...


ну, это просто обман.
Либо удастся откатить, вне зависимости от возникновения ошибок.
Либо не удастся откатить, даже если ошибки произошли. А так как написано -
это не оно...



ЗЫ

автор
Аппликацию и приложение решил не править.


умеешь же ты сказать двумя словами то, на что другому два тома не хватит.

Нет вижу границ собственному восхищению.

Пошел захлебываться в дыму и пиве...



(с выражением лица)
18 янв 05, 02:50    [1251656]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Alexander G
Member

Откуда: Чукчи мы, однако
Сообщений: 3270
Владимир Саныч
Аппликацию и приложение решил не править. Меня учили, что повторения одинаковых слов можно избегать путем замены на синонимы.

Честно говоря, мне резанул глаз термин аппликация, но подумал о себе - значит, аппликация тебе не нравится, а контрол устраивает? - тогда помалкивай :)
18 янв 05, 03:13    [1251664]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
ЛП
Guest
2 Саныч
По поводу DoCmd.RunSql SqlStatement, [UseTransaction]

Сей параметр не определяет атомарность выполнения запроса (т.е. или изменить/добавить/удалить все нужные записи, или не изменить ничего). Как уже было сказано, аксес при ручном* запуске запроса изменит все что можно, а что нельзя - на то отругается. И способ отключить сиё паскудное поведение не известен науке.
--------
* ручной запус - запуск запроса непостредственно из окна базы данных либо программно с использованием DoCmd.RunSql


Однако этот параметр влияет на изолированность результатов выполнения запроса (до его полного завершения) от других сессий. Если запрос изменяет большое количество данных, то в случае DoCmd.RunSql "трампампамп", False из другой сессии мы будем наблюдать "постепенное" изменение данных, а в случае DoCmd.RunSql "трампампамп", True - все изменения "появятся" сразу.

Для простоты можно считать, что использование UseTransaction := True работает эквивалентно следующему куску кода:
DBEngine(0).BeginTrans
    CurrentDB.Execute "Update t Set f = value1 Where ID=id1" ' без dbFailOnError
    CurrentDB.Execute "Update t Set f = value2 Where ID=id2" ' без dbFailOnError
    CurrentDB.Execute "Update t Set f = value3 Where ID=id3" ' без dbFailOnError
DBEngine(0).CommitTrans
а UseTransaction := False - работает эквивалентно этому же куску, но без BeginTrans/CommitTrans
18 янв 05, 12:12    [1252691]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
ЛП
Guest
2 Цветик
4) Возможно, поведение по умолчанию для DoCmd.RunSQL может быть изменено. Намеком на это является наличие параметра соединения
Jet OLEDB:Global Bulk Transactions
Однако, как им воспользоваться непосредственно при открытии mdb проекта -
я не знаю

Global Bulk Transaction - это немного не то.
Если мы хотим выпонять запрос через DAO.QueryDef или ADODB.Command, и при этом желаем иметь такую же "неизолированность", как в случае DoCmd.RunSql [UseTransaction] := False, то надо установить какие-то проперти для QueryDef или Command (какие точно проперти - не помню)
Для ADODB можно также установить пропертю "Jet OLEDB:Global Bulk Transaction" для конекшена - тогда оно будет автоматом использоваться для всех Command'ов
18 янв 05, 12:28    [1252789]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Цветик
Guest
ЛП
2 Цветик
4) Возможно, поведение по умолчанию для DoCmd.RunSQL может быть изменено. Намеком на это является наличие параметра соединения
Jet OLEDB:Global Bulk Transactions
Однако, как им воспользоваться непосредственно при открытии mdb проекта -
я не знаю

Global Bulk Transaction - это немного не то.



про не то - согласен. тем должно бы быть
Jet OLEDB:Partial Bulk Ops

несмотря на вот это описание
автор

Jet OLEDB:Partial Bulk Ops
A Long value (read/write) that determines the behavior of the Jet database engine when SQL DML bulk operations fail. When set to allow partial completion of bulk operations, inconsistent changes can occur, because operations on some records could succeed and others could fail. When set to allow no partial completion of bulk operations, all changes are rolled back if a single error occurs. The Jet OLEDB:Global Partial Bulk Ops property setting can be overridden for the current Recordset object by setting the Jet OLEDB:Partial Bulk Ops property.
The Jet OLEDB:Global Partial Bulk Ops and Jet OLEDB:Partial Bulk Ops properties can be set to any of the following values:

Default 0

Partial 1

No Partial 2


я не увидел, что no partial работает. хотя, наверно, плохо смотрел.
поэтому подумал, а может оно в паре с Global Bulk Transaction
должно работать?
Хотя, скорее всего, слепенький - вот и не увидел...

ЛП

Если мы хотим выпонять запрос через DAO.QueryDef или ADODB.Command, и при этом желаем иметь такую же "неизолированность", как в случае DoCmd.RunSql [UseTransaction] := False, то надо установить какие-то проперти для QueryDef или Command (какие точно проперти - не помню)
Для ADODB можно также установить пропертю "Jet OLEDB:Global Bulk Transaction" для конекшена - тогда оно будет автоматом использоваться для всех Command'ов


для комманда это должно быть Jet OLEDB:Bulk Transactions
для кверидефа UseTransaction (Тёмный выше), но ее надо добавлять к свойствам. и неясно - будет ли работать с несохраненными запросами...
18 янв 05, 13:09    [1253025]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
ЛП
Guest
Цветик
неясно - будет ли работать с несохраненными запросами...

Наверное будет (DoCmd ведь работает)
18 янв 05, 13:21    [1253112]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Victosha
автор
Если вместо CurrentDb.Execute использовать DoCmd.RunSQL, то при возникновении ошибок удастся откатить только запросы с ошибками...

ну, это просто обман.
Либо удастся откатить, вне зависимости от возникновения ошибок.
Либо не удастся откатить, даже если ошибки произошли. А так как написано -
это не оно...

Понял. Тогда так:

Нередко возникает необходимость при возникновении ошибок отменить результат исполнения целого ряда запросов. DoCmd.RunSQL такой возможности не дает. CurrentDb.Execute, в отличие от него, позволяет откатить транзакцию, в которую включено то, что посчитает нужным программист.
18 янв 05, 20:20    [1255070]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
ЛП
Однако этот параметр влияет на изолированность результатов выполнения запроса (до его полного завершения) от других сессий. Если запрос изменяет большое количество данных, то в случае DoCmd.RunSql "трампампамп", False из другой сессии мы будем наблюдать "постепенное" изменение данных, а в случае DoCmd.RunSql "трампампамп", True - все изменения "появятся" сразу.

Понял, спасибо. Я все равно сомневаюсь, имеет ли отношение этот параметр к теме этого фака.
18 янв 05, 20:21    [1255074]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Темный
Member

Откуда:
Сообщений: 11941
Саныч, оставляй в этом факе. С подрробным жевом ЛП идр.
з.ы. Блин, без инета на работе все самое интересное пропустил
з.з.ы. Саныч - спамер.
18 янв 05, 22:07    [1255185]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Темный
Саныч, оставляй в этом факе. С подрробным жевом ЛП идр.

OK.

Темный
з.з.ы. Саныч - спамер.

18 янв 05, 22:20    [1255200]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
Темный
Саныч, оставляй в этом факе. С подрробным жевом ЛП идр.

Не, Баба Яга против. Не место всяким там транзакциям и прочим глобал бульк инсёртам - в факе "как избавиться от подтверждений на удаление". Это разве что на отдельный фак тянет.
19 янв 05, 00:57    [1255357]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Темный
Member

Откуда:
Сообщений: 11941
Не... Тады это перекрестные факи. Поскольку именно в этом зтрагиается и RunSQL и Execute c их опциями.
19 янв 05, 00:59    [1255361]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
Темный
Не... Тады это перекрестные факи. Поскольку именно в этом зтрагиается и RunSQL и Execute c их опциями.

мэй би. никто не запрещает факам быть перекрестными.

тема с транзакциями, воркспейсами, коннекшенами и т.п. - достаточно большая
тут и скрытый аксесовский воркспейс, и отличия DAO-шных и ADO-шных Execute'ов, и отличия аксесовских транзакций от общепринятых, и т.д., и т.п.

тока (имхо) не настолько это часто задаваемые вопросы :)
19 янв 05, 01:05    [1255371]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Лох Позорный
тока (имхо) не настолько это часто задаваемые вопросы :)

О! Я долго искал, за что ухватиться. Вот за это и ухвачусь. Не буду в этом факе про Use Transaction.
19 янв 05, 01:18    [1255386]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Темный
Member

Откуда:
Сообщений: 11941
Хорошо, давайте новый долгострой. AdvancedFAQ :)
19 янв 05, 01:37    [1255404]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
Саныч, может я его выложу?
А ты потом подправишь, как время появится?
27 янв 05, 12:23    [1277923]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Лох Позорный
Саныч, может я его выложу?
А ты потом подправишь, как время появится?

Я очень надеюсь, что смогу все сделать в ближайшие выходные.

"Вы ждали 3000 лет, подождите еще полчаса". (Надпись в аэропорту им.Д.Бен-Гуриона в зале для прибывших репатриантов.)
27 янв 05, 14:24    [1278603]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Опубликакано!
https://www.sql.ru/faq/faq_topic.aspx?fid=410
Замечания продолжают приниматься.
28 янв 05, 14:01    [1282143]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Victosha
Member

Откуда: Москва
Сообщений: 2620
2 Саныч - как всегда, ОЧ.КАРАШО!!

одно замечание только сходу -

1) приведенный код - рабочий,

автор
Узнать, какие параметры от Вас хочет Аксесс,
можно с помощью следующего кода:
Dim cmd As ADODB.Command
Dim cnn As ADODB.Connection
Dim p As ADODB.Parameter
Set cnn = CurrentProject.Connection
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = cnn
.CommandText = "ИмяПроцедуры"
.CommandType = adCmdStoredProc

For Each p In .Parameters
Debug.Print p.Name
Next
Set cmd = Nothing
cnn.Close: Set cnn = Nothing


но "лучше" бы его переписать
так

With cmd
.CommandText = "ИмяПроцедуры"
.CommandType = adCmdStoredProc
.ActiveConnection = cnn
.Parameters.Refresh
For Each p In .Parameters
...

первоначальный вариант полагается на встроенный рефреш, возникающий после задания имени процедуры на уже сформированном соединении.
второй вариант вызывает рефреш явно, поскольку встроенного не происходит - соединение задается после формирования текста и типа команды
28 янв 05, 14:40    [1282390]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Victosha
Member

Откуда: Москва
Сообщений: 2620
да, и каких нибудь слов про
.ActiveConnection = cnn
и
Set .ActiveConnection = cnn

(с выражением лица)
28 янв 05, 14:42    [1282403]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
ы
Guest
2 Victosha
https://www.sql.ru/forum/actualthread.aspx?tid=84554&hl=output+refresh
28 янв 05, 14:51    [1282461]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run  [new]
Victosha
Member

Откуда: Москва
Сообщений: 2620

спасибо.
а мораль-то какова?
работает в 2000аксе
код
автор
With cmd
.ActiveConnection = cnn
.CommandText = "ИмяПроцедуры"
.CommandType = adCmdStoredProc

For Each p In .Parameters
Debug.Print p.Name
Next


?

(с выражением лица)
28 янв 05, 15:01    [1282524]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить