|
|
|
Вешается форма из-за запроса на обновление
|
|||
|---|---|---|---|
|
#18+
Существует ленточная форма - очередь заказов, в основе которой запрос. Записи в форме отсортированы по полю Номер_в_очереди. Это поле должно быть обновляемым, т. к. заказы в очереди перемещаются путём изменения этого самого номера. Но после исключения заказов из очереди (ставим галочку в соотв. поле) необходимо обновить номер в очереди, чтобы он снова стал последовательным от 1 до...На данный момент делаю это посредством запроса на обновление DoCmd.RunSQL "UPDATE Очередь SET Очередь.номер_в_очереди = [Очередь]![index]" , где [index] - поле в запросе, получаемое след. образом: index: DCount("[номер_в_очереди]";"[Очередь]";"[номер_в_очереди] <=" & CStr([номер_в_очереди])) Этот запрос ужасно подвешивает форму, выполняется больше минуты...Подскажите, пожалуйста, какой-нибудь способ, как обновить номера заказов, не прибегая к такому запросу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2004, 12:48:06 |
|
||
|
Вешается форма из-за запроса на обновление
|
|||
|---|---|---|---|
|
#18+
>Подскажите, пожалуйста, какой-нибудь способ, как обновить номера заказов, не прибегая к такому запросу? Попробуйте пробежаться программно от первой записи до последней, присваивая необходимые порядковые номера, проверяя при этом необходимость в таком присваивании. Очень удобно - записи уже в том порядке в котором необходимо, порядковый номер храним в переменной и т.п. Только "бежать" надо не по Набору Записей и даже не по Клону Набора Записей, а по клону клона набора записей :) Что бы было понятней, приведу выдержку из собственных изысканий, кажется, в А2000: При редактировании стандартного клона набора записей формы (Form.RecordsetClone) все изменения отображаются на экране сразу после обновления записи. Этого получается избежать через запрет перерисовки формы (Form.Painting = False). Данный вариант является очень медленным, т.к. редактирование одной записи занимает 0,045 секунды (Pentium 200 MMX). Значительного ускорения получается добиться за счет редактирования специально созданного клона набора записей (Set rstClone = mfrmBaseForm.Recordset.Clone), вносимые изменения в котором не отображаются сразу на экране. Время редактирования одной записи составляет 0,003-0,005 секунды, что в 10 раз быстрее чем в варианте со стардартным клоном набора записей. В варианте со специально созданным клоном внесенные изменения отображаются на экране либо при перемещении каретки курсора на запись, либо при перемещении над записью курсора мыши. Данный эффект не следует использовать, т.к. остается вопрос с перересовкой неопределенного (Null) статуса поля "Selected", а так же из-за того, что в последующих версиях Access данный эффект может попросту исчезнуть, т.к. не является документированной фичей. Насильная перерисовка экрана после редактирования клона может производиться либо через стандартный метод формы Repaint, либо через отключение и последующее безотлогательное включение перересовки формы (Painting). В случае использования метода Repaint экран перерисовывается без "мерцаний", т.е. перерисовываются только изменившиеся поля без предварительной очистки экрана. Время выполнения перерисовки 0,2 секунды. В случае отключения с последующим включением прорисовки формы экран перерисовывается с "мерцанием", т.е. перед перерисовкой экран очищается и затем отрисовывается заново. Время выполнения перерисовки порядка 0,135-0,150 секунды, что несколько меньше чем в случае с методом Repaint. Тем не менее далее рассматривается только метод Repaint, т.к. он не приводит к мерцанию... З.Ы. Саныч, и тебе привет от реинкарнировавшего (местами) Свина :) //Саныч поймет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2004, 14:54:37 |
|
||
|
Вешается форма из-за запроса на обновление
|
|||
|---|---|---|---|
|
#18+
В том то и дело, что пробежаться программно не хватает опыта, может из знатоков кто подскажет, хоть в общих чертах, как это сделать. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2004, 16:05:16 |
|
||
|
Вешается форма из-за запроса на обновление
|
|||
|---|---|---|---|
|
#18+
В общих чертах? Ну, Вы сами захотели :) Создаем объектную переменную (см. в Хелпе про Dim и еже с ним); Создаем клон набора записей и присваиваем его нашей переменной (см. Set, Recordset и Clone); В цикле (см. Do или For) пробегаем (см.MoveNext) по набору записей и меняем что надо (см. Edit и Update). Закрываем клон (см. Close) и освобождаем переменную (см. Nothing). И это... В хелпе везде есть примеры. Ознакомьтесь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2004, 21:48:50 |
|
||
|
Вешается форма из-за запроса на обновление
|
|||
|---|---|---|---|
|
#18+
Получилось следующее... Dim rs As Recordset Dim Nmax As Integer Dim Hmax As Integer Nmin = DMin("[номер_в_очереди]", "[Очередь]") Nmax = DCount("[номер_в_очереди]", "[Очередь]") Set rs = Forms![Очередь].Recordset.Clone Hmax = 0 For ind = Nmin To Nmax No = Hmax + 1 rs.MoveNext rs.Edit rs("номер_в_очереди") = No Next ind rs.Close Set rs = Nothing Пишет "Не найдена текущая запись". Как её определить? rs.MoveFirst? И ещё...Когда мы обращаемся к клону набора записей, обращение идёт к набору записей, который был до того момента, когда проставлены галочки и нужно обновить очередь, или к уже обновлённому запросу? Т. Е. нужно ли проверять условие необходимости присвоить заказу новый номер в очереди. заранее большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 10:16:47 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1547&tid=1671275]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 351ms |

| 0 / 0 |
