Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Можно ли как послать Shift-Enter на форму  [new]
yuniki
Member

Откуда:
Сообщений: 1171
Можно ли как послать Shift-Enter на форму
26 апр 05, 01:41    [1496551]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
Victosha
Member

Откуда: Москва
Сообщений: 2620
а что SendKeys ?
26 апр 05, 03:08    [1496571]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
Alexander G
Member

Откуда: Чукчи мы, однако
Сообщений: 3270
Это что, сохраненение изменений в текущей записи? (сочетание используется и в других режимах)
тогда проще
DoCmd.RunCommand acCmdSaveRecord
или
me.dirty=false
26 апр 05, 03:20    [1496572]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
Тимур Рахимов
Member

Откуда: Москва, Россия
Сообщений: 128
Victosha
а что SendKeys ?

Alexander G
тогда проще
DoCmd.RunCommand acCmdSaveRecord
или
me.dirty=false

Э-ээ, нет. Есть существенная разница, однако (в Access 2000). В последнем случае (программного сохранения записи, а не сохранения по команде с интерфейса) внятного сообщения об ошибке при сохранении записи (constraint violation, к примеру) мы не увидим. Access 2000 заменит его на одну и ту же во всех случаях ошибку 2757, что, мягко говоря, раздражает. В первом случае-то хоть пользователь на экране внятное сообщение об ошибке увидит.

А вот если нужно программно перехватить такую ошибку (ещё раз подчеркну, проблема имеется только в Access 2000), то количество "головной боли" резко возрастает. Вот в этой теме (https://www.sql.ru/forum/actualthread.aspx?bid=4&tid=146971) указан способ (впервые, насколько мне известно, предложенный Сергеем Вакшулем).
26 апр 05, 14:03    [1498295]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
yuniki
Member

Откуда:
Сообщений: 1171
Victosha
а что SendKeys ?


Так а что SendKeys - как ею Shift-Enter передать, у меня как-то не получилось, по инструкции вроде как SendKeys "+{Enter}" , но это не работает .

Пардон, вроде как заработало, но не пойму - как и почему :
дело в том, что когда в Form_KeyDown смотришь что передается, то получается только одна клавиша Shift (16) и модификатор Shift(1) , поэтому я и говорил, что не работает! Хотя при реальном нажатиии Shift-Enter видно , что это Enter (13 )и модификатор Shift (1) .


Вообще проблема в следующем :
- Форма перехватывает нажатия клавиш.
- По Shift-Enter - вызывается процедура с MsgBox, спрашивающем -
"уверены ли , дескать "
- После чего должно сработать Form_BeforeUpdate и Form_AfterUpdate и произойти сохранение , а они не срабатывают,Если MsgBox убрать из обработки Form_KeyDown, то нормально происходит сохранение, или если в Form_KeyDown после MsgBox'а повторить Shift-Enter - тожде нормально сохраняется.

2 Тимур Рахимов >
SendKeys "+{Enter}",True - кстати , как-то не почувствовал разницу с True и без.

PS.
1) Access2K (SP3), ADP.
2) DoCmd.RunCommand acCmdSaveRecord действительно матерится 2757.
26 апр 05, 15:19    [1498734]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
ЛП
Guest
yuniki
Вообще проблема в следующем :
- Форма перехватывает нажатия клавиш.
- По Shift-Enter - вызывается процедура с MsgBox, спрашивающем -
"уверены ли , дескать "
- После чего должно сработать Form_BeforeUpdate и Form_AfterUpdate и произойти сохранение

Не проще ли будет на BeforeUpdate вопросы вопрошать?
26 апр 05, 15:22    [1498748]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
Тимур Рахимов
Member

Откуда: Москва, Россия
Сообщений: 128
yuniki
SendKeys "+{Enter}",True - кстати , как-то не почувствовал разницу с True и без.

"Заметность" этой разницы от логики приложения будет зависеть. В случае, если второй аргумент - True, исполнение кода задержится на строке с SendKeys до окончания обработки Access'ом тех нажатий клавиш, что ему послали, то есть - до окончания сохранения записи. В моём случае это было важно, поскольку тот код, что стоял непосредственно после SendKeys проверял, успешно сохранилась запись или нет, и поэтому так важно было, чтобы сначала полностью прошла обработка Shift+Enter, и лишь затем исполнение двинулось дальше (синхронная обработка). Если второго аргумента True в SendKeys не ставить, то гарантировать последовательность этих событий нельзя (асинхронная обработка).
26 апр 05, 16:58    [1499309]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
yuniki
Member

Откуда:
Сообщений: 1171
2 ЛП : Не проще ли будет на BeforeUpdate вопросы вопрошать?

Это самым трудным для меня оказалось. Дело в том, что мне надо вопрос задавать ТОЛЬКО при Shift-Enter , а событие BeforeUpdate может срабатывать, если я просто выхожу из главной формы в подчиненную, мне в этом случае MsgBox c вопросом не нужен. Или также вопрос нужен, если в главной форме перехожу на другую запись . Но отличить переход в главной форме на другую запись от выхода из главной в подчиненую для меня не под силу, если есть предложения - милости просим в студию.


Тимур Рахимов > (синхронная обработка).

Да , уже почувствовал,
Но вот,что интересно, - почему же после посыла SendKeys "+{Enter}", True
в Form_KeyDown(KeyCode As Integer, Shift As Integer) приходит KeyCode=16 и Shift =1 , вместо 13 и 1 , хотя уже события BeforeUpdate отрабатывают сохранение записи?
26 апр 05, 17:17    [1499423]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
ЛП
Guest
Это самым трудным для меня оказалось. Дело в том, что мне надо вопрос задавать ТОЛЬКО при Shift-Enter , а событие BeforeUpdate может срабатывать, если я просто выхожу из главной формы в подчиненную, мне в этом случае MsgBox c вопросом не нужен.

Я что-то не понял - вам нужно спрашивать перед сохранением записи или вам не нужно спрашивать перед сохранением записи?
Если нужно, то какая вам разница в результате чего оно (сохранение) происходит - в результате перехода по контролам, по формам, нажатия клавиш, нажатия мышек или вообще закрытия приложения?
Если не нужно - то вы какую-то совершенно левую функциональность пытаетесь навесить на поверх стандартного аксесовского действия. Типа "здесь играем, здесь рыбу заворачиваем". Это однозначно не есть гуд.
26 апр 05, 17:30    [1499476]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
yuniki
Member

Откуда:
Сообщений: 1171
ЛП >
Да , действительно, мне нужно спрашивать перед сохранением записи , но не перед BeforeUpdate ;) .
Функциональность левая, но ничего не поделаешь.
Дело в том, что если по идее, то мне не нужно , чтобы Access шел на сохранение перед выходом из главной формы в подчиненную, а он это делает, и я не умею предотвращать это, отсюда все проблемы.
26 апр 05, 18:39    [1499751]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
yuniki
Member

Откуда:
Сообщений: 1171
ЛП ,Ну вот еще :
Нужно отредактировать запись в главной форме, все записи в подчиненой и только после этого по спец указанию оператора (Shift-Enter в данном случае)сохраниться.
26 апр 05, 18:50    [1499767]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
yuniki
ЛП >
Да , действительно, мне нужно спрашивать перед сохранением записи , но не перед BeforeUpdate ;) .

Момент перед сохранением == BeforeUpdate
Как вы собираетесь что-то делать перед сохранением, но не перед сохранением - моя не понимай.

yuniki
Дело в том, что если по идее, то мне не нужно , чтобы Access шел на сохранение перед выходом из главной формы в подчиненную, а он это делает

Вам нужно пойти в подчиненную? Значит запись в главной сохранится.
Вы не хотите сохраняться? Значит вы не попадете в подчиненную.
Все просто как два пальца об асфальт, и бороться с этим бессмысленно.

yuniki
и я не умею предотвращать это, отсюда все проблемы.

Имхо проблемы в том, что вы хотите от аксеса того, чего он не умеет, никогда не умел и никогда не будет уметь.
26 апр 05, 19:45    [1499896]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
Odess
Member

Откуда: Одесса, Украина
Сообщений: 6065
SendKeys "+({ENTER})", True

У меня так работает.
26 апр 05, 19:55    [1499913]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
yuniki
Member

Откуда:
Сообщений: 1171
SendKeys "+({ENTER})", True или SendKeys "+{ENTER}", True - без разницы

Почему после посыла SendKeys "+{Enter}", True
в Form_KeyDown(KeyCode As Integer, Shift As Integer) приходит KeyCode=16 и Shift =1 , вместо 13 и 1 , хотя уже события BeforeUpdate\AfterUpdate отрабатывают сохранение записи?
26 апр 05, 20:35    [1499986]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
yuniki
Member

Откуда:
Сообщений: 1171
ЛП : Вы не хотите сохраняться? Значит вы не попадете в подчиненную. >
Да ? А если я оторву Recordset до выхода из главной , я ведь реально не сохранюсь (хотя , наверно , события BeforeUpdate и AfterUpdate отработают, пока,правда, не пробовал ) и попаду в подчиненную ? А после Shift-Enter привяжу его обратно ?
26 апр 05, 20:40    [1499999]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
yuniki
Да ? А если я оторву Recordset до выхода из главной , я ведь реально не сохранюсь

У аксесовской формы нет такого разделения - просто сохраниться, реально сохраниться, или чиста канкретна сохраниться. И ей пофигу что у вас там в основе лежит - обычный рекордест, отвязанный рекордсет, или вообще ни разу ни к чему не привязанный рекордсет.

А вообще хотелось бы поглядеть - как это вы собираетесь отвязывать рекордсет в процессе редактирования записи, но без сохранения изменений и без потери оных.
27 апр 05, 03:09    [1500311]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как послать Shift-Enter на форму  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
DoCmd.DoMenuItem acFormBar , acRecordsMenu, acSaveRecord
or
DoCmd.RunCommand acCmdSaveRecord
28 апр 05, 09:16    [1503951]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить