|
|
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Проблема: есть табла, в которой необходимо заполнить 3 столбца, 1 столб-цена 2 столб-название 3 столб- время выполнения Проблема состоит в том, что 1 столб заполняется из другой таблицы, причём данные делятся на datediff("m",a,b), где а-самая ранняя дата начала работы 3столба b- самая поздняя дата.... 3столба Пришёл к выводу, что приходится пробега дважды либо по заполняемой табле, либо по внешней (откуда берутся данные). Вопрос, а можно ли сделать так, чтобы и внешн. и заполняемая табла пробегались по разу. Нужна логика, код сам напишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 15:02:11 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
как-то мутно :( МОжет попроще объяснишь А то даже не понятно, сколько таблиц, 2 или 1 + 2 раза пробежать - это тоже линейная зависимость (ни чего страшного - ИМХО), а вот если для каждой записи полный проход, то это уже квадратичная, вот тогда надо думать (и то если скорось не устраивает) Короче, давай: - структуры обеих таблов (можно урезанные, или все-та ки одна таблица будет использоваться) - тестовые данные - что хочешь получить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 15:09:08 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
авторгде а-самая ранняя дата начала работы 3столба b- самая поздняя дата.... 3столба а теперь то же самое ,но по русски :) Трудно что ли привести тестовые даные и желаемый результат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 15:12:07 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Апаздал!((c)Л.П.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 15:13:54 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Вообще так, есть внешняя табла(всё тот же .mpp, меня им трахают уже 2-ю неделю, чем-то Project начальству приглянулся, будь он не ладен), так вот, надо из этой таблы в Аксе сформировать свою, на основе которой будет делаться отчёт о бюджете проекта. В таблу Акса необходимо поместить 1)название задачи 2)стоимость задачи, поделённую на срок действия проекта. 3)время начала задач. Нужна логика, своя есть но мне кажется как-то долго, может, что порезче предложешь, если надо выкину код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 15:20:39 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Блин! А тестовые данные где? Не надо уповать на наши скромные телепатические способности :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 15:25:24 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Это я про то, что один фиг не понятно Ясности, твой пост так и не дал :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 15:25:57 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Хорошо выкидываю код (с комментами, что надо сделать): 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 сразу нужного значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 15:35:36 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Смотрю код понравился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 15:42:24 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Просили авторКороче, давай: - структуры обеих таблов (можно урезанные, или все-та ки одна таблица будет использоваться) - тестовые данные - что хочешь получить И где тут про код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 15:49:35 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
авторООООООООООООО как всё запущено!!! В зеркало посмотри Для особо одареных повторяю ещё раз paparomeКороче, давай: - структуры обеих таблов (можно урезанные, или все-та ки одна таблица будет использоваться) - тестовые данные - что хочешь получить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 15:57:52 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Я одного не понял :( У вас сейчас все правильно работает. Но не устраивает скорость или то что приходится много раз функцию mes вызывать? Если со скростью все ОК (в разымных рамках, так сказать), то какой смысл переделывать работающий код? Чтобы ошибок понаплодить и тра%ся с их отловом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:01:47 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Хорошо, вопрос сформулирую подругому, можно ли в процессе заполнения таблицы в первый столбец (стоимость) заносить данные, пусть это будет 100 руб, делённое на количество месяцев равное datediff("m",a,b) где а - самая ранняя дата в столбце 3 (даты) b - самая поздняя дата в столбце 3 (даты), причём даты заполняются вместе со стоимостью. Все данные берутся из внешней таблицы. Поясню ещё раз код не нужен, нужна логика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:10:37 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
1) Proga: выложи -структуры обеих таблов (можно урезанные, или все-та ки одна таблица будет использоваться) - тестовые данные - что хочешь получить 2) Лишнее я потер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:13:12 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
На всякий случай повторю еще раз. ВНИМАНИЕ! Proga, выложи: - структуры обеих таблов (можно урезанные, или все-та ки одна таблица будет использоваться) - тестовые данные - что хочешь получить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:14:01 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
ProgaХорошо, вопрос сформулирую подругому, можно ли в процессе заполнения таблицы в первый столбец (стоимость) заносить данные, пусть это будет 100 руб, делённое на количество месяцев равное datediff("m",a,b) где а - самая ранняя дата в столбце 3 (даты) b - самая поздняя дата в столбце 3 (даты), причём даты заполняются вместе со стоимостью. Все данные берутся из внешней таблицы. Поясню ещё раз код не нужен, нужна логика. Значит будет одна стоимость для всех записей одного проекта? После заполнения своей таблицы, делаешь Dmax и Dmin по датам (находишь что надо) Потом одним Update по всей табле Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:16:34 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Во человек, с полуслова понимает P.S. I love you!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:20:55 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
ProgaВо человек, с полуслова понимает P.S. I love you!!! Только ты эти пол слова на станицу растянул :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:22:31 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
АХТУНГ!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:24:19 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
И ИМХО: Если я оказался прав, то стоимость в каждой строке - это дублирование информации - следовательно какие-то проблемы с нормализацией :( Может корректнее будет хранить сойства проекта отдельно, "шаги" его отдельно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:24:24 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Я не умею писать ТЗ, я всего лишь маленький глупенький программер, обчитавшийся книжек по VB 5,6, Project 2000,2002,2003, с сертификатом Optima-Workflow, знанием Delfi, C++ for САПР(AutoCad),с сертификатом Optima-Workflow, опытом работы с А2000 и кучей мусора в голове, который иногда приходится применять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:27:36 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
сертификат Optima-Workflow видать очень важная штука:) Сорри за офтоп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:44:59 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Так мысли вслух Если начало проекта -01/06/2004 , а окончание- 30/06/2004 что даст mes = cost/datediff("m",a,b) ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:47:13 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
to vig: ты немного путаешь, cost=cost/mes,(эта формула отображает распределение средств на каждый месяц на задачу в течении всего проекта). или я не понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:55:14 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Да, сертификат в 2 экземплярах??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 16:55:18 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Progato vig: ты немного путаешь, cost=cost/mes,(эта формула отображает распределение средств на каждый месяц на задачу в течении всего проекта). или я не понял? Он имел ввиду, что функция datediff может и 0 вернуть - тогда получишь деление на 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 17:03:45 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Поясню проекты в стоительстве (я там работаю) длятся не меньше 6 месяцев -это аксиома!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 17:08:33 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
авторпроекты в стоительстве (я там работаю) Вот как раз в строительстве и поаккуратнее, пожалуйста...А то расчитывают, на ноль делят, а потом у них (у нас) крыши едут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 17:19:29 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
А теперь господа предоставляю код, который я сообразил на поставленный первичный вопрос, в студию 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. Настоящие программеры разберутся,что имелось ввиду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 17:26:57 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Настоящие программеры не используют GOTO ,явно обьявляют все переменные ,ну и многое другое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 17:37:09 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Если Goto ненужен, тогда зачем его придумали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 17:39:39 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. Я такого не советовал!!! Я сказал одним Update, в ты по рекордсету начал шарахаться (да еще на каждом шаге функцию mes вызываешь, а она между прочим в базу "смотрит" - причем активно) Таблица же локальная :) Пиши так: Код: plaintext 1. ? + If rcd.EOF Then GoTo exit1 - ИМХО - плохой тон использовать гото, когда можно без него Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 17:40:43 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
ProgaЕсли Goto ненужен, тогда зачем его придумали. Когда его придумали, нас еще не было А сейчас Goto только для отлова ошибок используют (On Error Goto ...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 17:41:47 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Круто!!! А что если использовать Docmd.RunSql "UPDATE balance SET price_balance = price_balance / " & mes()" это тоже самое или я ошибаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 17:51:15 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
к тому же помимо ошибок, Goto всё таки иногда тоже полезен, когда надо проскочить часть текста программы, причём нельзя использовать конструкцию If...Else ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 17:54:43 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
ProgaКруто!!! А что если использовать Docmd.RunSql "UPDATE balance SET price_balance = price_balance / " & mes()" это тоже самое или я ошибаюсь? Кавычку в конце убери + не знаю - не пользовался таким ни когда - вроде то же самое (ИМХО) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 17:56:40 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Progaк тому же помимо ошибок, Goto всё таки иногда тоже полезен, когда надо проскочить часть текста программы, причём нельзя использовать конструкцию If...Else Это как? ЗЫ: Я например могу утверждать, что любую алгоритмическую конструкцию можно реализовать с помощью оператора While , а вот чтобы нельзя было использовать if ... then ... else - это нонсенс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 17:59:06 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
Не буду спорить, а за подсказку спасибо, как говорится "Век живи, век учись", кстати в Лестнице выложил прикольные анекдоты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 18:01:49 |
|
||
|
Увеличение скорости работы
|
|||
|---|---|---|---|
|
#18+
ProgaНе буду спорить, а за подсказку спасибо, как говорится "Век живи, век учись", кстати в Лестнице выложил прикольные анекдоты. Дык - Лестницу я тоже читаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 18:05:28 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1673603]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
200ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 523ms |

| 0 / 0 |
