powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
25 сообщений из 156, страница 6 из 7
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32868996
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Victosha авторCurrentDb.Execute в отличие от DoCmd.RunSQL - участвует во внешней транзакции.
Саныч, - как бы просто не вполне корректное некорректное высказывание.
Дешевле удалить...
Зачем удалить? Вот новая версия:

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

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

Если вместо CurrentDb.Execute использовать DoCmd.RunSQL, то при возникновении ошибок удастся откатить только запросы с ошибками, тогда как CurrentDb.Execute в таких случаях позволяет откатить всю транзакцию, в которую включено то, что посчитает нужным программист.
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32868997
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alexander GОпечатки:
1. сслыками -2 раза
2.Если вместо обращений к формам Вы используете собственные парметры , тогда Вам нужно задать параметры вручную:

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

Мелочь, конечно, прошу извинить за занудность :)
ОК, исправляю сразу в тексте.
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32868998
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Аппликацию и приложение решил не править. Меня учили, что повторения одинаковых слов можно избегать путем замены на синонимы.

А "парметров" оказалось аж 5 штук.
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32869002
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНовая версия:

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

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



ЗЫ

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

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

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

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



(с выражением лица)
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32869007
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычАппликацию и приложение решил не править. Меня учили, что повторения одинаковых слов можно избегать путем замены на синонимы.
Честно говоря, мне резанул глаз термин аппликация, но подумал о себе - значит, аппликация тебе не нравится, а контрол устраивает? - тогда помалкивай :)
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32869735
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
По поводу DoCmd.RunSql SqlStatement, [UseTransaction]

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

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

Для простоты можно считать, что использование UseTransaction := True работает эквивалентно следующему куску кода:
Код: plaintext
1.
2.
3.
4.
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
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32869794
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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'ов
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32869921
Цветик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛП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 (Тёмный выше), но ее надо добавлять к свойствам. и неясно - будет ли работать с несохраненными запросами...
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32869979
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цветикнеясно - будет ли работать с несохраненными запросами...
Наверное будет (DoCmd ведь работает)
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32871087
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Victosha авторЕсли вместо CurrentDb.Execute использовать DoCmd.RunSQL, то при возникновении ошибок удастся откатить только запросы с ошибками...
ну, это просто обман.
Либо удастся откатить, вне зависимости от возникновения ошибок.
Либо не удастся откатить, даже если ошибки произошли. А так как написано -
это не оно...
Понял. Тогда так:

Нередко возникает необходимость при возникновении ошибок отменить результат исполнения целого ряда запросов. DoCmd.RunSQL такой возможности не дает. CurrentDb.Execute, в отличие от него, позволяет откатить транзакцию, в которую включено то, что посчитает нужным программист.
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32871090
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ЛПОднако этот параметр влияет на изолированность результатов выполнения запроса (до его полного завершения) от других сессий. Если запрос изменяет большое количество данных, то в случае DoCmd.RunSql "трампампамп", False из другой сессии мы будем наблюдать "постепенное" изменение данных, а в случае DoCmd.RunSql "трампампамп", True - все изменения "появятся" сразу.
Понял, спасибо. Я все равно сомневаюсь, имеет ли отношение этот параметр к теме этого фака.
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32871160
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч, оставляй в этом факе. С подрробным жевом ЛП идр.
з.ы. Блин, без инета на работе все самое интересное пропустил
з.з.ы. Саныч - спамер.
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32871166
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ТемныйСаныч, оставляй в этом факе. С подрробным жевом ЛП идр.
OK.

Темныйз.з.ы. Саныч - спамер.
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32871234
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТемныйСаныч, оставляй в этом факе. С подрробным жевом ЛП идр.
Не, Баба Яга против. Не место всяким там транзакциям и прочим глобал бульк инсёртам - в факе "как избавиться от подтверждений на удаление". Это разве что на отдельный фак тянет.
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32871236
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не... Тады это перекрестные факи. Поскольку именно в этом зтрагиается и RunSQL и Execute c их опциями.
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32871239
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТемныйНе... Тады это перекрестные факи. Поскольку именно в этом зтрагиается и RunSQL и Execute c их опциями.
мэй би. никто не запрещает факам быть перекрестными.

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

тока (имхо) не настолько это часто задаваемые вопросы :)
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32871246
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Лох Позорныйтока (имхо) не настолько это часто задаваемые вопросы :)
О! Я долго искал, за что ухватиться. Вот за это и ухвачусь. Не буду в этом факе про Use Transaction.
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32871255
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, давайте новый долгострой. AdvancedFAQ :)
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32886698
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч, может я его выложу?
А ты потом подправишь, как время появится?
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32887128
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Лох ПозорныйСаныч, может я его выложу?
А ты потом подправишь, как время появится?
Я очень надеюсь, что смогу все сделать в ближайшие выходные.

"Вы ждали 3000 лет, подождите еще полчаса". (Надпись в аэропорту им.Д.Бен-Гуриона в зале для прибывших репатриантов.)
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32889285
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Опубликакано!
http://www.sql.ru/faq/faq_topic.aspx?fid=410
Замечания продолжают приниматься.
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32889430
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...

первоначальный вариант полагается на встроенный рефреш, возникающий после задания имени процедуры на уже сформированном соединении.
второй вариант вызывает рефреш явно, поскольку встроенного не происходит - соединение задается после формирования текста и типа команды
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32889439
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, и каких нибудь слов про
.ActiveConnection = cnn
и
Set .ActiveConnection = cnn

(с выражением лица)
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32889473
ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ы
Гость
...
Рейтинг: 0 / 0
FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
    #32889513
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

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

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

?

(с выражением лица)
...
Рейтинг: 0 / 0
25 сообщений из 156, страница 6 из 7
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / FAQ: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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