|
|
|
| Ребята! Толкните меня, а топчусь уже сутки с адошными рекордсетами. Не вижу, где туплю…
В форме «Функционал» при нажатии на кнопку «Создать строку ШР ADO» алгоритм доходит до строки «rst.Open strSQL, cnn, adOpenKeyset, adLockOptimistic» подпрограммы AddNewZapisIntoStatStroka и дальше не идет, а возвращается назад.
http://zalil.ru/30784712
Что не так?? | |
|
| |
|
|
|
| а можно человеческий формат базы ХР 2003 даже 97-й | |
|
| |
|
|
|
|
|
IIf(сШН.[ВидМП]=1,
...
IIf(сШН.[ВидМП]=2,
...
IIf(сШН.[ВидМП]=3
....
сШН.ВидМП, сПравилШН.ВидМП
КАКОЙ ВАМ НУЖЕН ВИД В IF
|
| |
|
| |
|
|
|
| когда я наворотил в построителе выражений первые фразы типа
КоличДолжн: Round(IIf([ВидМП]=1;IIf([Алгоритм]=1;[ПланОбъемДеят]/[УдНорм]*[ДолжнУдНорм];IIf([Алгоритм]=2;IIf([ПланОбъемДеят]/[УдНорм]<2;0,5;1);IIf([Алгоритм]=3;[ДолжнУдНорм];IIf([Алгоритм]=4;IIf([ПланОбъемДеят]/[УдНорм]*[ДолжнУдНорм]<1;1;[ПланОбъемДеят]/[УдНорм]*[ДолжнУдНорм])))));IIf([ВидМП]=2;IIf([Алгоритм]=1;[ПланОбъемДеят]/[УдНорм]*[ДолжнУдНорм];IIf([Алгоритм]=3;[УдНорм]*[ДолжнУдНорм];IIf([Алгоритм]=5;[ПланОбъемДеят]/[УдНорм]*[ДолжнУдНорм]/8;IIf([Алгоритм]=6;[ПланОбъемДеят]/[УдНорм]*[ДолжнУдНорм]/2))));IIf([ВидМП]=3;0)))*4;0)/4
|
то понял, что далее будет еще хуже и проще перейти на VBA. К тому же это к этому толкали и другие условия. Поэтому хочу сразу на VBA написать. а почему VBA не проходит с адошными рекордсетами не понимаю, т.к. только-только их начал осваивать... | |
|
| |
|
|
|
| Наворочено нехило. Первое, что бросается в глаза - разорванная база с неопределенными связями. Формула непонятная. Округлить до неизвестного знака что-то, что вычисляется по формуле если ВидМП=1,то Если Алгоритм=1, то формула, в противном случае, если алгоритм=2, то если (одно/другое)<2, равно0,5,в остальном равно1) В противном если....
Дальше мысль теряется что от чего пляшет. Похоже отсутствуют закрывающие скобки. Конца не видно.
Попробуй через select case. с выводом некоторых условий в отдельное поле. Т.е. разбей формулу на несколько частей. | |
|
| |
|
|
|
|
Формула непонятная. Округлить до неизвестного знака что-то
|
У медиков ставки (должности) округляются до ближайшего, кратного о,25
Поэтому такая странная формула
Разорванная база: пытаюсь сделать отдельные куски (модули) как поисковые алгоритмы пока | |
|
| |
|
|
|
| сейчас в VBA сделал через select case. Нормально работает и ясен алгоритм. Он пока неполный, но сложнее чем показано в построителе выражений, хотя еще не полный (Правила построения штатного расписания сложные)
Вот чего-то не понимаю в адошном рекордсете | |
|
| |
|
52 Кб. |
|
| сорри, т.к. прилинкованные таблы были. вот схемка | |
|
| |
|
|
|
| -для чего данный запрос --видимо отчет
-деление , а вы гарантируете что /[УдНорм]*[ДолжнУдНорм] не ноль, не говоря в нулях
запросы много могут, но не надо делать из них слона
запрос это
-выборка из нескольких таблиц
-если нет умножений\делений по строке -суммировка
-расчет суммы=количество*цена с округлением при наличии суммировки
остальное в отчетах с проверками при делении
| |
|
| |
|
|
|
|
деление , а вы гарантируете что /[УдНорм]*[ДолжнУдНорм] не ноль, не говоря в нулях
|
Там специально перед запуском вручную проверяю нули или пустые данные в самой таблице
Вопрос был по рекордсету | |
|
| |
|
|
|
| Я не спец в рекордсетах, тем более в DAO, ADO и прочем. Посмотри пример осмора http://hiprog.com/forum/read.php?id_forum=1&id_theme=8518&page=1 по дереву. Как понимаю, надо создать запрос с условиями и таблицами, после чего вставить его в рекордсет и собирать (складывать) в определенное место результаты.
С другой стороны, а зачем вам этот рекордсет, когда обычные запросы сделают свое дело. | |
|
| |
|
|
|
|
С другой стороны, а зачем вам этот рекордсет, когда обычные запросы сделают свое дело
|
Любая даже простая больничка имеет врачей разных специальностей, медсестер, санитарок и прочих разных. У каждой медиц специальности свои правила формирования штатного расписания. СЛожные очень. КОличество одних специальностей (лаборантов, рентгенологов, узистов, ЭКГ) зависит от количество других. А этих других зависит от количества коек, населения и проч. Хотелось бы забить количество коек разных специальностей и на выходе посмотреть штатное расписание не ттолько отделений с койками, но и по всем другим.
Поэтому VBA, поэтому и рекордсеты. А Адошные - планирую куда нить потом вывесить, чтобы люди сверялись. А за адресок спс, обязательно посмотрю. А... TreeView - это вообще для меня высший пилотаж, еще не освоил, как то обходился, хотя понимаю, что удобно | |
|
| |
|
|
|
| >>>Поэтому VBA, поэтому и рекордсеты
задачи касающиеся здравоохранения не поддаются формализации
>.< | |
|
| |
|
|
|
| попытка не пытка
ну а потом, кто-то должон пытаться | |
|
| |
|
|
|
| ИМХО
начинать подобную работу нужно с проектирования структуры БД: таблицы, связи и проч.,
иначе потом можно иметь большой геморрой с простыми казалось бы запросами.
То, что Вам приходится сейчас ломать голову говорит о том, что структура Вашей БД не корректна.
Возможно, еще не поздно ... | |
|
| |
|
|
|
| ну конечно с проектирования, но никто полно и четко не представляет, что из себя здравоохранение представляет. пока только отдельные компоненты можно увидеть. сам для себя открываю многое, хотя в здраве работаю давно (см выше. реплику, что здрав не поддается программированию или проектированию, но как-то, правда хреново, здрав работает). Кста, работа над этим проектом (любительская) проясняет работу здрава )), пока для меня | |
|
| |
|
|
|
| Медиалог вам в помощь.
Не надо привязывать количество коек к количеству штатов. Штаты меняются каждый год, загруженность отделений будет чисто сезонная, нормативы меняют как перчатки.
Попробуй просто составить схему из 2-3 таблиц:
Филиал(если есть) - Отделение - штаты.
Обрасти ее телефонами, окладами, датами. После этого усложняй дальше. | |
|
| |
|
|
|
| количество штатов - это функция количества коек, а койки меняются редко. Некоторые нормативы не меняются десятилетиями. Проблема в другом, Гоблин:
мне нужна помощь, почему со строки:
rst.Open strSQL, cnn, adOpenKeyset, adLockOptimistic
меня отбрасывает назад, а не идет алгоритм дальше. Что я не так написал? | |
|
| |
|
|
|
| >> что из себя здравоохранение представляет
по меду, кстати, есть гигантская куча нормативной первички - налопачено примерно так, как традиционное законодательство Великобритании
есть и в доступе, сейчас, правда, сайт уже не вспомню :( | |
|
| |
|
|
|
| а может быть причина неуспеха в том, что источником записей для адошного рекордсета является запрос на выборку? | |
|
| |
|
|
|
| не мучайся. Не совсем понятна цель такого наворота. Впечатление - будто бы планирование штатного расписания делается. Ввели количество коек, и по какому-то немыслимому алгоритму разбрасывается количество штатов по отделениям.
Может разбить такое на несколько частей, запросами на создание таблиц, и вычислять в них нечто, теми же рекордсетами, и занесением результата в таблицу, затем создать еще таблицу с другими вычислениями, и снова... Потом уже групповым запросом из получившегося в таблице...
Это мысли вслух и моя алхимия с опытами на аксом.
| |
|
| |
|
|
|
| Чего то накропал. Оказывается я использовал параметрический запрос на выборку, а обычный адошный рекордсет его не понимает что-ли. Так вот rst.command.execute отрабатывает параметрические запросы, но совместить с редактированием рекордсета оказалось в один этап невозможно. Поэтому видимо параметрическим запросом сначала создам таблицу, а потом на ее основе обычный адошный рекордсет, позволяющий редактировать количество должностей по функции. Т.е. задача решается не в лоб, а частями.
А то что планирование штатного расписания делается как функция - в этом как раз и фишка.
Все равно всем спасибо. Иногда мысли вслух к чему то приводят. | |
|
| |
|
|
|
| Ну так надо взять нормы и типа: Если от ... до ... то.... и так далее. Инфу брать из таблиц отделение - количество коек. И рекордсет вроде не нужен.
Во всех случаях удачи. | |
|
| |