powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Увеличение скорости работы
40 сообщений из 40, показаны все 2 страниц
Увеличение скорости работы
    #32575705
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема: есть табла, в которой необходимо заполнить 3 столбца,
1 столб-цена
2 столб-название
3 столб- время выполнения
Проблема состоит в том, что 1 столб заполняется из другой таблицы, причём данные делятся на datediff("m",a,b),
где а-самая ранняя дата начала работы 3столба
b- самая поздняя дата.... 3столба
Пришёл к выводу, что приходится пробега дважды либо по заполняемой табле, либо по внешней (откуда берутся данные).
Вопрос, а можно ли сделать так, чтобы и внешн. и заполняемая табла пробегались по разу.
Нужна логика, код сам напишу.
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575727
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то мутно :(

МОжет попроще объяснишь
А то даже не понятно, сколько таблиц, 2 или 1

+
2 раза пробежать - это тоже линейная зависимость (ни чего страшного - ИМХО), а вот если для каждой записи полный проход, то это уже квадратичная, вот тогда надо думать (и то если скорось не устраивает)

Короче, давай:
- структуры обеих таблов (можно урезанные, или все-та ки одна таблица будет использоваться)
- тестовые данные
- что хочешь получить
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575738
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторгде а-самая ранняя дата начала работы 3столба
b- самая поздняя дата.... 3столба
а теперь то же самое ,но по русски :)
Трудно что ли привести тестовые даные и желаемый результат?
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575745
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Апаздал!((c)Л.П.)
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575772
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще так, есть внешняя табла(всё тот же .mpp, меня им трахают уже 2-ю неделю, чем-то Project начальству приглянулся, будь он не ладен), так вот,
надо из этой таблы в Аксе сформировать свою, на основе которой будет делаться отчёт о бюджете проекта.
В таблу Акса необходимо поместить
1)название задачи
2)стоимость задачи, поделённую на срок действия проекта.
3)время начала задач.
Нужна логика, своя есть но мне кажется как-то долго, может, что порезче предложешь, если надо выкину код.
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575787
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин!
А тестовые данные где?
Не надо уповать на наши скромные телепатические способности :)
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575789
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я про то, что один фиг не понятно
Ясности, твой пост так и не дал :(
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575812
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо выкидываю код (с комментами, что надо сделать):

Private Sub Кнопка0_Click()
Dim rcd As DAO.Recordset
Dim db As DAO.Database
Dim cnn1 As ADODB.Connection
Dim rstEmployees As ADODB.Recordset
Dim strCnn As String
Dim varDate As Variant
Dim sSQL As String
Dim p As String
Dim result As Integer
Dim fileName As String
DoCmd.RunSQL "delete * from balance"

' Open connection.
Dim a As Integer
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Выбор проекта"
.Filters.Add "Все файлы", "*.*"
.Filters.Add "Проекты", "*.mpp"
.FilterIndex = 1
.AllowMultiSelect = False
.InitialFileName = CurrentProject.Path
result = .Show
If result <> 0 Then
p = Trim(.SelectedItems.Item(1))
End If
End With
If p = "" Then GoTo n1
Set db = CurrentDb

strCnn = "Provider=Microsoft.Project.OLEDB.10.0;Project Name=" & p
sSQL = "SELECT Taskcost,TaskName,Taskfinish FROM Tasks"

Set cnn1 = New ADODB.Connection
cnn1.Open strCnn

' Open employee table.
Set rstEmployees = New ADODB.Recordset
rstEmployees.CursorType = adOpenKeyset
rstEmployees.LockType = adLockOptimistic
rstEmployees.Open sSQL, cnn1, , , adCmdText

Set rcd = db.OpenRecordset("balance", dbOpenDynaset, dbSeeChanges)
Do While Not rstEmployees.EOF
msg = rstEmployees.Fields.Item("taskcost")
msg1 = rstEmployees.Fields.Item("taskname")
msg2 = rstEmployees.Fields.Item("taskfinish")

rcd.AddNew
rcd!name_balance = msg1
rcd!price_balance = msg
rcd!time_balance = msg2
rcd.Update
rstEmployees.MoveNext
Loop
cnn1.Close
rcd.Close
rcd.Close
Set cnn1 = Nothing
Set rstEmployees = Nothing
n1:
End Sub

Программа необходима, чтобы высчитать сроки
Private Function mes()
Dim rcd As DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb
Dim h
Dim k As Date
Dim l As Date
Set rcd = db.OpenRecordset("balance", dbOpenDynaset, dbSeeChanges)
Do
If rcd.EOF Then GoTo exit1
rcd.Move 3
k = rcd!time_balance
rcd.MoveLast
l = rcd!time_balance
h = DateDiff("m", k, l)
rcd.MoveNext
Loop
exit1:
mes = h
End Function
После получения mes прогоняется программа заменяющая
price_balance на price_balance/mes

но хотелось бы сделать, так чтобы с помощью двух первых была решена задача, получения в поле price_balance сразу нужного значения.
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575837
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрю код понравился.
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575859
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просили

авторКороче, давай:
- структуры обеих таблов (можно урезанные, или все-та ки одна таблица будет использоваться)
- тестовые данные
- что хочешь получить
И где тут про код?
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575888
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторООООООООООООО как всё запущено!!!
В зеркало посмотри

Для особо одареных повторяю ещё раз
paparomeКороче, давай:
- структуры обеих таблов (можно урезанные, или все-та ки одна таблица будет использоваться)
- тестовые данные
- что хочешь получить
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575905
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я одного не понял :(
У вас сейчас все правильно работает.
Но не устраивает скорость или то что приходится много раз функцию mes вызывать?

Если со скростью все ОК (в разымных рамках, так сказать), то какой смысл переделывать работающий код? Чтобы ошибок понаплодить и тра%ся с их отловом?
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575927
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, вопрос сформулирую подругому, можно ли в процессе заполнения таблицы в первый столбец (стоимость) заносить данные, пусть это будет
100 руб, делённое на количество месяцев равное datediff("m",a,b)
где а - самая ранняя дата в столбце 3 (даты)
b - самая поздняя дата в столбце 3 (даты), причём даты заполняются вместе со стоимостью.
Все данные берутся из внешней таблицы.

Поясню ещё раз код не нужен, нужна логика.
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575937
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Proga: выложи
-структуры обеих таблов (можно урезанные, или все-та ки одна таблица будет использоваться)
- тестовые данные
- что хочешь получить
2) Лишнее я потер.
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575939
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай повторю еще раз.
ВНИМАНИЕ!
Proga, выложи:
- структуры обеих таблов (можно урезанные, или все-та ки одна таблица будет использоваться)
- тестовые данные
- что хочешь получить
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575948
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaХорошо, вопрос сформулирую подругому, можно ли в процессе заполнения таблицы в первый столбец (стоимость) заносить данные, пусть это будет
100 руб, делённое на количество месяцев равное datediff("m",a,b)
где а - самая ранняя дата в столбце 3 (даты)
b - самая поздняя дата в столбце 3 (даты), причём даты заполняются вместе со стоимостью.
Все данные берутся из внешней таблицы.

Поясню ещё раз код не нужен, нужна логика.

Значит будет одна стоимость для всех записей одного проекта?

После заполнения своей таблицы, делаешь Dmax и Dmin по датам (находишь что надо)
Потом одним Update по всей табле

Так?
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575960
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во человек, с полуслова понимает
P.S. I love you!!!
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575963
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaВо человек, с полуслова понимает
P.S. I love you!!!

Только ты эти пол слова на станицу растянул :)
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575967
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АХТУНГ!!!
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575968
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ИМХО:

Если я оказался прав, то стоимость в каждой строке - это дублирование информации - следовательно какие-то проблемы с нормализацией :(

Может корректнее будет хранить сойства проекта отдельно, "шаги" его отдельно?
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32575980
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не умею писать ТЗ, я всего лишь маленький глупенький программер, обчитавшийся книжек по VB 5,6, Project 2000,2002,2003, с сертификатом Optima-Workflow, знанием Delfi, C++ for САПР(AutoCad),с сертификатом Optima-Workflow, опытом работы с А2000 и кучей мусора в голове, который иногда приходится применять.
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576016
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сертификат Optima-Workflow видать очень важная штука:)

Сорри за офтоп.
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576025
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так мысли вслух
Если начало проекта -01/06/2004 , а окончание- 30/06/2004
что даст
mes = cost/datediff("m",a,b)
????
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576065
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to vig:
ты немного путаешь, cost=cost/mes,(эта формула отображает распределение средств на каждый месяц на задачу в течении всего проекта).
или я не понял?
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576066
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, сертификат в 2 экземплярах???
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576100
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Progato vig:
ты немного путаешь, cost=cost/mes,(эта формула отображает распределение средств на каждый месяц на задачу в течении всего проекта).
или я не понял?

Он имел ввиду, что функция datediff может и 0 вернуть - тогда получишь деление на 0
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576113
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясню проекты в стоительстве (я там работаю) длятся не меньше 6 месяцев -это аксиома!!!
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576131
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпроекты в стоительстве (я там работаю)
Вот как раз в строительстве и поаккуратнее, пожалуйста...А то расчитывают, на ноль делят, а потом у них (у нас) крыши едут
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576149
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А теперь господа предоставляю код, который я сообразил на поставленный первичный вопрос, в студию


Private Sub Êíîïêà0_Click()
Dim rcd As DAO.Recordset
Dim db As DAO.Database
Dim cnn1 As ADODB.Connection
Dim rstEmployees As ADODB.Recordset
Dim strCnn As String
Dim varDate As Variant
Dim sSQL As String
Dim p As String
Dim result As Integer
Dim fileName As String
DoCmd.RunSQL "delete * from balance"
' Open connection.
Dim a As Integer
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Âûáîð ïðîåêòà"
.Filters.Add "Âñå ôàéëû", "*.*"
.Filters.Add "Ïðîåêòû", "*.mpp"
.FilterIndex = 1
.AllowMultiSelect = False
.InitialFileName = CurrentProject.Path
result = .Show
If result <> 0 Then
p = Trim(.SelectedItems.Item(1))
End If
End With
If p = "" Then GoTo n1
Set db = CurrentDb

strCnn = "Provider=Microsoft.Project.OLEDB.10.0;Project Name=" & p
sSQL = "SELECT Taskcost,TaskName,Taskfinish FROM Tasks"

Set cnn1 = New ADODB.Connection
cnn1.Open strCnn

' Open employee table.
Set rstEmployees = New ADODB.Recordset
rstEmployees.CursorType = adOpenKeyset
rstEmployees.LockType = adLockOptimistic
rstEmployees.Open sSQL, cnn1, , , adCmdText

' Ïîïûòêà ðåøåíèÿ çàäà÷è
'--------------------------------------------
Set rcd = db.OpenRecordset("balance", dbOpenDynaset, dbSeeChanges)
Do While Not rstEmployees.EOF
msg = rstEmployees.Fields.Item("taskcost")
msg1 = rstEmployees.Fields.Item("taskname")
msg2 = rstEmployees.Fields.Item("taskfinish")

rcd.AddNew
rcd!name_balance = msg1
rcd!price_balance = msg
rcd!time_balance = msg2
rcd.Update
rstEmployees.MoveNext
Loop
cnn1.Close
rcd.Close
Set cnn1 = Nothing
Set rstEmployees = Nothing
n1:
Call isprav
End Sub

Private Sub isprav()
Dim rcd As DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb

Set rcd = db.OpenRecordset("balance", dbOpenDynaset, dbSeeChanges)
Do
If rcd.EOF Then GoTo exit1
rcd.Edit
rcd!price_balance = rcd!price_balance / mes
rcd.Update
rcd.MoveNext
Loop
exit1:
End Sub

Private Function mes()
a = DMax("time_balance", "balance")
b = DMin("time_balance", "balance")
mes = DateDiff("m", b, a)
End Function

Так вот, всё работает быстро, а хотелось бы ещё быстрее,
В конечном итоге вопрос заключался в следующем:
А можно всё сделать также(в конце получить такой же результат), но без
проги ISPRAV.
Настоящие программеры разберутся,что имелось ввиду.
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576170
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настоящие программеры не используют GOTO ,явно обьявляют все переменные ,ну и многое другое.
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576172
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Goto ненужен, тогда зачем его придумали.
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576175
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Set rcd = db.OpenRecordset("balance", dbOpenDynaset, dbSeeChanges)
Do
If rcd.EOF Then GoTo exit1
rcd.Edit
rcd!price_balance = rcd!price_balance / mes
rcd.Update
rcd.MoveNext
Loop

Я такого не советовал!!!
Я сказал одним Update, в ты по рекордсету начал шарахаться (да еще на каждом шаге функцию mes вызываешь, а она между прочим в базу "смотрит" - причем активно)
Таблица же локальная :)

Пиши так:

Код: plaintext
1.
strSQL = "UPDATE balance SET price_balance = price_balance / " & mes()
db.Execute strSQL

?

+ If rcd.EOF Then GoTo exit1 - ИМХО - плохой тон использовать гото, когда можно без него
Код: plaintext
1.
2.
3.
While Not rcd.EOF
  ...
  rcd.MoveNext
Wend
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576179
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaЕсли Goto ненужен, тогда зачем его придумали.

Когда его придумали, нас еще не было
А сейчас Goto только для отлова ошибок используют (On Error Goto ...)
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576197
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Круто!!!
А что если использовать
Docmd.RunSql "UPDATE balance SET price_balance = price_balance / " & mes()"
это тоже самое или я ошибаюсь?
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576205
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к тому же помимо ошибок, Goto всё таки иногда тоже полезен, когда надо проскочить часть текста программы, причём нельзя использовать конструкцию If...Else
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576212
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaКруто!!!
А что если использовать
Docmd.RunSql "UPDATE balance SET price_balance = price_balance / " & mes()"
это тоже самое или я ошибаюсь?

Кавычку в конце убери
+ не знаю - не пользовался таким ни когда - вроде то же самое (ИМХО)
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576217
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Progaк тому же помимо ошибок, Goto всё таки иногда тоже полезен, когда надо проскочить часть текста программы, причём нельзя использовать конструкцию If...Else

Это как?

ЗЫ: Я например могу утверждать, что любую алгоритмическую конструкцию можно реализовать с помощью оператора While , а вот чтобы нельзя было использовать if ... then ... else - это нонсенс
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576226
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не буду спорить, а за подсказку спасибо,
как говорится "Век живи, век учись", кстати в Лестнице выложил прикольные анекдоты.
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576235
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaНе буду спорить, а за подсказку спасибо,
как говорится "Век живи, век учись", кстати в Лестнице выложил прикольные анекдоты.

Дык - Лестницу я тоже читаю
...
Рейтинг: 0 / 0
Увеличение скорости работы
    #32576239
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ: только аники старые, как моя машина :)
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Увеличение скорости работы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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