Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Оптимизация кода / 25 сообщений из 37, страница 1 из 2
30.06.2004, 15:56:17
    #32583647
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Господа не судите меня строго, на ADO начал писать месяц назад, поэтому пишу в силу своих возможностей.
Надо увеличить скорость работы программы, сейчас она равна 6с.
Обрабатывает 110 записей, если записей будет больше время увеличится до критических значений.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub summa2()
Dim month As String
Dim summa As Long
Dim rcd As ADODB.Recordset
Dim rcd2 As ADODB.Recordset
DoCmd.RunSQL "ALTER TABLE svod ADD COLUMN Итого long;"
    
    Set rcd2 = New ADODB.Recordset
    rcd2.Open "svod", CurrentProject.Connection, , adLockOptimistic, adCmdTable
While Not rcd2.EOF
    Set rcd = New ADODB.Recordset
    rcd.Open "Period", CurrentProject.Connection, , adLockOptimistic, adCmdTable
    summa =  0 
While Not rcd.EOF
    month = CStr(Left(rcd!start_time,  2 )) & "_" & CStr(Right(rcd!start_time,  2 ))
    rcd.MoveNext
    summa = summa + Nz(rcd2.Fields(month),  0 )
Wend
    rcd.Close
    rcd2!Итого = summa
    rcd2.MoveNext
Wend
    rcd2.Close
End Sub
...
Рейтинг: 0 / 0
30.06.2004, 16:03:26
    #32583669
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Пожелание (на будующее)

Есть такая кнопка при добавлении поста - называется
Код: plaintext
[SRC]

ИМХО - текс программ будет легче читать
...
Рейтинг: 0 / 0
30.06.2004, 16:05:16
    #32583674
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
понял, учту, если надо сделаю прямо сейчас.
...
Рейтинг: 0 / 0
30.06.2004, 16:06:40
    #32583679
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Вероятно все это можно запросто засунуть в запрос на обновление, который работает во стоко раз быстрее как долго вы крутите свой цикл по recordset'у

А так как разбираться с кодом с вынимаем оттуда логики самого алгортима влом (я думаю влом будет не токо мне), то если автор хочет подсказки, то пусть для начала напишет что он имеет и что хочет получить
...
Рейтинг: 0 / 0
30.06.2004, 16:07:50
    #32583682
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Как-то все непонятно у тебя

А занчения в таблице Period меняются?
Или они константами пробиты, раз и навсегда?
...
Рейтинг: 0 / 0
30.06.2004, 16:11:26
    #32583694
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Progaпонял, учту, если надо сделаю прямо сейчас.
Кто-то добрый уже сделал :)
...
Рейтинг: 0 / 0
30.06.2004, 16:12:23
    #32583697
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Чтобы было быстрее - не надо открывать/закрывать в цикле rcd. Открой один раз и пользуйся findnext

А лучше запросами пользоваться. Какой смысл у таблицы period? Или это вообще запрос? И, кстати, это MDB или ADP?
...
Рейтинг: 0 / 0
30.06.2004, 16:13:10
    #32583698
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
в таблице Period может быть сколько угодно столбцов, т.к. изначально не известно сколько длится проект строительства.
Количество этих столбцов берётся из 3-ей таблы, которая в свою очередь получается с помощью из 4-ой, а 4-ая образуется путём выимки данных из проекта Project-a.
Короче давно код пишу.
...
Рейтинг: 0 / 0
30.06.2004, 16:13:11
    #32583699
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
ЗЫ. А вот это:

rcd2!Итого = summa
rcd2.MoveNext

что делает?
...
Рейтинг: 0 / 0
30.06.2004, 16:13:27
    #32583701
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Продолжая вопрос GEO - если адп - то ВСЮ логику на сервер в храниммые - и с песней по жизни:)
...
Рейтинг: 0 / 0
30.06.2004, 16:14:12
    #32583702
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
авторв таблице Period может быть сколько угодно столбцов

Это вы заблуждаетесь, батенька. Не больше 250 для мдб или 400 (кажется) для mssql2000
...
Рейтинг: 0 / 0
30.06.2004, 16:15:12
    #32583705
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
to geo:
Это просто
1) записывает в Итого сумму на строке
2) переход на следующую строку
...
Рейтинг: 0 / 0
30.06.2004, 16:15:56
    #32583708
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Я сомневаюсь, что 1-й пункт выполняется. rs.update
...
Рейтинг: 0 / 0
30.06.2004, 16:17:08
    #32583712
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Ой господи, это понятно, что не более 255 столбцов, просто имеется ввиду не известно заранее сколько их будет.
Всё в mdb.
...
Рейтинг: 0 / 0
30.06.2004, 16:17:12
    #32583714
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
авторпользуйся findnext
Т.е.
rcd.find "блабла"
...
Рейтинг: 0 / 0
30.06.2004, 16:20:24
    #32583725
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
это ничего не даст. Или вы имеете ввиду не открывать и закрывать rcd.
А пользоваться find-ом.
...
Рейтинг: 0 / 0
30.06.2004, 16:20:55
    #32583727
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Очень хорошо, а не покажет ли уважаемый джин, каким образом таблица period формируется из "3-й таблицы"?
...
Рейтинг: 0 / 0
30.06.2004, 16:21:30
    #32583728
Sven
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Код: plaintext
Set rcd = New ADODB.Recordset
не надо внутри цикла делать
в принципе можно создавать рекордсет и при объявлении :
Код: plaintext
Dim rst as New ADODB.recordset
но это не всегда корректно
...
Рейтинг: 0 / 0
30.06.2004, 16:23:44
    #32583734
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Private Sub summa2()
Dim month As String
Dim rcd As ADODB.Recordset
 'Dim rcd2 As ADODB.Recordset
 
Dim strSQL as String
DoCmd.RunSQL "ALTER TABLE svod ADD COLUMN Итого long;"
    
    strSQL = ""

    Set rcd = New ADODB.Recordset
    rcd.Open "Period", CurrentProject.Connection, , adLockOptimistic, adCmdTable
    summa =  0 
While Not rcd.EOF
    month = CStr(Left(rcd!start_time,  2 )) & "_" & CStr(Right(rcd!start_time,  2 ))
    rcd.MoveNext
     'summa = summa + Nz(rcd2.Fields(month), 0)
 
    if Len(strSQL) >  0  then strSQL = strSQL & " + "
    strSQL = strSQL & "Nz(" & month & ", 0)"
Wend
    rcd.Close

    strSQL = "UPDATE svod SET [ИТОГО] = " & strSQL & ";"
DoCmd.RunSQL strSQL

End Sub
?
...
Рейтинг: 0 / 0
30.06.2004, 16:24:46
    #32583737
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Если кто хочет, могу выкинуть весь код, что я написал,
только заранее необходимо установить MS Project(файл пример скину тоже), может так будет понятнее.
P.S.Все предложения хорошие, но они не увеличивают скорость.
А это ГЛАВНОЕ.
...
Рейтинг: 0 / 0
30.06.2004, 16:31:35
    #32583756
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Предположу сам:
period создается посредством transform некоей Table3, заголовки столбцов - format(ПолеДаты,"yy mm").

Тогда искомую таблицу с итогами можно получить запросом типа

Код: plaintext
1.
2.
select svod.*, sumfield 
from svod left join (select [month], sum(valuefield) from Table3 group by [month]) as q1
  on month(svod.start_time)=q1.[month]

Кстати, зачем создавать столбец и заполнять его данными, если в любой момент времени можно эти данные быстро вычислить?
...
Рейтинг: 0 / 0
30.06.2004, 16:34:27
    #32583763
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
а если все-таки надо через... код вба, то попробуй вместо

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    rcd.Open "Period", CurrentProject.Connection, , adLockOptimistic, adCmdTable
    summa =  0 
While Not rcd.EOF
    month = CStr(Left(rcd!start_time,  2 )) & "_" & CStr(Right(rcd!start_time,  2 ))
    rcd.MoveNext
    summa = summa + Nz(rcd2.Fields(month),  0 )
Wend
    rcd.Close
    rcd2!Итого = summa

написать

Код: plaintext
1.
    month = CStr(Left(rcd!start_time,  2 )) & "_" & CStr(Right(rcd!start_time,  2 ))
    rcd2!Итого = dsum(month,"Period")
...
Рейтинг: 0 / 0
30.06.2004, 16:35:17
    #32583765
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
to paparome:
Выдаёт ошибку
...
Рейтинг: 0 / 0
30.06.2004, 16:36:48
    #32583772
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Progato paparome:
Выдаёт ошибку
strSQL = strSQL & "Nz( [ " & month & " ] , 0)"
...
Рейтинг: 0 / 0
30.06.2004, 16:41:53
    #32583784
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация кода
Спасибо всем всё работает!!!
Особенно paparome
Получился код такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Private Sub summa3()
Dim month As String
Dim rcd As ADODB.Recordset
 'Dim rcd2 As ADODB.Recordset
 
Dim summa As Long
Dim strSQL As String
DoCmd.RunSQL "ALTER TABLE svod ADD COLUMN Èòîãî long;"
    
    strSQL = ""

    Set rcd = New ADODB.Recordset
    rcd.Open "Period", CurrentProject.Connection, , adLockOptimistic, adCmdTable
    summa =  0 
While Not rcd.EOF
    month = CStr(Left(rcd!start_time,  2 )) & "_" & CStr(Right(rcd!start_time,  2 ))
    rcd.MoveNext
     'summa = summa + Nz(rcd2.Fields(month), 0)
 
    If Len(strSQL) >  0  Then strSQL = strSQL & " + "
    strSQL = strSQL & "Nz([" & month & "], 0)"
Wend
    rcd.Close

    strSQL = "UPDATE svod SET [ÈÒÎÃÎ] = " & strSQL & ";"
DoCmd.RunSQL strSQL

End Sub
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Оптимизация кода / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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