|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
Уважаемые программеры! Помогите, пожалуйста. Задача такая: в подчиненной форме, сделанной на основе запроса, при снятии флажка запись исключается из запроса. Соответственно при AfterUpdate флажка к форме применяется Requery. Проблема в том, что форма дергается и переходит на первую запись, а нужно, чтобы она оставалась там же, где была исключена запись. Искал на форуме, все прочитал, не могу понять, как это сделать. Нашел такой код, но как применить не знаю: Private Sub PhoneCall_AfterUpdate() Dim NM As String Me.Dirty = False NM = Me.Name With Forms("Form General")![subInvitationRequest].Form .Requery With Forms("Form General")![subInvitationRequest].Form .OrderBy = "CompanyName" .OrderByOn = True End With .RecordsetClone.FindFirst "[Name]=" & NM .Bookmark = .RecordsetClone.Bookmark End With End Sub Выдает такую ошибку: <Имя> не распознается ядром базы данных Microsoft Jet как допустимое имя поля или выражение. (Ошибка 3070) В <Имя> подставляет Объект-источник данных подчиненной формы (то есть той самой, которую нужно обновить, чтобы она не дергалась). Помогите, пожалуйста. subInvitationRequest - имя контейнера подчиненной формы Name - поле - Фамилия Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 14:36 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
И еще такой момент. Попробовал немного изменить код, если ставить апострофы,например, так: .RecordsetClone.FindFirst '"[Name]="' & NM Выдает другую ошибку: Ошибочный аргумент. (Ошибка 3001) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 14:40 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
jakobs_himmelУважаемые программеры! Помогите, пожалуйста. Задача такая: в подчиненной форме, сделанной на основе запроса, при снятии флажка запись исключается из запроса. Соответственно при AfterUpdate флажка к форме применяется Requery. Проблема в том, что форма дергается и переходит на первую запись, а нужно, чтобы она оставалась там же, где была исключена запись. Искал на форуме, все прочитал, не могу понять, как это сделать. Нашел такой код, но как применить не знаю: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Выдает такую ошибку: <Имя> не распознается ядром базы данных Microsoft Jet как допустимое имя поля или выражение. (Ошибка 3070) В <Имя> подставляет Объект-источник данных подчиненной формы (то есть той самой, которую нужно обновить, чтобы она не дергалась). Помогите, пожалуйста. subInvitationRequest - имя контейнера подчиненной формы Name - поле - Фамилия Заранее спасибо! зачем тут 2-а раза With Forms("Form General")![subInvitationRequest].Form ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 14:40 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
jakobs_himmelИ еще такой момент. Попробовал немного изменить код, если ставить апострофы,например, так: Код: vbnet 1.
Выдает другую ошибку: Ошибочный аргумент. (Ошибка 3001) нуу ещё бы - такая бредятина, как тебе компилятор ещё не матом ответил, только, странно ... код офорляй так что б его увидеть можно было !! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 14:42 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
Qwerty, два раза не нужно, косяк вышел. Но ведь это вряд ли вызывает ошибку? [/quot] зачем тут 2-а раза With Forms("Form General")![subInvitationRequest].Form ?[/quot] ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 14:48 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
qwerty112, подскажите, пожалуйста, как именно? Я - полный чайник, а базу делать нужно... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 14:49 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
jakobs_himmel, Код: vbnet 1.
http://www.sql.ru/faq/faq_topic.aspx?fid=157 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 14:50 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
Спасибо! С FAQ познакомился. Теперь ошибок не выдает, но дергается все равно (( ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 15:51 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
jakobs_himmel, забудь ине обращай внимения, это пока тебе не по-зубам. но если еть большое желание - штудируй форум тут выкладывались решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 16:36 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
jakobs_himmel With Forms("Form General")![subInvitationRequest].Form .Requery .OrderBy = "CompanyName" .OrderByOn = True .RecordsetClone.FindFirst "[Name]=" & NM If Not .RecordsetClone.NoMatch Then .Bookmark = .RecordsetClone.Bookmark End With В вашем коде Requery лишний, т.к. выполнение сортировки и так делает перезапрос, а результат поиска всегда надо проверять. На чем построена ваша форма? Если на запросе, и в нем указана сортировка по CompanyName, то, наоборот, нужно применить Requery, а сортировать не нужно. И в этом случае ваша проблема решается просто. Вместо всего вашего кода выполните одну строчку: Forms("Form General")![subInvitationRequest].Requery Или (правильнее): Me.Parent![subInvitationRequest].Requery Заметьте, без .Form перед .Requery. Результат тот же, но визуально выделенная запись остается на месте (если их достаточно). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 16:40 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), спасибо, буду пробовать! Вадя, я бы с удовольствием оставил так, но тем, кто с этим работает, очень не нравится дергающаяся форма, и я их понимаю. Надеюсь, получится ) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 19:21 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
Анатолий, извините, приходится Вас еще побеспокоить: При работе такого кода: Private Sub PhoneCall_AfterUpdate() Me.Parent![subInvitationRequest].Requery End Sub выдает ошибку: Error 2118 - Необходимо сохранить поле перед обновлением Прочитал все, что нашел на форуме, об этой ошибке. Не могу понять, в чем дело. Форма создана из запроса, а поле PhoneCall - флажок, после снятия которого необходимо обновить форму (снятием флажка убираются записи, которые в форме не нужны: то есть заново выполняется запрос, отбирающий из таблицы записи с флажком). Помогите, пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2012, 14:44 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
Private Sub PhoneCall_AfterUpdate() Me.Dirty = False Me.Parent![subInvitationRequest].Requery End Sub ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2012, 15:03 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
jakobs_himmelне нравится дергающаяся форма Вот так не дергается: Forms!Форма!ПодчФорма.Form.Recordset.Requery ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2012, 19:29 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
чтобы форма не дергалась надо 0 запретить прорисовку формы 1 определить первую видимую строку 1а определиться на какую запись должен указывать указатель (на передыдущую перед удаляемой, или на последующую после удаляемой. оба варианта имеют право жить) 1б запомнить её 2 запомнить первую видимую запись ----удалить запись 3 обновить 4 найти запомненную строку (первую видимую) 5 перейти на неё 6 перейти на запись по п.1б 7 разрешить прорисовку 8 прорисовать возможно произвести такое с помощюь скрола, но гемора будет не меньше +api ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2012, 19:48 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
Вадя0 запретить прорисовку формы 1 определить первую видимую строку 1а определиться на какую запись должен указывать указатель (на передыдущую перед удаляемой, или на последующую после удаляемой. оба варианта имеют право жить) 1б запомнить её 2 запомнить первую видимую запись ----удалить запись 3 обновить 4 найти запомненную строку (первую видимую) 5 перейти на неё 6 перейти на запись по п.1б 7 разрешить прорисовку 8 прорисовать Извиняюсь за глупый вопрос: каким образом можно определить первую видимую строку? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 11:19 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
вопрос не тупой в этом и заключается одна из сложностей. к сожалению я не помню как это делается, давно это делал. может Анатолий ( Киев ) или Бенедикт помогут... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 12:13 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
Вадяможет Анатолий ( Киев ) или Бенедикт помогут... Спасибо за ответ. Будем надеяться на помощь указанных специалистов ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 12:25 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
Справку А97 русСвойство SelTop позволяет указать или определить строку (запись), являющуюся верхней строкой в выделенном блоке в таблице, запросе или в режиме таблицы, или выделенных записей в ленточной форме. Для указания или определения крайнего левого столбца (поля) в текущем выделенном блоке используют свойство SelLeft. Например, если в таблице «Клиенты» выделен прямоугольный диапазон ячеек, то первую строку и первый столбец в выделенном блоке в режиме таблицы можно определить с помощью свойств SelTop и SelLeft. Значения Свойство SelTop. Значение типа Long Integer от 1 до числа записей в режиме таблицы или в ленточной форме. Вызов этого свойства устанавливает или возвращает номер верхней строки в выделенном блоке или номер выделенной записи в ленточной форме. Свойство SelLeft. Значение типа Long Integer от 1 до числа столбцов в таблице. Вызов этого свойства устанавливает или возвращает номер столбца слева в выделенном блоке. Свойства SelTop и SelLeft недоступны в режиме конструктора. Данные свойства используются только в макросах и в программах Visual Basic. Дополнительные сведения При отсутствии выделения данные свойства принимают значения номеров строки и столбца ячейки, находящейся в фокусе. В случае выделения в таблице одной или более записей (с использованием области выделения), изменение значения свойства SelLeft невозможно. В случае выделения одного или более столбцов (с использованием их заголовков), изменение значения свойства SelTop невозможно. Вместе со свойствами SelHeight и SelWidth данные свойства позволяют указать или определить размеры выделенного блока. Свойства SelTop и SelLeft определяют положение верхнего левого угла выделенного блока. Координаты правого нижнего угла выделенного блока относительно его верхнего левого угла определяют свойства SelHeight и SelWidth. ЗЫ. Выделенное синим - исправленная мной погрешность перевода в оригинале. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 12:45 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
авторСвойство SelTop. Значение типа Long Integer от 1 до числа записей в режиме таблицы или в ленточной форме. Вызов этого свойства устанавливает или возвращает номер верхней строки в выделенном блоке или номер выделенной записи в ленточной форме. Попробовал: Код: vbnet 1. 2. 3.
Но возвращает именно номер строки, считая от самой первой, а не от верхнего края формы. В таблице 10 записей, на форме умещается, например, только четыре. Выделена 9 запись - выдается значение 10 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 13:21 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
Опечатка, читать: Выделена 9 запись - выдается значение 9 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 13:24 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
ИВПВыделена 9 запись - выдается значение 9 Судя по вашей картинке в контейнере субформы вмещается 5 записей. Код: vbnet 1. 2.
9-я запись будет 4-й на экране, поэтому когда после Requery вы ее нашли и выделили, надо выполнить: Код: vbnet 1. 2.
После этого текущая запись опять 4-я на экране. В более общем случае кол-во записей, вмещающихся на экране, можно определить как результат цеорчисленного деления высоты контейнера на высоту области данных. В еще более общем случае можно с помощью API запомнить, а затем восстановить положение вертикального скрола, но это не всегда дает желаемый результат (если удалено или добавлено много записей). Посмотрите эту статью . ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 15:02 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
jakobs_himmel, где вы пропали? примерPrivate Sub PhoneCall_AfterUpdate() Me.Dirty = False Me.Parent![subInvitationRequest].Requery End Sub Это помогло? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 15:06 |
|
В ходе исключения записей и сортировки подчиненная форма не должна дергаться
|
|||
---|---|---|---|
#18+
Анатолий ( Киев )! Только что пришел из больнички (((((( Как только оклемаюсь, всё постараюсь проверить. Спасибо огромное за быструю реакцию. Спасибо за ссылку. Буду разбираться. По названию - похоже то самое. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 15:59 |
|
|
start [/forum/topic.php?fid=45&tid=1621304]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
others: | 241ms |
total: | 519ms |
0 / 0 |